delphi PDFium 常用功能

摘要:
TPdf.LoadDocumentprocedureLoadDocument;从内存中打开并加载PDF文档。参数Left、Top左上角坐标Width、Height宽度和高度Rotation页面旋转。Options页面呈现标志。ro0无页面旋转ro90页面顺时针旋转90度ro180页面顺时针旋转180度ro270页面顺时针旋转270度TRenderOptionstypeTRenderOptions=setofTRenderOption;页面呈现标志。TPdfView.PageNumberpropertyPageNumber:Integer;当前选择的页面。PageNumber值必须是1到PageCount之间。TPdfView.PageCountpropertyPageCount:Integer;文档中的总页数。
PDFium 常用功能

属性和方法

TPdf.Active

property Active: Boolean;

打开或关闭选定的PDF文档。

TPdf.FileName

property FileName: string;

PDF文件的名称(包含路径)。

TPdf.Password

property Password: string;

PDF文件的密码。

TPdf.PageNumber

property PageNumber: Integer;

当前选择的页面。

PageNumber值必须是1到PageCount之间。

TPdf.PageCount

property PageCount: Integer;

文档中的总页数。只读属性。

TPdf.LoadDocument

procedure LoadDocument(Data: TMemoryStream);

从内存中打开并加载PDF文档。

参数

Data 内存数据。当文档打开时,内存数据必须保持有效。

TPdf.RenderPage

function RenderPage(Left, Top, Width, Height: Integer; Rotation: TRotation = ro0; Options: TRenderOptions = []; Color: TColor = clWhite): TBitmap;

将页面内容转换为位图。

参数
LeftTop 左上角坐标

WidthHeight 宽度和高度

Rotation 页面旋转。

Options 页面呈现标志。

Color 背景色。

返回值
转换后的位图

TRotation

type TRotation = (ro0, ro90, ro180,  ro270);

PDF 页面旋转。 页面旋转顺时针旋转。

  • ro0 无页面旋转
  • ro90 页面顺时针旋转 90 度
  • ro180 页面顺时针旋转 180 度
  • ro270 页面顺时针旋转 270 度

TRenderOptions

type TRenderOptions = set of TRenderOption;

页面呈现标志。

  • reAnnotations 渲染注解
  • reLcd 为 LCD 显示优化的文本渲染
  • reNoNativeText 不要使用某些平台上提供的本机文本输出
  • reGrayscale 灰度输出
  • reDebugInfo 设置是否要获取一些调试信息
  • reNoCatchException 设置是否要不捕获异常
  • reLimitCache 限制图像缓存大小
  • reHalftone 始终使用半色调进行图像拉伸
  • rePrinting 渲染打印
  • reReverseByteOrder 以相反的字节顺序呈现; 此标志仅在渲染到位图时启用
  • reNoSmoothText 禁用文本上的抗锯齿
  • reNoSmoothImage 禁用图像上的抗锯齿
  • reNoSmoothPath 禁用路径上的抗锯齿

TPdfView.Active

property Active: Boolean;

打开或关闭选定的 PDF 页面。

TPdfView.PageNumber

property PageNumber: Integer;

当前选择的页面。

PageNumber值必须是1到PageCount之间。

TPdfView.PageCount

property PageCount: Integer;

文档中的总页数。只读属性。

例子

浏览PDF文件

在窗体上放置TPdfView组件PdfView1TPdf组件Pdf1,并设置PdfView1Pdf属性指向Pdf1

procedure TForm1.Button1Click(Sender: TObject);
begin
  //关闭已打开的PDF文件
  Pdf1.Active := False;
  //设置打开的PDF文件路径
  Pdf1.FileName := 'C:\LargeFile.pdf';
  //设置PDF文件密码
  Pdf1.Password := '';
  //设置打开的页数
  PdfView1.PageNumber := 1;
  //显示PDF
  PdfView1.Active := True;
end;

加载流中的PDF文件

在窗体上放置TPdfView组件PdfView1TPdf组件Pdf1,并设置PdfView1Pdf属性指向Pdf1

procedure TForm1.Button2Click(Sender: TObject);
var
  Memory: TMemoryStream;
begin
  //关闭已打开的PDF文件
  Pdf1.Active := False;
  //加载PDF文件到流中
  Memory := TMemoryStream.Create;
  Memory.LoadFromFile('C:\LargeFile.pdf');
  //设置PDF文件密码
  Pdf1.Password := '';
  //设置打开的页数
  PdfView1.PageNumber := 1;
  //加载流中的PDF
  Pdf1.LoadDocument(Memory);
  //显示PDF
  PdfView1.Active := True;
end;

打印PDF

在窗体上放置TPdf组件Pdf1,引用uses Printers;

procedure TForm1.Button3Click(Sender: TObject);
var
  Page: Integer;
  Bitmap: TBitmap;
begin
  try
    //读取pdf文件
    Pdf1.FileName := 'C:\LargeFile.pdf';
    Pdf1.Active := True;
    //开始打印
    Printer.BeginDoc;
    try
      //循环所有PDF页面
      for Page := 1 to Pdf1.PageCount do
      begin
        if Page > 1 then
          Printer.NewPage;
        //选择PDF文档的页面
        Pdf1.PageNumber := Page;
        //将页面内容转换为bmp
        Bitmap := Pdf1.RenderPage(0, 0, Printer.PageWidth, Printer.PageHeight, ro0, [rePrinting]);
        //打印bmp
        Printer.Canvas.StretchDraw(Printer.Canvas.ClipRect, Bitmap);
      end;
    finally
      Printer.EndDoc;
    end;
  finally
    Pdf1.Active := False;
  end;
end;

转换为图片

在窗体上放置TPdf组件Pdf1

procedure TForm1.Button4Click(Sender: TObject);
var
  Page: Integer;
  Bitmap: TBitmap;
begin
  try
    //读取pdf文件
    Pdf1.FileName := 'C:\LargeFile.pdf';
    Pdf1.Active := True;
    //循环所有PDF页面
    for Page := 1 to Pdf1.PageCount do
    begin
      //选择PDF文档的页面
      Pdf1.PageNumber := Page;
      //转换成bmp(pdf中的屏幕像素数是72)
      Bitmap := Pdf1.RenderPage(0, 0, Round(Screen.PixelsPerInch * Pdf1.PageWidth / 72.0), Round(Screen.PixelsPerInch * Pdf1.PageHeight / 72.0));
      try
        Bitmap.SaveToFile('C:\bmp' + '_' + IntToStr(Page) + '.bmp');
      finally
        Bitmap.Free;
      end;
    end;
  finally
    Pdf1.Active := False;
  end;
end;

免责声明:文章转载自《delphi PDFium 常用功能》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇宝宝名字[置顶] Windows显示驱动(WDDM)编程初步(2)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

delphi RTTI 反射技术

[delphi]view plaincopy unitUnit_main; interface uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms, Dialogs,StdCtrls,TypInfo; type TForm_main=class...

JAVA 生成PDF报表()

许多应用程序都要求动态生成 PDF 文档。这些应用程序涵盖从生成客户对帐单并通过电子邮件交付的银行到购买特定的图书章节并以 PDF 格式接收这些图书章节的读者。这个列表不胜枚举。在本文中,我们将使用 iText Java 库生成 PDF 文档。我们将向您演示一个样例应用程序,以便您可自行完成它并能更好地理解它。 熟悉 iText V5.3.0 版 iTex...

C# wps转pdf(word、ppt、excel),在线预览pdf

wps转pdf  注:我是在wps试用期专业版,windows10系统  vs2019 webform(.net framework4.5)测试。   前提:需要下载安装wps专业版、企业版。   项目中需要引用wps的com组件     com组件Upgrade WPS Spreadsheets 3.0 Object Library (Beta)  ,对...

Delphi线程的终止

当线程对象的Execute()执行完毕,我们就认为此线程终止了。这时候,它会调用Delphi的一个标准例程EndThread(),这个例程再调用API函数ExitThread()。由ExitThread()来清除线程所占用的栈。 当结束使用TThread对象时,应该确保已经把这个Delphi对象从内存中清除了。这才能确保所有内存占有都释放掉。尽管在进程终止...

DELPHI字符串、数组操作函数(转)

对字符串及数组的操作,是每个程序员必须要掌握的。熟练的使用Delphi的这些函数,在编程时能更加得心应手。   1.Copy   功能说明:该函数用于从字符串中复制指定范围中的字符。该函数有3个参数。第一个参数是数据源(即被复制的字符串),第二个参数是从字符串某一处开始复制,第三个参数是要复制字符串的长度(   即个数)。最后函数返回一个新的字符串(即是我...

LaTeX Pdf to Word

用LaTeX写的文稿,生成的pdf,如果要改成word文档,如何是最合适的方式? 查了很多帖子,比较靠谱的一种方式是先将pdf转成rtf格式,再用word打开rtf文件。也有直接从tex文件直接转成doc文件。 常用工具有pandoc、TeX4ht 、LaTeX2RTF等,大部分文件格式的相互转换都可以比较完美地解决。 事实上,有人提到,这些方法都试了一遍...