delphi PDFium 编辑操作(Delphi pdfium editing operation)

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 是页面的结尾。

查找范围只在当前页面内。文本索引值从 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组件PdfView1和TPdf组件Pdf1,并设置PdfView1的属性指向Pdf1

Pdf

增加PdfView1的事件

OnPaint
PdfView1Paint

在窗体上放置TButton组件Button10 和 Button11,并设置Button10的为开始查找 Button11的为查找下一个

Caption
Caption

点击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组件Pdf1 、Pdf2 和 TMemo组件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组件Pdf1 、Pdf2

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;
————————

PDFium 编辑操作

Properties and methods

TPdf.ImportPages

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

Imports a page from the specified PDF document.

参数

Pdf specifies the PDF document to import.

Range import range, which determines the pages to be imported, such as’ 1,3,5-7 ‘(import pages 1, 2, 5 to 7).

PageNumber the page number to insert. The starting page number of the imported PDF in the document, starting with 1.

< strong > return value < / strong >

Whether the import was successful.

TPdf.CreateDocument

procedure CreateDocument;

Create a new PDF document.

TPdf.SaveAs

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

Saves a copy of the PDF document to the specified file.

参数

Filename filename.

Option save options.

Pdfversion is the version of the PDF file.

< strong > return value < / strong >

Whether the save was successful.

TPdfVersion

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

The version of the PDF file.

  • 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);

Save options.

  • SanOne did not specify an option
  • saIncremental 增量
  • saNoIncremental 无增量
  • saRemoveSecurity 删除安全

TPdfView.FindFirst

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

Start searching for the specified text.

参数

Text search string

Options search flag

StartIndex search starts indexing. From 0.

Directionup search direction, whether to look down.

< strong > return value < / strong >

Searches for the position of the first character in the text, and returns – 1 if the text is not found.

The search scope is only within the current page. The text index value starts at 0 and – 1 is the end of the page.

The search scope is only within the current page. The text index value starts at 0 and – 1 is the end of the page.

TSearchOption

type TSearchOption = (seCaseSensitive, seWholeWord, seConsecutive);

TSearchOptions

type TSearchOptions = set of TSearchOption;

Search flag.

  • seCaseSensitive 区分大小写
  • seWholeWord 匹配整个单词
  • Seconsitive do not skip the current match to find the next one

TPdfView.FindNext

function FindNext: Integer;

Search from the beginning to the end of the page.

< strong > return value < / strong >

Searches for the position of the first character in the text, and returns – 1 if the text is not found.

You must use the function to start the search before calling.

You must use the function to start the search before calling.

FindFirst

TPdfView.FindPrevious

function FindPrevious: Integer;

Search from the end of the page to the beginning.

< strong > return value < / strong >

Searches for the position of the first character in the text, and returns – 1 if the text is not found.

You must use the function to start the search before calling.

You must use the function to start the search before calling.

FindFirst

TPdfView.PaintSelection

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

Draws the selected text area using the specified mask color.

参数

Selectionstart starts indexing the selected text

Selectionend ends the index of the selected text

Mask set color

example

find text

Place tpdfview component pdfview1 and tpdf component pdf1 on the form, and set the property of pdfview1 to point to pdf1

Pdf

Add event for pdfview1

OnPaint
PdfView1Paint

Place tbutton components button10 and button11 on the form, and set button10 to start searching button11 to find the next one

Caption
Caption

Click button10 to start searching, and then click button11 to find the next one. The background color of the found content changes to yellow

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

Place tpdf components pdf1, pdf2 and TMemo component memo1 on the form

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

Place tpdf components pdf1 and pdf2 on the form

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;