Skip to content

createPdfPreview ​

ts
import { createPdfPreview } from "@marcusok/pdf-preview";

const preview = createPdfPreview(container, options);
// preview: { destroy(): void }

把连续滚动、懒渲染的 PDF 预览挂载进 container(容器只是挂载点——预览渲染进内部 wrapper,destroy() 同步摘除)。

PdfPreviewOptions ​

选项类型默认值说明
sourceFile | Blob | Uint8Array | ArrayBuffer—PDF 字节。读取失败归 UNKNOWN
scalenumber | "fit-width" | "fit-page""fit-width"创建时解析一次。数值必须为正、字符串只能是 "fit-width"/"fit-page"(否则同步抛 TypeError)。隐藏容器(0 宽)退回 1 并 console.warn
textLayerbooleantruecanvas 之上可选中复制的透明文本层
workerSrcstring推导worker 脚本 URL。默认:bundler 自动 emit 的锚点字面量,src 直跑形态另有 ../dist/ 运行时兜底。可传绝对 URL 或根相对/相对路径;相对路径会先按页面基址解析,再推导 cmaps/字体目录(见快速上手)
cMapUrlstring推导CMap 目录 URL(以 / 结尾)。bundler 场景 CJK 文档必传;缺失静默劣化
standardFontDataUrlstring推导标准字体目录 URL(以 / 结尾);PDF 引用非内嵌标准字体时需要
wasmUrlstring—pdf.js wasm 目录(不随包分发;缺它 JPX/JBIG2/ICC 降级——见限制)
iccUrlstring—ICC 配置目录(不随包分发;缺它色彩管理降级)
renderOptionsPdfRenderOptions—getDocument 参数白名单透传(见下)
styleNoncestring—本包注入 <style> 的 nonce。不覆盖 pdf.js 自身的运行时字体样式——见限制
onRendered(info: PdfRenderedInfo) => void—首个成功渲染页绘制完成时触发一次(懒渲染管线没有"全部页完成"事件;若第一页渲染失败,由后续第一张成功页触发)
onError(error: PdfPreviewError) => void—全部失败路径。destroy() 触发的取消静默(不是错误)

PdfRenderOptions ​

允许透传的 getDocument 参数白名单:

选项类型说明
disableFontFaceboolean不加载内嵌字体(调试/兜底辅助)
useSystemFontsboolean优先用系统字体替代标准字体文件

其余参数由本包接管:data(来自 source)、cMapUrl/cMapPacked/standardFontDataUrl/wasmUrl/iccUrl(资产推导 + 顶层选项)、enableXfa(固定 false)、verbosity(保持上游默认)、以及仅对 url 源有意义的 disableAutoFetch/rangeChunkSize(内存源下无意义,不透传)。isEvalSupported 在 pdf.js 6.x 已不存在。

PdfRenderedInfo ​

字段说明
pageCount文档总页数(numPages)
firstPageMs首个绘制完成的页:canvas + 文本层
durationMs从 createPdfPreview 调用到该页绘制完成(源读取 + 嗅探 + 解析 + 渲染)

错误码 ​

错误码何时
UNSUPPORTED头部 1024 字节内无 %PDF- 魔数,或输入为空
PASSWORD_PROTECTED加密 PDF(上游 PasswordException;message 区分需要密码与密码被拒)
CORRUPT魔数合法但解析/渲染失败(InvalidPDFException 与未预期异常;保留 cause)
UNKNOWN管线之外——源读取失败、worker/资产 URL 不可达、资产 URL 配置错误

PdfPreviewInstance ​

ts
interface PdfPreviewInstance {
  destroy(): void;
}

destroy() 断开观察器、取消在途 RenderTask 与文本层流、清零已渲染 canvas、调用 loadingTask.destroy()(终止 worker)并摘除 DOM。幂等;之后回调静默。共享的样式单例有意保留(其他实例可能仍在使用)。