delphi PDFium 编辑操作
<h1 id="pdfium-编辑操作">PDFium 编辑操作</h1><h2 id="属性和方法">属性和方法</h2>
<h3 id="tpdfimportpages">TPdf.ImportPages</h3>
<pre><code class="language-delphi">function ImportPages(Pdf: TPdf; const Range: string; PageNumber: Integer = 1): Boolean;
</code></pre>
<p>从指定的PDF文档导入页面。</p>
<p><strong>参数</strong></p>
<p><em>Pdf</em> 指定导入的PDF文档。</p>
<p><em>Range</em> 导入范围,决定要导入的页面,例如'1,3,5-7'(导入第1页、第2页,第5到第7页)。</p>
<p><em>PageNumber</em> 插入的页码。导入的PDF在文档中的开始页码,页码从1开始的 。</p>
<p><strong>返回值</strong></p>
<p>导入是否成功。</p>
<h3 id="tpdfcreatedocument">TPdf.CreateDocument</h3>
<pre><code class="language-delphi">procedure CreateDocument;
</code></pre>
<p>创建一个新的PDF文档。</p>
<h3 id="tpdfsaveas">TPdf.SaveAs</h3>
<pre><code class="language-delphi">function SaveAs(const FileName: string; Option: TSaveOption = saNone; PdfVersion: TPdfVersion = pvUnknown): Boolean;
</code></pre>
<p>将PDF文档的副本保存到指定的文件。</p>
<p><strong>参数</strong></p>
<p><em>FileName</em> 文件名。</p>
<p><em>Option</em> 保存选项。</p>
<p><em>PdfVersion</em> PDF 文件的版本。</p>
<p><strong>返回值</strong></p>
<p>保存是否成功。</p>
<h3 id="tpdfversion">TPdfVersion</h3>
<pre><code class="language-delphi">type TPdfVersion = (pvUnknown, pv10, pv11, pv12, pv13, pv14, pv15, pv16, pv17);
</code></pre>
<p>PDF 文件的版本。</p>
<ul>
<li><em>pvUnknown</em> 未知版本</li>
<li><em>pv10</em>PDF版本 1.0</li>
<li><em>pv11</em>PDF版本 1.1</li>
<li><em>pv12</em>PDF版本 1.2</li>
<li><em>pv13</em>PDF版本 1.3</li>
<li><em>pv14</em>PDF版本 1.4</li>
<li><em>pv15</em>PDF版本 1.5</li>
<li><em>pv16</em>PDF版本 1.6</li>
<li><em>pv17</em>PDF版本 1.7</li>
</ul>
<h3 id="tsaveoption">TSaveOption</h3>
<pre><code class="language-delphi">type TSaveOption = (saNone, saIncremental, saNoIncremental, saRemoveSecurity);
</code></pre>
<p>保存选项。</p>
<ul>
<li><em>saNone</em> 没有指定选项</li>
<li><em>saIncremental</em> 增量</li>
<li><em>saNoIncremental</em> 无增量</li>
<li><em>saRemoveSecurity</em> 删除安全</li>
</ul>
<h3 id="tpdfviewfindfirst">TPdfView.FindFirst</h3>
<pre><code class="language-delphi">function FindFirst(const Text: WString; Options: TSearchOptions = []; StartIndex: Integer = 0; DirectionUp: Boolean = True): Integer;
</code></pre>
<p>开始搜索指定的文本。</p>
<p><strong>参数</strong></p>
<p><em>Text</em> 搜索的字符串</p>
<p><em>Options</em> 搜索标志</p>
<p><em>StartIndex</em> 搜索开始索引。从 0 开始的。</p>
<p><em>DirectionUp</em> 搜索方向,是否向下查找 。</p>
<p><strong>返回值</strong></p>
<p>搜索文本中第一个字符的位置,如果未找到文本,则返回 -1。</p>
<blockquote>
<p>查找范围只在当前页面内。文本索引值从 0 开始的,-1 是页面的结尾。</p>
</blockquote>
<h3 id="tsearchoption">TSearchOption</h3>
<pre><code class="language-delphi">type TSearchOption = (seCaseSensitive, seWholeWord, seConsecutive);
</code></pre>
<h3 id="tsearchoptions">TSearchOptions</h3>
<pre><code class="language-delphi">type TSearchOptions = set of TSearchOption;
</code></pre>
<p>搜索标志。</p>
<ul>
<li><em>seCaseSensitive</em> 区分大小写</li>
<li><em>seWholeWord</em> 匹配整个单词</li>
<li><em>seConsecutive</em> 不要跳过当前匹配来寻找下一个匹配</li>
</ul>
<h3 id="tpdfviewfindnext">TPdfView.FindNext</h3>
<pre><code class="language-delphi">function FindNext: Integer;
</code></pre>
<p>从页面开始到结束的方向进行搜索。</p>
<p><strong>返回值</strong></p>
<p>搜索文本中第一个字符的位置,如果未找到文本,则返回 -1。</p>
<blockquote>
<p>调用前必须使用 <code>FindFirst</code> 函数启动搜索。</p>
</blockquote>
<h3 id="tpdfviewfindprevious">TPdfView.FindPrevious</h3>
<pre><code class="language-delphi">function FindPrevious: Integer;
</code></pre>
<p>从页面结尾到开始的方向进行搜索。</p>
<p><strong>返回值</strong></p>
<p>搜索文本中第一个字符的位置,如果未找到文本,则返回 -1。</p>
<blockquote>
<p>调用前必须使用 <code>FindFirst</code> 函数启动搜索。</p>
</blockquote>
<h3 id="tpdfviewpaintselection">TPdfView.PaintSelection</h3>
<pre><code class="language-delphi">procedure PaintSelection(SelectionStart, SelectionEnd: Integer; Mask: TColor);
</code></pre>
<p>使用指定的蒙版颜色绘制选定的文本区域。</p>
<p><strong>参数</strong></p>
<p><em>SelectionStart</em> 选定文本开始索引</p>
<p><em>SelectionEnd</em> 选定文本结束索引</p>
<p><em>Mask</em> 设置的颜色</p>
<h2 id="例子">例子</h2>
<h3 id="查找文本">查找文本</h3>
<p>在窗体上放置TPdfView组件<em>PdfView1</em>和TPdf组件<em>Pdf1</em>,并设置<em>PdfView1</em>的<code>Pdf</code>属性指向<em>Pdf1</em></p>
<p>增加<em>PdfView1</em>的<code>OnPaint</code>事件<code>PdfView1Paint</code></p>
<p>在窗体上放置TButton组件<em>Button10</em> 和 <em>Button11</em>,并设置<em>Button10</em>的<code>Caption</code>为<u>开始查找</u> <em>Button11</em>的<code>Caption</code>为<u>查找下一个</u></p>
<p>点击<em>Button10</em>开始查找,再点击<em>Button11</em>查找下一个,查找到的内容背景色变为黄色</p>
<pre><code class="language-delphi">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;
</code></pre>
<h3 id="合并pdf">合并PDF</h3>
<p>在窗体上放置TPdf组件<em>Pdf1</em> 、<em>Pdf2</em>和 TMemo组件<em>Memo1</em></p>
<pre><code class="language-delphi">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;
Pdf1.Active := True;
//循环文档列表
for I := 1 to Memo1.Lines.Count - 1 do
begin
//打开要合并的PDF文档
Pdf2.Active := False;
Pdf2.FileName := Memo1.Lines;
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;
</code></pre>
<h3 id="分隔pdf">分隔PDF</h3>
<p>在窗体上放置TPdf组件<em>Pdf1</em> 、<em>Pdf2</em></p>
<pre><code class="language-delphi">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;
</code></pre><br><br>
来源:https://www.cnblogs.com/txgh/p/15807085.html
頁:
[1]