UNPKG

@orca-fe/pdf-viewer

Version:
92 lines (91 loc) 3.27 kB
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)[];