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组件PdfView1和TPdf组件Pdf1,并设置PdfView1的Pdf
属性指向Pdf1
增加PdfView1的OnPaint
事件PdfView1Paint
在窗体上放置TButton组件Button10 和 Button11,并设置Button10的Caption
为开始查找 Button11的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;