export declare type ISafeAny = any; export interface ISearchParams { /** * 关键词 */ keyword: string; /** * 大小写敏感,默认 false(不敏感) */ caseSensitive?: boolean; } export interface IPdfConfig { /** * 只显示 pdf,不显示标注 */ pdfOnly: boolean; /** * pdf 文件地址 */ pdfUrl: string; /** * pdf 概览文件 */ pdfInfoUrl: string | IViewPort[]; /** * pdf 字符文件 */ pdfCharsUrl: string | string[]; /** * pdf 字符文件,支持模板语法:./json/page_{{pageNumber}}.json */ pdfTextUrl: string; /** * 开启文档预渲染 */ pdfEnablePreRender?: boolean; /** * 文档预渲染 url,如 https://localhost:4422/pdf/table/m118/webp/page_{{pageNumber}}.webp */ pdfPreRenderUrl?: string; /** * 最大缓存页面数 */ pdfPageMaxCacheCount?: number; /** * 预加载页面数量 */ pdfPagePreloadCount?: number; /** * 支持 pdf 文件懒加载,默认为 true,开启情形下, */ pdfLazyLoading?: boolean; /** * 文档获取参数 */ pdfGetDocumentParams?: DocumentInitParameters; } export interface IStyles { /** * 普通样式 */ normalStyle?: Partial; /** * 鼠标 hover 样式 */ hoverStyle?: Partial; /** * 被选中时样式 */ selectedStyle?: Partial; /** * 激活样式 */ activeStyle?: Partial; } export interface IFunctionsConfig { /** * 文本标注可见 */ labelVisible: boolean; /** * 文本标注可删除 */ labelDeletable: boolean; /** * 文本标注可选择 */ labelSelectable: boolean; /** * 表格可合并 */ tableMergeable: boolean; /** * 表格可分隔 */ tableSplitable: boolean; /** * 表格拆分、合并可见模式,默认 [OperateMode.tableCreateTables, OperateMode.tableResizeTables, OperateMode.tableDeleteTables] */ tableFunctionsVisibleModes: OperateMode[]; /** * 表格空白处可创建的模式 */ tableCreateableModes: OperateMode[]; /** * 现在这项配置只针对于规则表格,不规则表格使用新的配置 */ tableVisible: boolean; /** * 不规则表格可见 */ irTableVisible: boolean; /** * 图形可见 */ shapeVisible: boolean; /** * 监听表格 dom 变更 */ watchTableChange: boolean; /** * ready$ 后立即 setZoom 会有 pdf 渲染问题,这时可以设置 defaultZoom */ defaultZoom?: number; /** * 与 setRotation 一致,主要用于解决旋转纠正闪烁的情形 */ rotationList?: IPdfRotation; } export interface ITableMirroringConfig { /** * 开启表格镜像操作(只支持新增竖线与删除竖线) */ tableMirroring: boolean; /** * 表格镜像操作页码数 */ tableMirroringPages: boolean[]; } export interface IPageLoadingConfig { pageLoadingStyle: Partial; } export interface ICursorFollowerConfig { cursorFollower: Partial<{ /** * 向左偏移距离 */ leftOffset: number; /** * 向上偏移距离 */ topOffset: number; /** * 样式 */ style: Partial; /** * 文本内容 */ text: string; }>; } export interface IConfig extends IPdfConfig, Partial, Partial, Partial, Partial { id: string; operateMode?: OperateMode; /** * 与 axios 请求配置一致 * https://github1s.com/axios/axios/blob/HEAD/index.d.ts#L50 */ requestConfig?: ISafeAny; } export interface IReadyParams { pageCount: number; } export interface IViewPort { basePageIndex?: number; pageCharsCount?: number; height: number; scale: number; width: number; rotation?: number; num: number; } export interface IViewPortsObj { [key: number]: IViewPort; } export interface IHistoryChangeEvent { counts: number; index: number; isFirst: boolean; isLast: boolean; labels?: ILabels; tables?: ITables; } export declare type IPdfRotation = number[]; export declare type IPdfMask = Array>; export interface IPdfScrollingEvent { top: number; } export interface IKeyBoardEvent { altKey: boolean; char: string; charCode: number; code: string; ctrlKey: boolean; isComposing: boolean; key: string; keyCode: number; location: number; metaKey: boolean; repeat: boolean; shiftKey: boolean; DOM_KEY_LOCATION_LEFT: number; DOM_KEY_LOCATION_NUMPAD: number; DOM_KEY_LOCATION_RIGHT: number; DOM_KEY_LOCATION_STANDARD: number; } export declare enum OperateMode { none = "none", /** * 划选 */ textSlip = "textSlip", /** * 框选 */ textFrame = "textFrame", /** * 组合 */ textGroup = "textGroup", /** * 选择单元格 */ tableSelectCells = "tableSelectCells", /** * 新增表格 */ tableCreateTables = "tableCreateTables", /** * 调整表格 */ tableResizeTables = "tableResizeTables", /** * 删除表格 */ tableDeleteTables = "tableDeleteTables", /** * 增加横线 */ tableCreateHLines = "tableCreateHLines", /** * 增加竖线 */ tableCreateVLines = "tableCreateVLines", /** * 增加表格线 (任意长度) */ tableCreateLines = "tableCreateLines", /** * 调整线条 | 调整单元格(不规则表格) */ tableResizeCells = "tableResizeCells", /** * 删除线 */ tableDeleteLines = "tableDeleteLines", /** * 删除单元格线 */ tableDeleteCellLines = "tableDeleteCellLines", /** * 绘制单元格 */ tableCreateCells = "tableCreateCells", /** * 表格受控模式 */ tableAllControl = "tableAllControl", /** * 绘制多边形 */ polygonDrawing = "polygonDrawing", /** * 绘制矩形 */ rectDrawing = "rectDrawing", /** * 调整形状 */ shapeResizing = "shapeResizing" } export interface IScrollOffset { offsetTop?: number; offsetLeft?: number; } export interface IScrollToRectParams extends IScrollOffset { pageIndex: number; x0: number; y0: number; x1: number; y1: number; } export interface IScrollToPageParams { pageIndex: number; top?: number; } export declare type ILabelPlacement = 'top' | 'left' | 'right' | 'bottom' | 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' | 'leftTop' | 'leftBottom' | 'rightTop' | 'rightBottom'; export interface ILabel extends IStyles { uuid: string; word: string; index: number; words?: ILabelRangeWord[]; /** * 已选择 */ selected?: boolean; /** * 已激活 */ active?: boolean; /** * 所在页码 */ pageNumber?: number; /** * 可被选中 */ unselectable?: boolean; /** * 可删除 */ deleteable?: boolean; /** * 所在位置 */ position?: ILabelPosition; /** * 所在最后一页页码(针对跨页标注) */ lastPageNumber?: number; /** * 上一页高度 */ prevPagesHeight?: number; /** * 动画样式 */ activeAnimation?: 'normal' | 'flash'; /** * 隐藏 tooltip */ tooltipHidden?: boolean; /** * @experimental * 标签(实验性特性) */ controlExp?: { text: string; /** * height & fontSize */ height: number; style: Partial; placement?: ILabelPlacement; visible?: 'none' | 'start' | 'end' | 'all'; }; info?: { [prop: string]: ISafeAny; }; } declare type ILabelIndex = { docIndex: number; pageNumber?: number; index?: number; } | { docIndex?: number; pageNumber: number; index: number; }; export declare type ILabelRangeWord = { word: string; top: number; left: number; width: number; height: number; } & ILabelIndex; export interface ISearchLabel extends ILabel { prefix: string; suffix: string; } export declare type ILabelPosition = [number, number, number, number]; export declare type ILabels = ILabel[]; export declare type ISearchLabels = ISearchLabel[]; export interface IClickMetadata { altKey: boolean; ctrlKey: boolean; metaKey: boolean; shiftKey: boolean; which: number; } export interface IPosition { x: number; y: number; width: number; height: number; } export interface IPointer { x: number; y: number; } export interface IEvent { data: T[]; } export interface IEventWithPosition { data: T[]; position: IPosition; } export declare type ICreateLabelsEvent = IEventWithPosition; export declare type IDragLabelsEvent = IEvent; export declare type IResizeLabelsEvent = IEvent; export declare type IDeleteLabelsEvent = IEventWithPosition; export declare type IMouseEnterLabelsEvent = IEventWithPosition; export declare type IMouseLeaveLabelsEvent = IEvent; export interface IClickLabelsEvent extends IEventWithPosition { metadata: IClickMetadata; } export interface IScrollToLabelsParams extends IScrollOffset { labels: ILabel[]; activeIndex?: number; } export interface ISetLabelsParams { labels: ILabels; recordHistory?: boolean; } /** * 可视化 page json */ export interface IVisualPageJsonParams { /** * 页码列表 */ pageNumberList: number[]; /** * 显示边框, 默认显示 (true) */ borderVisible?: boolean; /** * 纠正边框,默认不纠正 (false) */ borderCorrection?: boolean; /** * 背景色 (transparent) */ bgColor?: string; /** * 显示文字,默认显示 (true) */ textVisible?: boolean; /** * 文本默认样式 */ textNormalStyle?: Partial; /** * 显示索引,默认显示 (true) */ indexVisible?: boolean; } export interface ISetShapesParams { shapes: IShapes; } /** * 表格样式 */ export interface ITableStyle { /** * 线条样式 */ lineStyle: { /** * 默认样式 */ defaultColor: string; }; } export interface ITable { /** * 表格 id */ table_id?: string; /** * 单元格合并标记,默认为 0,大于 0 且数值相同的单元格则为合并单元格 */ mask: number[][]; /** * 单元格,注意页码是 page_num 不是 page_number */ cells: ICell[][]; /** * 表格样式 */ style?: ITableStyle; /** * 单元格文本矩阵 */ text_matrix: string[][]; /** * 在 json 中标记 table 状态 */ matrix_type: null | 'insert' | 'update' | 'delete'; } export interface ITableOperation { /** * 唯一标识 */ uuid: string; /** * icon 路径 */ iconSrc?: string; /** * tooltip */ tooltip?: string; /** * 激活状态,默认 false */ active?: boolean; /** * 是 divider */ divider?: boolean; } /** * 表格悬浮操作栏点击事件 */ export interface ITableOperationClickParams { /** * 操作项 */ operation: ITableOperation; /** * 所在表格 id */ tableId: string; /** * 鼠标点击位置 */ pos: IPointer; } export declare type ITableOperationClickEvent = IEvent; export interface ICell extends IStyles { x: number; y: number; height: number; width: number; page_num: number; tableId?: string; text?: string; } export declare type ITables = { page_number: number; tables: ITable[]; }[]; export interface IScrollToTablesParams extends IScrollOffset { tables: ITable[]; activeIndex?: number; } export interface IScrollToTableCellsParams extends IScrollOffset { cells: ICell[]; activeIndex?: number; } export interface IHighLightTableCellsParams extends IScrollOffset { cells: ICell[]; activeIndex?: number; } export interface IHighLightTableCells extends IScrollOffset { cells: { x: number; y: number; width: number; height: number; groupId: string; pageIndex: number; style?: Partial; hoverStyle?: Partial; }[]; } export interface ITableMatrix { tableId: string; type: 'update' | 'insert' | 'delete' | null; pageNumber: number; area: number[]; lines: number[][][]; } export interface IThinTable { tableId: string; pageIndex: number; } export interface IViewTable { tableId: string; height: number; top: number; containerHeight: number; } export declare type ICreateTablesEvent = IEvent<{ id: string; area: IPosition; pageIndex: number; }>; export declare type IViewTablesChangeEvent = IEvent; export declare type IDeleteTablesEvent = IEvent; export declare type IMouseEnterTablesEvent = IEventWithPosition; export declare type IMouseLeaveTablesEvent = IEvent; export interface IClickTablesEvent extends IEventWithPosition { cell: { x: number; y: number; col: number; row: number; selected: boolean; } | null; metadata: IClickMetadata; } export interface IUpdateTablesEvent { data: { tableId: string; cells: ICell[][]; mask: number[][]; }[]; } export interface IMergeTablesEvent { data: { tableId: string; cells: ICell[][]; mask: number[][]; pageIndex: number; }[]; } export declare type IHighLightCells = Array<{ tableId: string; pageNumber: number; startPoint: IPosition; endPoint: IPosition; style?: Partial; }>; export declare type ISplitTablesEvent = IEvent; /****************************************************************************** * * 不规则表格 * ******************************************************************************/ /** * 不规则表格 JSON */ export interface IIRCell extends IStyles { /** * 唯一标识 */ uuid: string; /** * 左上坐标 x */ x: number; /** * 左上坐标 y */ y: number; /** * 矩形宽 */ width: number; /** * 矩形高 */ height: number; /** * 页码 */ page_number: number; /** * 是否显示 tooltip,默认不显示,空字符串或 undefined 都不会显示 tooltip */ tooltip?: string; /** * 是否隐藏,默认不隐藏(false) */ hidden?: boolean; /** * 是否被选中,默认不选中(false) */ selected?: boolean; /** * 是否激活,默认不激活(false) */ active?: boolean; /** * 是否可选中,默认可选中(true) */ selectable?: boolean; /** * 是否可删除,默认可删除(true) */ deletable?: boolean; info?: { [key: string]: any; }; } export declare type IIRLineRow = [[number, number], [number, number]]; export declare type IIRCellRow = IIRCell[]; export declare type IIRTable = IIRTablePerPage[]; export interface IIRTableStyle extends ITableStyle { } export interface IIRTablePerPage { page_number: number; tables: Array<{ table_id: string; cells: IIRCellRow[]; lines: IIRLineRow[]; style?: IIRTableStyle; }>; } /** * * 不规则表格 EVENT * */ export declare type IUpdateIRTablesEvent = IEvent<{ tableId: string; cells: IIRCellRow[]; lines: IIRLineRow[]; }>; /** * 创建单元格(绘制单元格) */ export declare type ICreateIRTableCellsEvent = IEvent<{ area: { x: number; y: number; width: number; height: number; }; tableId: string; pageNumber: number; cells: IIRCellRow[]; lines: IIRLineRow[]; }>; /** * 跳转到单元格 */ export interface IScrollToIRTableCellsParams extends IScrollOffset { cells: Array<{ x: number; y: number; width: number; height: number; tableId: string; pageNumber: number; style: Partial; }>; } /****************************************************************************** * * 图形标注 * ******************************************************************************/ /** * 新增图形 */ export declare type ICreateShapesEvent = IEvent<(Omit | Omit) & { pageNumber: number; }>; export declare type IShapeEventBase = (Omit | Omit) & { pageNumber: number; uuid: string; }; /** * 点击图形 */ export interface IClickShapesEvent { data: IShapeEventBase[]; metadata: IClickMetadata; } /** * 点击图形 decal */ export declare type IClickShapesDecalEvent = IEvent; /** * 更新图形 */ export declare type IUpdateShapesEvent = IEvent; /** * 删除图形 */ export declare type IDeleteShapesEvent = IEvent; /** * 图形 dom 更新 */ export interface IShapeDomsChangeEvent { data: { [uuid: string]: boolean; }; } /** * 这部分参数继承自 pdfjs 文档加载接口,你可以用来携带复杂请求头等 */ export interface DocumentInitParameters { /** * 基础验证表头 */ httpHeaders?: Object; /** * 跨站访问控制请求应使用证书,如cookies或授权头文件。默认为`false`。 */ withCredentials?: boolean; /** * 作为 cookies 或授权头文件,默认是 false */ password?: string; /** * PDF文件的长度,它用于进度报告和范围请求操作 */ length?: number; /** * 指定每个范围请求所获取的最大字节数 */ rangeChunkSize?: number; /** * 将用于加载和解析 PDF 数据的工作者 */ worker?: ISafeAny; /** * 控制日志级别 */ verbosity?: number; /** * 文档的基本URL,在试图为注释和大纲项目恢复有效的绝对URL时使用,这些注释和大纲项目(不正确地)只指定相对URL */ docBaseUrl?: string; /** * 预定义的Adobe CMaps所在的URL。包括尾部的斜线 */ cMapUrl?: string; /** * 指定Adobe CMaps是否为二进制包装。 */ cMapPacked?: boolean; /** * 读取内置 CMap 文件时将使用的工厂。对于没有 Fetch API 或 `XMLHttpRequest` 支持的环境,如 Node.js,提供一个自定义工厂是非常有用的 */ CMapReaderFactory?: Object; /** * `getOperatorList`、`getTextContent` 和 `RenderTask`,当相关的 PDF 数据不能被成功解析时,而不是尝试恢复任何可能的数据。默认值是 `false`。 */ stopAtErrors?: boolean; /** * 允许的最大图像尺寸,以总像素计,即宽度*高度。超过这个值的图像将不会被渲染。使用-1表示没有限制,这也是默认值。 */ maxImageSize?: number; /** * 禁用 PDF 文件的范围请求加载。启用后,如果服务器支持部分内容请求,那么 PDF 将被分块取走。默认值是`false`。 */ disableRange?: boolean; /** * 禁用 PDF 文件的数据流。默认情况下,PDF.js会尝试以块状方式加载PDF文件。默认值是`false`。 */ disableStream?: boolean; /** * 禁用预取PDF文件的数据。当启用范围请求时,PDF.js将自动继续获取更多的数据,即使不需要显示当前的页面。默认值是`false`。 * * 注意:也有必要禁用流媒体,见上文,以使禁用预取功能正常工作。 */ disableAutoFetch?: boolean; } export declare type IShapes = IShape[]; export declare type IShape = IShapePolygon | IShapeRectangle; export declare type IShapeDecalPlacement = 'top' | 'left' | 'right' | 'bottom' | 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' | 'leftTop' | 'leftBottom' | 'rightTop' | 'rightBottom'; export interface IShapeDecal { placement: IShapeDecalPlacement; text: string; style?: Partial; bgColor?: string; } /** * 结构信息 */ export interface IShapeStructure { /** * 文本 */ text: string; /** * 宽度 */ width?: number; /** * 高度 */ height?: number; /** * 填充色 */ fill?: string; /** * 样式 */ style?: Partial; } export interface IShapeBase extends IStyles { pageNumber: number; uuid: string; /** * 已选中 */ selected?: boolean; /** * 已激活 */ active?: boolean; /** * 可选中 */ selectable?: boolean; /** * 可删除 */ deleteable?: boolean; /** * 不可见 */ hidden?: boolean; /** * 追踪 dom 变化 */ trackDomChange?: boolean; /** * 动画方式 */ activeAnimation?: 'flash' | 'normal'; /** * 图形的标识信息 */ decal?: IShapeDecal; /** * 文档结构 */ structure?: IShapeStructure; /** * 位置 */ position?: IPosition; /** * 附加信息 */ info?: { [key: string]: ISafeAny; }; } export interface IShapePolygon extends IShapeBase { type: 'polygon'; points: IPointer[]; } export interface IShapeRectangle extends IShapeBase { type: 'rectangle'; points: [IPointer, IPointer]; text?: Partial<{ content: string; style: Partial; }>; } export interface IScrollToShapesParams extends IScrollOffset { shapes: IShapes; activeIndex?: number; topDistance?: number; } export {};