注意 PDFium 本身不是线程安全的。
虽然可以在 aardio 线程里使用 fsys.pdfium, 但应当避免多线程同时操作 PDF。
如果能确定同一时刻只有一个线程使用 fsys.pdfium 则没有问题,
否则应当用 thread.lock 加锁以避免并发访问 pdfium 接口。 https://github.com/xuncv/PDFium-aardio https://pdfium.googlesource.com/pdfium/+/refs/heads/main/public/
https://pdfium.googlesource.com/pdfium/+/refs/heads/main/public/fpdf_edit.h
https://pdfium.googlesource.com/pdfium/+/refs/heads/main/public/fpdf_doc.h
https://pdfium.googlesource.com/pdfium/+/refs/heads/main/public/fpdfview.h说明
关于线程安全
顶目主页
相关头文件:
创建或打开 PDF 解析文档对象。
参数 @1 可指定 PDF 文件路径或数据。
如果事先导入 inet.http,参数 @1 也可以指定 PDF 文件网址。
指定网址且下载 PDF 时不卡界面
基于 Google 开源组件 PDFium 封装的 PDF 解析库
可选调用此函数初始化 PDFium 组件,
用法请参考函数源码与 PDFium 文档。
一般不必主动调用此函数
返回错误信息。
如果最后一次操作成功则返回 null
返回书签树状数据表,返回对象可以用作 treeview 控件 insertItem 方法的参数。
返回子节点数组,纯数组对象。
书签对应的 PDF 页码,页码自 1 开始
书签标题
当前页转换为 gdip.bitmap 对象。
@scaleOrDpi 指定缩放比例(如 1.5)或渲染 DPI(如 150),默认 1。
@bgcolor 指定背景色,默认为白色。
@pageNum 指定页码,省略则转换为当前活动页。
导入 PDF 设置。
srcPdf 指定要导入的 fsys.pdfium 对象,也可指定 PDF 路径或数据
创建页面。
@index 指定页码,@width 指定宽,@height 指定高
删除参数 @1 指定页码的页面,起始页码为 1。
如果删除 pageNum 指定的页码则关闭当前页,且 pageNum 设为 0
释放对象
在当前页绘制线条。
(x1,y1) 为起点坐标,(x2,y2) 为终点坐标。
strokeWidth 为线条宽度,strokeColor 为线条颜色。
颜色支持 0xAARRGGBB 格式。
在当前页绘制矩形。
x, y 为左上角坐标。
strokeWidth 为边框宽度,strokeColor 为边框颜色,fillColor 为填充颜色。
颜色支持 0xAARRGGBB 格式。
for pageNum,width,height in fsysPdfiumObject.eachPageSize(){
/*遍历页面宽高。*/
}
for pageNum,textContent in fsysPdfiumObject.eachPageText(){
/*遍历所有页面文本。
可选用 startPageNum,endPageNum 参数指定开始与结束页码。
pageNum 为当前页码,textContent 为当前页文本内容。
需要注意不是所有 PDF 页面都提供文本,有些只能转为图像。*/
}
for left,top,right,bottom,text in fsysPdfiumObject.eachTextRect(){
/*遍历当前页文本区块。
left,top,right,bottom 分别为左上右下位置。
text 为文本*/
}
渲染并导出指定页面为图像文件。成功返回 true,失败返回 null,错误信息。
@pageNum 指定页码。
@path 指定保存路径,支持.png, .jpg等。
@dpi 指定缩放倍数或渲染 DPI(如 150)。
@bgcolor 指定背景色。
提取多页文本并合并为字符串。
可选指定起止页码与页面文本分隔符,默认使用回车换行。
提取目录,返回 fsys.pdfium.bookmark 对象。
提取并返回指定页的文本内容。如果不指定 pageNum 参数,默认使用当前活动页。
在当前页查找文本,返回包含 index,count 字段的数组。
index 为字符索引,起始值为 1;count 为匹配字符数。
flags 可指定 PDFium 搜索标志。
获取 PDF 元数据。
返回包含 Title,Author,Subject,Keywords,Creator,Producer,CreationDate,ModDate 等字段 of type table 的对象。
获取指定页码的页面宽高,返回 width,height。
页码自 1 开始,省略页码则使用当前页。
导入并合并 PDF。
srcPdf 指定要导入的 fsys.pdfium 对象,也可指定 PDF 路径或数据。
@index 指定要插入的页码,不指定则添加到尾部。
@pageIndicesOrRange 可以指定页码数组,
也可以用字符串指定区间,示例:"1,3,5-7"。
省略 @pageIndicesOrRange 则导入所有页面
插入图像到当前页面。
bitmap 可指定图像文件数据或路径,也可指定 gdip.bitmap 对象。
可选用参数 left, top, width, height 指定插入坐标与宽高。
需要注意这里需要指定相对于页面左上角的坐标(PDFium 默认坐标原点为左下角)。
在当前页插入文本。
text 为要插入的字符串。
x, y 为左上角坐标。
fontSize 为字号,默认为 12。
font 可以是 'Helvetica', 'Courier', 'Times-Roman' 等标准字体名,也可以是 loadFont 返回的字体句柄。
color 为文本颜色,支持 0xAARRGGBB 格式。
加载嵌入字体文件(使用嵌入字体会增大 PDF 体积),建议指定 ttf 后缀的字体文件。
fontPath 为字体文件路径。
参数 fontType 默认为 2/*_FPDF_FONT_TRUETYPE*/,可指定为 1/*_FPDF_FONT_TYPE1*/。
参数isCid 指定是否为 CID 字体(一般是中文字体),默认为 true 。
成功返回字体句柄,失败返回 null。返回的句柄在 pdfium 对象销毁时自动释放。
获取页面总数,只读属性。
获取页面高度,只读属性。
读取或设置当前活动页码,页码自 1 开始
读取或设置当前页旋转方向。
0 不旋转,1 顺时针 90 度,2 旋转 180 度,3 逆时针 90 度。
获取页面宽度,只读属性。
窗口绘图
参数 @hdcOrGraphics 可指定 hdc 或 graphics 对象,
@x,@y 指定 x,y 坐标,@cx 指定宽,@cy 指定高。
@rotate 为 1 顺时针转 90 度,设为 2 转 180 度,设为 3 为逆时针转 90 度
@rotate 与 @flags 一般不必指定
保存 PDF 文件
保存 PDF 到文件,成功返回 true。
@path 指定文件路径。
可选用 @fileVersion 指定文件版本,15 表示版本 1.5。
@flags 为可选参数,一般不用指定,用法请参考 PDFium 文档
fsysPdfiumObject.saveAsCopy( function(pWriter,pData,size){
/*保存 PDF 回调函数,其他为可选调用参数(不用管)。
回调参数 pData 为要写入的内存指针,回调参数 size 为待写入长度。
保存成功请返回非零数值,出错返回 0*/
})
保存 PDF 到内存并返回 buffer。
可选用 fileVersion 指定 PDF 文件版本,例如 15 表示 1.5。
跨页全局检索文本,成功返回包含命中的 pageNum,index,count,text 字段的数组对象。
提取当前页指定字符范围内的文本。
startIndex 起始值为 1,count 为字符数。
fsys.pdfium 扩展库加载的 pdfium.dll 模块对象。
_FPDFBitmap_BGR=2
_FPDFBitmap_BGRA=4
_FPDFBitmap_BGRx=3
_FPDFBitmap_Gray=1
_FPDFBitmap_Unknown=0