Skip to content

渲染文档

福昕 PDF SDK(Web)在文档打开后会创建对应的渲染对象,并默认渲染当前可见页面。开发者可以通过 PDFViewerPDFDocRenderPDFUI 实例控制页面跳转、缩放、旋转和重绘。

本文介绍常用的文档渲染控制接口。这里的渲染控制只影响查看器中的显示效果,不等同于修改 PDF 文档内容。

获取文档渲染对象

getPDFDocRender() 用于获取当前文档的渲染对象。如果当前没有打开文档,则返回 null

javascript
const pdfViewer = await pdfui.getPDFViewer();
const docRender = pdfViewer.getPDFDocRender();

if (!docRender) {
    console.log('当前没有打开文档');
}

PDFDocRender 可用于访问当前文档的视图状态和页面渲染对象。

获取页面渲染对象

getPDFPageRender(index) 用于获取指定页面的渲染对象。页面索引从 0 开始。

javascript
const pdfViewer = await pdfui.getPDFViewer();
const pageRender = pdfViewer.getPDFPageRender(0);

if (pageRender) {
    console.log('第 1 页渲染对象已获取');
}

页面渲染对象可用于处理与单页显示相关的操作,例如坐标转换、获取页面对象或访问页面上的注释渲染对象。具体可用能力请以 API Reference 中的 PDFPageRender 为准。

跳转页面

PDFDocRender.goToPage(index, offset, isPDFPoint) 用于跳转到指定页面。index0 开始。

javascript
const pdfViewer = await pdfui.getPDFViewer();
const docRender = pdfViewer.getPDFDocRender();

// 跳转到第 3 页。
await docRender.goToPage(2);

如果需要跳转到页面上的指定位置,可以传入 offsetisPDFPointtrue 时,offset 按 PDF 坐标处理;否则按 device 坐标处理。

javascript
// 使用 PDF 坐标跳转到第 1 页的指定位置。
await docRender.goToPage(0, { x: 0, y: 500 }, true);

缩放文档

zoomTo(scale, position) 用于设置查看器缩放比例。scale 可以是数值,也可以是 'fitWidth''fitHeight'

javascript
const pdfViewer = await pdfui.getPDFViewer();

// 按比例缩放。
await pdfViewer.zoomTo(1.25);

// 适合页面宽度。
await pdfViewer.zoomTo('fitWidth');

// 适合页面高度。
await pdfViewer.zoomTo('fitHeight');

如果传入数值,缩放比例需要在 PDFViewer 初始化参数允许的最小值和最大值范围内。

旋转视图

rotateTo(degree, options) 用于旋转当前文档的视图显示。该接口只改变查看器中的渲染效果,不会修改 PDF 文档数据。

javascript
const pdfViewer = await pdfui.getPDFViewer();

await pdfViewer.rotateTo(90);

可用角度应为 090180270,或 90 的倍数。

重绘页面

redraw(force) 用于重绘当前可见页面。

javascript
const pdfViewer = await pdfui.getPDFViewer();

// 重绘当前可见页面。
await pdfViewer.redraw();

// 强制刷新缓存后重绘。
await pdfViewer.redraw(true);

当您通过 API 修改了会影响页面显示的内容后,可以调用 redraw() 更新视图。

控制打开后的初始渲染

打开文档时,isRenderOnDocLoaded 默认值为 true,文档加载完成后会自动渲染。

javascript
await pdfui.openPDFByFile(file, {
    fileName: file.name,
    isRenderOnDocLoaded: true
});

如果需要在渲染前先执行准备逻辑,可以使用 beforeRenderPDFDoc

javascript
await pdfui.openPDFByFile(file, {
    fileName: file.name,
    beforeRenderPDFDoc: async function(pdfDoc) {
        // 在首次渲染前执行准备逻辑。
    }
});

注意事项

  • getPDFDocRender()getPDFPageRender(index) 依赖当前已打开的文档;文档关闭后不要继续复用旧对象。
  • rotateTo() 只改变视图旋转效果,不会写入 PDF 文档。
  • 高频调用 zoomTo()redraw() 等渲染接口时,应在业务层控制调用频率,避免造成不必要的渲染开销。
  • 如果需要修改文档内容,请使用对应的文档、页面、注释或表单 API;渲染接口主要用于控制查看器显示。