zoukankan      html  css  js  c++  java
  • 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;
    
  • 相关阅读:
    thymeleaf 模板使用 之 解决因HTML标签未闭合引起的错误
    Spring MVC 拦截器
    Spring boot data jpa 示例
    Hibernate 数据库方言
    Springboot 之 静态资源路径配置
    Java 时间不一致
    IntelliJ IDEA 2017.3.2 热加载(Hot Swap)
    IntelliJ IDEA Spring boot devtools 实现热部署
    Python-集合
    Python-文件读写及修改
  • 原文地址:https://www.cnblogs.com/txgh/p/15807085.html
Copyright © 2011-2022 走看看