@orca-fe/pdf-viewer
Version:
PDF Viewer
92 lines (91 loc) • 3.27 kB
TypeScript
import React from 'react';
import type { PDFDocumentProxy } from '@orca-fe/pdfjs-dist-browserify';
import type { SetState } from 'ahooks/es/useSetState';
export type SourceType = string | URL | ArrayBuffer;
export type LoadOptions = {
title?: string;
resetScrollTop?: boolean;
};
/**
* PDF 控制器
* 用于控制 PDF 阅读器,进行基础操作
*/
export type PDFViewerHandle = {
/** 加载文件,支持 url / 文件 / ArrayBuffer */
load: (file: Promise<SourceType | Blob> | SourceType | Blob, options?: LoadOptions) => Promise<void>;
/** 关闭文件,恢复初始状态 */
close: () => Promise<void>;
/** 设置当前的缩放级别 */
setZoom: (zoom: number) => void;
/** 获取当前的缩放级别 */
getZoom: () => number;
/** 翻页 */
changePage: (pageIndex: number, anim?: boolean) => void;
/** 滚动到制定高度 */
scrollTo: Element['scrollTo'];
/** 获取当前页码 */
getCurrentPage: () => number;
/** 获取总页数 */
getPageCount: () => number;
/** 获取某一页的 PDF 图像内容(Blob) */
getPageBlob: (index: number, options?: {
scale?: number;
outputScale?: number;
}) => Promise<Blob | null>;
setTitle: (title: React.ReactNode) => void;
getRoot: () => HTMLElement | null;
getFileSource: () => SourceType | null | undefined;
getPDFInstance: () => PDFDocumentProxy | undefined;
pluginLoad: () => void;
pluginLoaded: () => void;
};
export type PageViewport = {
height: number;
offsetX: number;
offsetY: number;
rotation: number;
scale: number;
transform: [number, number, number, number, number, number];
viewBox: [number, number, number, number];
width: number;
rawDims: {
pageHeight: number;
pageWidth: number;
pageX: number;
pageY: number;
};
};
export type RenderPageCoverFnType = (pageIndex: number, options: {
viewport: PageViewport;
zoom: number;
}) => React.ReactNode;
export type PDFViewerInternalStateType = Record<string, any> & {
drawingPluginName: string;
};
export type PDFViewerContextType = {
loading: boolean;
pluginLoading: number;
pages: any[];
current: number;
zoom: number;
pdfViewer: PDFViewerHandle;
forceUpdate: () => void;
pageCoverRefs: (HTMLDivElement | null)[];
bodyElement: HTMLDivElement | null;
viewports: PageViewport[];
internalState: PDFViewerInternalStateType;
setInternalState: SetState<PDFViewerInternalStateType>;
onMenuCollect: (callback: (...args: any[]) => any) => void;
offMenuCollect: (callback: (...args: any[]) => any) => void;
};
declare const PDFViewerContext: React.Context<PDFViewerContextType>;
export default PDFViewerContext;
export type PDFToolbarContextType = {
toolbarLeftDom: HTMLDivElement | null;
toolbarRightDom: HTMLDivElement | null;
addCenterToolbarId: (id: string, order?: number) => void;
removeCenterToolbarId: (id: string) => void;
centerToolbarIds: string[];
};
export declare const PDFToolbarContext: React.Context<PDFToolbarContextType>;
export declare function usePageCoverRenderer(): (callback: RenderPageCoverFnType) => (import("react/jsx-runtime").JSX.Element | null)[];