delphi使用Foxit Quick PDF Library读写pdf文本和图片
程序员文章站
2022-03-03 08:18:53
简介: Debenu Quick PDF Library(PDF编程开发工具)提供一套全方位的 PDF API 函数,帮助您快速简便地处理 PDF 文件。从文档属性的基本操作到创建您自己的 PDF 查看器和 PDF 编辑器,这款软件满足您的所有需求。Quick PDF Library是一款供 PDF ......
简介:
debenu quick pdf library(pdf编程开发工具)提供一套全方位的 pdf api 函数,帮助您快速简便地处理 pdf 文件。从文档属性的基本操作到创建您自己的 pdf 查看器和 pdf 编辑器,这款软件满足您的所有需求。quick pdf library是一款供 pdf 开发人员使用的 sdk,功能强大、无需版税,其中包括超过500个函数,可用于 delphi、c、c#、c++、asp、vb6、vb.net、vbscript、php、powerbasic 等,使用 activex、dll、lib 或 delphi 版本的库
官方帮助文档:https://www.debenu.com/docs/pdf_library_reference/functiongroups.php
可以参考(提取文本和图像并插入新pdf):
安装:
首先到官网下载该库,官网地址为:http://www.debenu.com/。本文所使用的版本为11.11,下载后得到一个exe文件:foxit_quick_pdf_library_en.exe。双击exe文件即可安装控件库,安装过程中会要求输入安装目录,选择合适的目录完成安装。
文件gettingstarted.pdf
介绍了在使用该控件库之前需要做的一些准备工作。首先以管理员身份运行命令提示符并切换到安装目录下,然后输入以下命令完成控件的注册。(我这里安装了两个版本所以有1131的版本)
接着把debenupdflibrarydll1111.dll、debenupdflibrarydll1111.pas 添加到delphi项目中
实例程序
程序记得uses debenupdflibrarydll1111
unit unit1; interface uses windows, messages, sysutils, variants, classes, graphics, controls, forms, dialogs, synpdf, stdctrls, debenupdflibrarydll1111; type tform1 = class(tform) btn1: tbutton; edt1: tedit; edt2: tedit; lbl1: tlabel; procedure btn1click(sender: tobject); procedure formcreate(sender: tobject); private { private declarations } public { public declarations } end; var form1: tform1; implementation {$r *.dfm} // 读取pdf文本内容以及图片 function readpdf(const filename, saveimagepath: string; var text: string; var imagefiles: string): string; var rpdf: tdebenupdflibrarydll1111; imagecount, i, j, num, keystatus, fh, pr: integer; begin result := ''; num := 0; if trim(filename) = '' then begin result := 'path cannot be empty'; exit; end; if (trim(saveimagepath) <> '') and (not directoryexists(saveimagepath)) then begin forcedirectories(saveimagepath); // 创建目录 end; rpdf := tdebenupdflibrarydll1111.create('debenupdflibrarydll1111.dll'); // 库 keystatus := rpdf.unlockkey('**********'); // 密钥 秘钥可以购买或者找我要 if keystatus <> 1 then begin result := 'the library cannot be loaded or unlocked fails'; exit; end; try rpdf.loadfromfile(trim(filename), ''); // 以直接访问模式打开文件并存储文件句柄 fh := rpdf.daopenfile(filename, ''); for i := 1 to rpdf.dagetpagecount(fh) do begin rpdf.selectpage(i); // 选区页 text := text + rpdf.getpagetext(8); // 获取文本 8:更准确的文本提取算法 if trim(saveimagepath) <> '' then begin imagecount := rpdf.getpageimagelist(0); // 获取图片 for j := 1 to rpdf.getimagelistcount(imagecount) do // 遍历当前页中的所有图片 begin rpdf.saveimagelistitemdatatofile(imagecount, j, 0, saveimagepath + '\' + inttostr(num) + '.png'); imagefiles := imagefiles + saveimagepath + '\' + inttostr(num) + '.png ; '; inc(num); end; end; end; finally rpdf.free; end; end; // 写pdf function writepdf(const filename, text: string): string; var wpdf: tdebenupdflibrarydll1111; num, wstatus: integer; begin result := ''; if trim(filename) = '' then begin result := 'path cannot be empty'; exit; end; try wpdf := tdebenupdflibrarydll1111.create('debenupdflibrarydll1111.dll'); // 库 try wstatus := wpdf.unlockkey('*************'); // 密钥 if wstatus = 1 then begin num := wpdf.addtruetypesubsettedfont('fangsong', text, 0); wpdf.selectfont(num); wpdf.drawwrappedtext(50, 750, 500, text); wpdf.savetofile(filename); end else begin result := 'the library cannot be loaded or unlocked fails'; end; finally wpdf.free; end; except on e: exception do result := e.message; end; end; procedure tform1.btn1click(sender: tobject); var text, imagefiles: string; begin text := ''; imagefiles := ''; // showmessage(writepdf(edt1.text,edt2.text)); showmessage(readpdf(edt1.text, edt2.text, text, imagefiles)); lbl1.caption := text; showmessage(text); showmessage(imagefiles); end; procedure tform1.formcreate(sender: tobject); begin //readandwritepdf(); end; end.
运行:
提取的:
原本pdf: