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;