Skip to content

页面对象

页面对象是 PDF 页面内容流中的图形对象,例如文本、图片和路径。福昕 PDF SDK(Web)可读取指定页面中的图形对象,按点或矩形命中对象,也可添加、删除或调整对象属性。

相关接口包括:

  • PDFPage.getGraphicsObjectsCount():获取页面图形对象数量。
  • PDFPage.getGraphicsObjectByIndex():按索引读取页面对象。
  • PDFPage.getGraphicsObjectAtPoint():按 PDF 坐标点命中页面对象。
  • PDFPage.getGraphicsObjectsByRect():按矩形范围读取页面对象。
  • PDFPage.addGraphicsObject():添加文本、图片或路径对象。
  • PDFPage.addImage():向页面添加图片对象。
  • PDFPage.removeGraphicsObject():删除页面对象。
  • GraphicsObject.getRect()GraphicsObject.setRect()GraphicsObject.setMatrix()GraphicsObject.setFillColor()GraphicsObject.setOpacity():读取或修改对象常用属性。
  • TextObject.setText()TextObject.setFontSize()TextObject.setBold()TextObject.setItalic():修改文本对象内容或样式。
  • ImageObject.setRotation():设置图片对象旋转角度。

遍历页面对象

javascript
const page = await pdfDoc.getPageByIndex(0);
const count = await page.getGraphicsObjectsCount();

for (let i = 0; i < count; i++) {
    const object = await page.getGraphicsObjectByIndex(i);
    console.log(object.getType(), object.getRect());
}

按位置获取对象

getGraphicsObjectAtPoint(point, tolerance, type) 使用 PDF 坐标。type 可使用 PDFViewCtrl.PDF.constant.Graphics_ObjectType 中的对象类型。

javascript
const object = await page.getGraphicsObjectAtPoint(
    [100, 100],
    3,
    PDFViewCtrl.PDF.constant.Graphics_ObjectType.All
);

也可以按矩形范围获取对象:

javascript
const objects = await page.getGraphicsObjectsByRect({
    rect: { left: 100, right: 300, top: 700, bottom: 600 },
    tolerance: 0,
    type: PDFViewCtrl.PDF.constant.Graphics_ObjectType.All
});

添加图片对象

javascript
const imageBuffer = await fetch('/assets/logo.png').then(res => res.arrayBuffer());

await page.addImage(imageBuffer, {
    left: 100,
    right: 220,
    top: 720,
    bottom: 640
});

添加图形对象

PDFPage.addGraphicsObject(info) 可添加文本、图片或路径对象。不同对象类型需要不同参数。

javascript
await page.addGraphicsObject({
    type: PDFViewCtrl.PDF.constant.Graphics_ObjectType.Text,
    originPosition: { x: 100, y: 700 },
    text: 'Hello Foxit',
    fillColor: 0xFF000000,
    font: {
        standardId: PDFViewCtrl.PDF.constant.Font_StandardID.e_StdIDCourier
    },
    matrix: [1, 0, 0, 1, 0, 0]
});

修改或删除对象

javascript
const object = await page.getGraphicsObjectByIndex(0);

await object.setOpacity(0.8);
await object.setRect({
    left: 100,
    right: 300,
    top: 720,
    bottom: 650
});

await page.removeGraphicsObject(object);

修改页面内容后,应调用保存接口导出文件,并在 Viewer 中按需重绘。

javascript
await pdfViewer.redraw(true);

const file = await pdfDoc.getFile({
    fileName: 'page-objects.pdf'
});

注意事项

  • 页面对象接口修改的是 PDF 页面内容,完成后需要导出或保存文件。
  • 坐标使用 PDF 坐标,不是 Viewer 的 device pixels。
  • 添加或修改对象通常需要文档修改权限。
  • 文本、图片、路径对象支持的属性不同,使用前应确认对象类型。
  • 如果只是读取页面上的文本内容,请使用 文本提取;如果是给页面添加水印,请优先使用 水印