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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM