delphi PDFium 编辑操作

PDFium 编辑操作

属性和方法

TPdf.ImportPages

function ImportPages(Pdf: TPdf; const Range: string; PageNumber: Integer = 1): Boolean;

从指定的PDF文档导入页面。

参数

Pdf 指定导入的PDF文档。

Range 导入范围,决定要导入的页面,例如'1,3,5-7'(导入第1页、第2页,第5到第7页)。

PageNumber 插入的页码。导入的PDF在文档中的开始页码,页码从1开始的 。

返回值

导入是否成功。

TPdf.CreateDocument

procedure CreateDocument;

创建一个新的PDF文档。

TPdf.SaveAs

function SaveAs(const FileName: string; Option: TSaveOption = saNone; PdfVersion: TPdfVersion = pvUnknown): Boolean;

将PDF文档的副本保存到指定的文件。

参数

FileName 文件名。

Option 保存选项。

PdfVersion PDF 文件的版本。

返回值

保存是否成功。

TPdfVersion

type TPdfVersion = (pvUnknown, pv10, pv11, pv12, pv13, pv14, pv15, pv16, pv17);

PDF 文件的版本。

  • pvUnknown 未知版本
  • pv10 PDF版本 1.0
  • pv11 PDF版本 1.1
  • pv12 PDF版本 1.2
  • pv13 PDF版本 1.3
  • pv14 PDF版本 1.4
  • pv15 PDF版本 1.5
  • pv16 PDF版本 1.6
  • pv17 PDF版本 1.7

TSaveOption

type TSaveOption = (saNone, saIncremental, saNoIncremental, saRemoveSecurity);

保存选项。

  • saNone 没有指定选项
  • saIncremental 增量
  • saNoIncremental 无增量
  • saRemoveSecurity 删除安全

TPdfView.FindFirst

function FindFirst(const Text: WString; Options: TSearchOptions = []; StartIndex: Integer = 0; DirectionUp: Boolean = True): Integer;

开始搜索指定的文本。

参数

Text 搜索的字符串

Options 搜索标志

StartIndex 搜索开始索引。从 0 开始的。

DirectionUp 搜索方向,是否向下查找 。

返回值

搜索文本中第一个字符的位置,如果未找到文本,则返回 -1。

查找范围只在当前页面内。文本索引值从 0 开始的,-1 是页面的结尾。

TSearchOption

type TSearchOption = (seCaseSensitive, seWholeWord, seConsecutive);

TSearchOptions

type TSearchOptions = set of TSearchOption;

搜索标志。

  • seCaseSensitive 区分大小写
  • seWholeWord 匹配整个单词
  • seConsecutive 不要跳过当前匹配来寻找下一个匹配

TPdfView.FindNext

function FindNext: Integer;

从页面开始到结束的方向进行搜索。

返回值

搜索文本中第一个字符的位置,如果未找到文本,则返回 -1。

调用前必须使用 FindFirst 函数启动搜索。

TPdfView.FindPrevious

function FindPrevious: Integer;

从页面结尾到开始的方向进行搜索。

返回值

搜索文本中第一个字符的位置,如果未找到文本,则返回 -1。

调用前必须使用 FindFirst 函数启动搜索。

TPdfView.PaintSelection

procedure PaintSelection(SelectionStart, SelectionEnd: Integer; Mask: TColor);

使用指定的蒙版颜色绘制选定的文本区域。

参数

SelectionStart 选定文本开始索引

SelectionEnd 选定文本结束索引

Mask 设置的颜色

例子

查找文本

在窗体上放置TPdfView组件PdfView1TPdf组件Pdf1,并设置PdfView1Pdf属性指向Pdf1

增加PdfView1OnPaint事件PdfView1Paint

在窗体上放置TButton组件Button10Button11,并设置Button10Caption开始查找 Button11Caption查找下一个

点击Button10开始查找,再点击Button11查找下一个,查找到的内容背景色变为黄色

var
  SearchStart: Integer = -1;
  SearchEnd: Integer = -1;
  SearchText: WString;

procedure TForm1.Button10Click(Sender: TObject);
begin
  //读取pdf文件
  Pdf1.FileName := 'C:\LargeFile.pdf';
  //设置要查找的页
  PdfView1.PageNumber := 1;
  //打开PDF
  PdfView1.Active := True;
  //查找的内容
  SearchText := '星期一';
  //初始化查找信息
  SearchStart := PdfView1.FindFirst(SearchText, []);
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
  //只有调用FindFirst后才能调用FindNext或FindPrevious
  if SearchStart = -1 then Exit;
  //查找下一个
  SearchStart := PdfView1.FindNext;
  //查找上一个
  //SearchStart := Pdf1.FindPrevious;
  //如果当前页没有找到时,切换下一页继续查找
  if SearchStart > -1 then
  begin
    //重绘页面
    PdfView1.Invalidate;
  end
  else if PdfView1.PageNumber < PdfView1.PageCount then
  begin
    PdfView1.PageNumber := PdfView1.PageNumber + 1;
    SearchStart := PdfView1.FindFirst(SearchText, []);
  end;
end;

procedure TForm1.PdfView1Paint(Sender: TObject);
begin
  if not PdfView1.Active then Exit;
  if SearchStart > -1 then
  begin
    //计算字符长度 AnsiString字符的delphi版本,PDFium中使用的是WString类型
    SearchEnd := SearchStart + Length(SearchText) - 1;
    //设置背景色
    PdfView1.PaintSelection(SearchStart, SearchEnd, clYellow);
  end;
end;

合并PDF

在窗体上放置TPdf组件Pdf1Pdf2TMemo组件Memo1

procedure TForm1.Button12Click(Sender: TObject);
var
  I: Integer;
begin
  //添加要合并的PDF文档列表
  Memo1.Lines.Clear;
  Memo1.Lines.Add('C:\LargeFile1.pdf');
  Memo1.Lines.Add('C:\LargeFile2.pdf');
  Memo1.Lines.Add('C:\LargeFile3.pdf');
  try
    //打开第一个PDF文档
    Pdf1.FileName := Memo1.Lines[0];
    Pdf1.Active := True;
    //循环文档列表
    for I := 1 to Memo1.Lines.Count - 1 do
    begin
      //打开要合并的PDF文档
      Pdf2.Active := False;
      Pdf2.FileName := Memo1.Lines[I];
      Pdf2.Active := True;
      //将要合并的PDF文档导入第一个PDF文档
      Pdf1.ImportPages(Pdf2, '1-' + IntToStr(Pdf2.PageCount), Pdf1.PageCount + 1);
    end;
    //保存PDF文档
    Pdf1.SaveAs('C:\merge.pdf');
  finally
    Pdf1.Active := False;
    Pdf2.Active := False;
  end;  
end;

分隔PDF

在窗体上放置TPdf组件Pdf1Pdf2

procedure TForm1.Button13Click(Sender: TObject);
var
  I: Integer;
begin
  try
    //读取pdf文件
    Pdf2.FileName := 'C:\LargeFile.pdf';
    Pdf2.PageNumber := 0;
    Pdf2.Active := True;
    //循环pdf页面
    for I := 1 to Pdf2.PageCount do
    try
      //创建导出的PDF文档
      Pdf1.CreateDocument;
      //将页面导入到创建的PDF中
      Pdf1.ImportPages(Pdf2, IntToStr(I));
      //保存PDF文档
      Pdf1.SaveAs('C:\Page_' + IntToStr(I) + '.pdf');
    finally
      Pdf1.Active := False;
    end;
  finally
    Pdf2.Active := False;
  end;
end;
posted @ 2022-01-15 15:15  txgh  阅读(1128)  评论(0编辑  收藏  举报