pdf-engine发布

npm地址: @zouchengxin/pdf-engine - npm

demo地址: pdf-engine

介绍

pdf-engine内部使用pdfium编译的Webassembly二进制文件。

目前已支持功能:

  • 解析XObject和Annotation对象
  • 页面预览
  • 编辑保存(创建Link)

安装

bash 复制代码
# yarn add @zouchengxin/pdf-engine
# pnpm install @zouchengxin/pdf-engine
npm install @zouchengxin/pdf-engine

使用

初始化

javascript 复制代码
import { PdfEngine } from '@zouchengxin/pdfium-engine';

const pdfEngine = new PdfEngine();
// API_KEY not provided, validity period until 2026-01-01, You can adjust the system time for testing.
// Or contact the developer to obtain the API key.
await pdfEngine.init(API_KEY);

解析

javascript 复制代码
// Load PDF documents, parameter Uint8Array
const pdfDoc = pdfEngine.loadPdf(data);
// Get the number of pages
const count = pdfDoc.getPageCount();
// Retrieves PDF metadata.
// returning the fields Title, Author, Subject, Keywords, Creator, Producer, CreationDate, and ModDate.
const meta = pdfDoc.getMetaData();
console.log('Page Count:', count);
console.log('Pdf Meta:', meta);
pdfPages.value = [];
for (let i = 0; i < count; i++) {
  // Obtain the page proxy object and perform operations such as parsing and editing.
  const page = pdfDoc.getPageProxy(i);
  // Get page width
  const width = page.getPageWidth();
  // Get page height
  const height = page.getPageHeight();
  // Retrieves all xobject objects on the page.
  // including those of type TEXT, PATH, IMAGE, SHADING, and FORM.
  const objs = page.getObjects();
  // Retrieves all annotation objects on the page.
  // including those of type TEXT, LINK, FREETEXT, LINE, SQUARE, CIRCLE, HIGHLIGHT, UNDERLINE, STAMP, INK etc.
  const annots = page.getAnnotions();
  console.log('Page Size:', width, height);
  console.log('Page Objects:', objs);
  console.log('Page Annotions:', annots);
}

渲染

javascript 复制代码
// Retrieve the bitmap after page rendering; render only the xobject object, excluding annotations.
// Return value: ImageData object
const data = page.getBitmap();
// Retrieve page thumbnail; return empty if not stored.
// Return value: ImageData object
const data = page.getThumbnail();

编辑

javascript 复制代码
// Create a link annotation.
// rect: a rectangular area.
// url: the redirect link.
page.createLinkAnno({
  rect: [100, 100, 160, 27],
  url: 'https://www.baidu.com',
});

// More features are under development.

// Save the PDF data and return a Uint8Array.
const uint8Arr = pdfDoc.savePdf();

注意

  • color: r, g, b, a, 红绿蓝透明通道组成的数组。
  • rect: x, y, w, h, 矩形区域左下角x/y坐标,w/h代表宽度高度。
  • 坐标系: 页面左下角为原点,水平方向为x轴。
  • API_KEY: 联系开发者获取,或者修改系统时间至2026/01/01之前进行测试。
相关推荐
Metaphor6922 小时前
Python 实用技巧:从零自主生成结构化 PDF 页面
python·pdf
tianyatest21 小时前
给 AI Agent 写了个 Skill:扫描版电子书自动解压合并 + 加书签(附 PDG 格式逆向)
ai·pdf·电子书
开开心心就好1 天前
一元二次方程求解工具,答案带详细步骤
java·服务器·开发语言·算法·pdf·ocr·perl
闭包不眠1 天前
网页转PDF字体出错不报错,我先看文件大小
图像处理·人工智能·计算机视觉·pdf
鲲穹AI种草1 天前
PDF 编辑工具怎么选,多款工具实际使用情况整理
pdf·pdf 编辑工具
阿松爱学习1 天前
【Unity开发】Aspose.PDF的使用
unity·pdf·c#
andrsted2 天前
练题簿在线免费刷题:Word、PDF 导题与预览补全,把现成资料变成可练习题库
微信小程序·小程序·pdf·word·学习方法·刷题
AI行业应用研究2 天前
会务信息载体的演进:纸质、PDF 与结构化数据源的分发成本与版本一致性
大数据·人工智能·安全·小程序·架构·pdf
king13598745502 天前
EmbeddingGemma 2 270M 实测:Mac CPU、PDF/Word、256d 与 FTS5
macos·pdf·word
2501_930707782 天前
使用C#代码从 PDF 文档中提取附件
pdf