欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

delphi使用Foxit Quick PDF Library读写pdf文本和图片

程序员文章站 2022-06-15 10:21:39
简介: 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文件即可安装控件库,安装过程中会要求输入安装目录,选择合适的目录完成安装。

delphi使用Foxit Quick PDF Library读写pdf文本和图片

 

 


文件gettingstarted.pdf介绍了在使用该控件库之前需要做的一些准备工作。首先以管理员身份运行命令提示符并切换到安装目录下,然后输入以下命令完成控件的注册。(我这里安装了两个版本所以有1131的版本

delphi使用Foxit Quick PDF Library读写pdf文本和图片

 

接着把debenupdflibrarydll1111.dll、debenupdflibrarydll1111.pas 添加到delphi项目中

delphi使用Foxit Quick PDF Library读写pdf文本和图片

 

 

 实例程序

程序记得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.

运行:

提取的:

delphi使用Foxit Quick PDF Library读写pdf文本和图片

 

原本pdf:

delphi使用Foxit Quick PDF Library读写pdf文本和图片