VB.net 2010 视频教程 VB.net 2010 视频教程 VB.net 2010 视频教程
当前位置:
首页 > 编程开发 > c#教程 >
  • C#教程之Pdf File Writer 中文应用(PDF文件编写器C#

  • 2019-01-12 22:01 来源:未知

  该文由小居工作室原创(QQ:2482052910)翻译并提供解答支持,原文地址:Pdf File Writer 中文应用(PDF文件编写器C#类库):http://www.cnblogs.com/wjs5943283/p/6528853.html

 首先 Pdf File Writer  是一个很好用的PDF文件生成工具,由于作者对中文编码不熟悉,涉及到中文字体的输出会发生异常,经过本人多次测试,仿宋、黑体字体的中文还比较好,不容易发生异常。宋体测试很多次都没有成功,包括咨询了作者本人也没有得到满意的答案:

    

  这一篇主要是对 PDF-File-Writer的使用进行中文翻译,在各位使用的过程中有什么问题,可以联系我。我已经在生产环境中使用。

     原文地址:https://www.codeproject.com/Articles/570682/PDF-File-Writer-Csharp-Class-Library-Version?msg=5362362#xx5362362xx

     下面为全文翻译:

                PDF文件编写器C#类库   

              (版本1.19.1增强版)

  • 下载PDF文件的示例 - 258 KB => 01  
  • 下载C#类库(DLL) - 50.5 KB =>  02
  • 下载演示项目(包括DLL) - 546.5 KB  => 03
  • 下载源 - 860.4 KB  => 04

    已全部打包到百度云盘:链接:http://pan.baidu.com/s/1nvFKDvj 密码:apj0  

  示例生成的PDF文件:

 

 

1.介绍

PDF文件编写器C#类库PdfFileWriter允许您直接从.net应用程序创建PDF文件。库免除了您的PDF文件结构的细节。要使用库,您需要添加对附加PdfFileWriter.dll的类库文件的using PdfFileWriter引用,在使用库的每个源文件中添加一个语句,并包含PdfFileWriter.dll与您的分发。有关更多详细信息,请转到2.23安装或者,您可以在应用程序中包含库的源代码,并避免分发单独的数据链接库文件。最低开发要求是.NET Framework 4.0(Visual Studio  2013,在vs2012中使用也很正常)。

 版本1.19.0修改说明

  • 文档链接允许PDF文档用户单击链接并跳转到文档的另一部分。添加文档链接分为两部分。目标定义为位置标记。位置标记必须具有唯一的名称,范围(LocalDestNamedDest)和位置(页面和位置)。第二部分是链接位置。这两个部分可以按任何顺序定义。他们被绑在一起的名字。名称区分大小写。许多链接可以指向同一位置标记。
  • 命名目标是PDF文档中的目标。它们使用位置标记以与文档链接相同的方式定义。范围必须设置为NamedDest。当诸如Adobe Acrobat的PDF阅读器打开PDF文档时,它可以在查看窗口中显示目标时打开文档。有关详细信息,请参见第2.22节“ 文档链接”和“命名目标”
  • PdfFileWriter的以下功能已修改:Web链接,视频显示,音频播放,保存或查看嵌入文件。在库的以前版本中,Web链接由DrawText方法TextBoxPdfTable类支持。从1.19.0开始,相同的支持可用于记录链接,视频,音频和嵌入文件。
  • 对于代码示例,请查看OtherExample.ca和OtherExample.pdf。特别注意目录页和页码7。
  • 版本1.19.1 Fix:AddLocationMarker修复具有小数分隔符而不是句点的区域。

    从1.18.0 / 1.19.0之前的PdfFileWriter库升级
    字体资源创建修改自:

// 原创建字体方式:
FontResource = new PdfFont(Document, FontName, FontStyle, EmbeddedFont);
// 新的创建方式:
FontResource = PdfFont.CreatePdfFont(Document, FontName, FontStyle, EmbeddedFont);

    换句话说,一个全局性的“查找和替换”从new PdfFontPdfFont.CreatePdfFont会做的工作。

    已命名目标已修改:

//
Document.AddNamedDestination(DestName, Page, FitArg, SideArg);
//
Page.AddLocationMarker(LocMarkerName, Scope, FitArg, SideArg);

  PDF文件编写器C#类库支持以下PDF文档的功能:

    图形:绘制线条,矩形,多边形,贝塞尔曲线,前景和背景颜色,图案和阴影。第2.1节坐标系。
    图像:绘图光栅(位图)图像和矢量(图元文件)图像。第2.4节。图像支持。
    文本:在列中绘制文本行和文本。第2.3节语言支持。
    条形码:支持条形码128,条形码39,条形码交错2,条形码EAN13和条形码UPC-A。第2.5节条码支持。
    QR码:支持二维码。第2.8节QR码支持。
    加密:支持AES-128加密。第2.6节加密支持。
    Web链接:Web链接交互支持。第2.7节Web链接支持。
    书签:支持文档大纲。第2.9节书签支持。
    命名目标:支持使Acrobat在特定页面打开PDF文档。第2.22节文档链接和命名目的地。
    图表:支持Microsoft Charting。第2.10图表支持。
    打印到PDF:从PrintDocument过程创建PDF文档。2.11节PrintDocument支持。
    显示数据表。第2.12节数据表支持
    播放视频文件。2.13节播放视频文件
    播放声音文件。2.14节播放声音文件
    附加数据文件。第2.15节附加数据文件
    重新排序页面。第2.16节重新排序页面
    PDF文档输出到文件或流。第2.17节PDF文档输出。
    PDF文档信息字典。PDF阅读器在文档属性的“说明”选项卡中显示此信息。信息包括:标题,作者,主题,关键字,创建的日期和时间,修改的日期和时间,生成文件的应用程序,PDF生成器。第2.18节文档信息字典。
    内存控制:将已完成页面的内容信息写入输出文件,并使用垃圾回收器释放未使用的内存。第2.19节。内存控制。
    绘制由System.Windows.Media.PathGeometry类定义的图形。输入参数可以是文本字符串或PathGeometry类。第2.20节Windows Presentation Foundation WPF
透明度或不透明度现在可用于绘制形状,线条,文本和图像。您的应用程序可以为所有图形和文本设置颜色的Alpha组件。第2.21节透明度,不透明度,Alpha颜色分量和混合
混合。新库支持PDF颜色混合方案。混合定义如何处理在先前项目上绘制的新项目的颜色。第2.21节透明度,不透明度,Alpha颜色分量和混合

 

  创建PDF是一个六个步骤的过程。

    步骤1:创建一个文档对象PdfDocument。
    步骤2:创建资源对象,如字体或图像(ie PdfFont 或PdfImage)。
    步骤3:创建页面对象PdfPage。
    步骤4:创建内容对象PdfContents。
    步骤5:向内容对象添加文本和图形(使用PdfContents方法)。
    对其他页面重复步骤3,4和5
    步骤6:通过调用CreateFile方法创建您的PDF文档文件PdfDocument。

  步骤5是您的大部分编程工作将花费的地方。通过调用PdfContents类的方法来渲染图形和文本来实现添加内容。内容类具有丰富的集(大约100种)用于向文档中添加文本和图形的方法。

PdfDocument实现IDisposable接口释放非托管资源。创建PDF文件后CreateFile调用该方法Document.Dispose()。然而,为了确保资源的释放,你应该用一个语句或一个block./p> 包装PdfDocument创建和最终CreateFileusingtry/catch

  本文附带的演示程序是开发用于调试库的测试程序。在TestPdfFileWriter有主屏幕上的六个按钮。五个按钮生成PDF文件的示例,一个按钮显示计算机上可用的所有字体。第一个按钮“文章示例”创建显示在本文顶部的PDF文件。第3节。

  如前所述,PdfFileWriterC#类库使您免受PDF文件结构的复杂性。然而,良好的了解PDF文件总是一个优势。Adobe PDF文件规范文档可从Adobe网站获得:“PDF参考,第六版,Adobe便携式文档格式版本1.7,2006年11月”。这是一个令人恐惧的1310页的文件。我强烈建议阅读第4章图形以及文本第5章的第5.2和5.3节。

如果你想分析这个项目创建的PDF文件,或者如果你想了解一般的PDF文件结构,你可以使用我的上一篇文章“PDF文件分析器与C#解析类”附带的演示程序。本文简要介绍了PDF规范。

  

2. PDF文件编写器库一般说明  

2.1 坐标系和测量单位

  PDF坐标系原点在页面的左下角X轴指向右边Y轴指向向上的方向。

PDF计量单位是点。一英寸有72点。PDF文件编辑器允许您选择自己的计量单位。表示位置,宽度或高度的所有方法参数必须在您的度量单位中。有两个例外:字体大小和分辨率。字体大小始终为点。分辨率始终为每英寸像素数。PDF文件编写器将所有输入参数转换为点。所有内部测量值和计算均采用双精度。在创建PDF文件的最后一步,将值转换为文本字符串。转换精度为六位数。使用的转换公式为: 

//  Double类型
if(Math.Abs(Value) < 0.0001) Value = 0.0;
String Result = ((Single) Value).ToString();

2.2  小数分隔符

  诸如Adobe Acrobat之类的PDF阅读器期望实数具有小数,以使用句点作为小数分隔符。一些世界地区使用其他小数分隔符,如逗号。由于PDF File Writer库的版本1.1将使用句点作为小数分隔符,而不考虑计算机的区域设置。

2.3  语言支持,字体和字符集

  PDF文件编写器库支持您计算机上安装的大多数字体。唯一的例外是设备字体。支持的字体遵循OpenType字体规范。有关详细信息,请参阅Microsoft字体 - OpenType规范要绘制的文本存储在由Unicode字符组成的字符串中。该库将接受除控制代码0到31和128到159之外的任何字符(0到65536)。每个字符都将转换为字形。字形在页面上从左到右以与存储在字符串中的顺序相同的顺序绘制。实际上,所有字体文件只支持所有可能的Unicode字符的一个子集。换句话说,您必须选择支持项目语言的字体或要尝试显示的符号。如果输入字符串包含不受支持的字形,PDF阅读器将显示“未定义字形”。通常它是一个小矩形。本文附带的测试程序有一个“字体族”按钮。如果单击它,您可以在计算机上查看所有可用的字体,并在每个字体中查看所有可用字符。如果项目的语言是从左到右的语言,每个字符被翻译成一个字形,并且字形在字体中定义,结果应该是你期望的。如果结果不是您期望的结果,以下是一些额外的注释:

  Unicode控制字符。Unicode控制字符用于控制文本的解释或显示,但这些字符本身没有视觉或空间表示。PDF文件编写器不识别这些字符。库假定每个字符都是显示字符。它们将显示为未定义字符。

从右到左语言。通常,文本字符串中的字符的顺序是人们读取它们的顺序。由于库从左到右绘制,文本将被向后写。ReverseString方法颠倒字符顺序。如果文本只有从右到左的字符,这将解决问题。如果文本是从右到左,从左到右,数字和一些字符如括号()[] <> {混合,它不会产生所需的结果。另一个限制是TextBox类不能打断长到右文本到行。

     在某些语言中,两个或多个字符的序列被组合在一起以显示一个字形。您的软件可以识别这些序列并将其替换为正确的字形。

虚线圆。如果你看看Glyph Metrics屏幕的Glyph列,你可以看到一些glyphs有一个小的虚线圆圈(即字符代码2364和2367)。这些字符是字符序列的一部分。不显示虚线圆圈。如果前进宽度为零,边界框在Y轴的左侧,则此字形将为drawen ok。它将显示在上一个字符的顶部。如果前进宽度不为零,则此字形应显示在上一个字符之前。你的软件可以通过颠倒这两个字符来实现。

2.4  图像支持

  在PDF文档中显示图像由PdfImage类和PdfImageControl类处理。图像源可以是图像文件或.NET Image派生类或用于黑白图像的布尔数组。图像以Jpeg格式保存到PDF文件,索引位图,灰色位图或黑白位图。位图格式是无损压缩。PdfImageControl控制保存图像的过程。彩色图片应以Jpeg格式保存。要控制图像数据大小,您可以降低分辨率或更改图像质量。彩色图像可以以灰色阴影保存。数据大小减少了三个,但你失去了颜色。如果图像是以图表中的编程方式创建的,并且颜色数小于256,则图像可以保存为索引位图。每个颜色由与3个字节相比的一个字节(或更少)表示。这可以导致非常重要的文件大小减少。ChartExample.pdf文件从642KB减少到72KB。如果图像是黑白的,如在PdfPrintDocument图像的文本,图像可以保存为BWImage。在PrintExample.pdf的情况下,Jpeg文件是1795KB,黑白版本是66KB。

  dfFileWriter库中的其他三个类使用PdfImage支持。类是:PdfChart,PdfQRCode和PdfPrintDocument。

  图片是PDF资源。创建映像资源时,软件会将映像数据直接加载到PDF输出文件中。换句话说,图像数据不驻留在存储器中,允许大量的图像而不减少程序存储器空间。PdfImage类有三个构造函数。

复制代码
//从文件中加载图片
PdfImage Image = new PdfImage(PdfDocument Document, String ImageFileName, PdfImageControl ImageControl);

// 从内存中加载图片(Image,Bitmap)
PdfImage Image = new PdfImage(PdfDocument Document, Image MemoryImage, PdfImageControl ImageControl);

// 加载二进制
PdfImage Image = new PdfImage(PdfDocument Document, Boolean[,] BWImage, PdfImageControl ImageControl);
复制代码

    参数是: 

  • DocumentPdfDocumentPDF文档对象。
  • ImageFileName:图像文件是可以加载到.NET Image派生类的任何文件图像派生类是Bitmap光栅图像或Metafile矢量图像的图像。如果输入文件名,扩展名为.emf或.wmf,则将文件加载到文件中Metafile,否则文件将加载到Bitmap
  • MemoryImage:是位图或由应用程序在内存中创建的元文件。
  • BWImage:是一个布尔二维数组。False表示黑色,true表示白色。PdfQRCode类使用此格式来表示QR图像。
  • ImageControl:是一个可选参数,用于保存图像创建属性。

  PdfImageControl具有以下属性。所有属性都是可选的。

  • SaveAs:图片另存为JpegIndexedImageGrayImageBWImage
  • CropRect:裁剪矩形是定义要裁剪的图像区域的矩形。注意:矩形坐标是.net标准。原点在左上角,Y轴朝下。裁剪矩形可以Rectangle在这种情况下,尺寸以像素为单位。裁剪矩形必须包含在图像中。
  • CropPercent:如上所示裁剪矩形,但尺寸以图像宽度和高度的百分比表示。
  • Resolution:图像分辨率设置图像分辨率,前提是它小于源图像的分辨率。分辨率以每英寸像素为单位指定。减小的分辨率意味着较小的PDF文件。
  • ImageQuality:它是一个在0到100范围内的整数,表示质量差到最佳质量的图像,或DefaultQuality(-1)表示以默认质量保存图像。较低的图像质量意味着较小的PDF文件。如果图像质量未定义,则将其视为默认质量。.net框架工作默认保存方法使用的质量因子为75.此编号不由Microsoft记录。它是通过实验和互联网搜索计算的。
  • GrayToBWCutoff:将位图转换为黑白是两步过程。第一种是标准颜色到灰色阴影。如果灰度阴影低于截止,则第二个将像素设置为黑色,如果灰度低于截止,则将像素设置为白色。有效值为1到99。
  • ReverseBW:在灰色或BW图像中,如果此属性为true,则颜色反转。

  其他方法PdfImage

  该ImageSize方法返回具有适合给定区域的正确宽高比的最大矩形。

    SizeD ImageSize(Double Width, Double Height);

     该ImageSizePosition方法返回具有适合给定区域的正确宽高比的最大矩形,并基于ContentAlignment枚举对其进行定位。

  ImageSizePos ImageSizePosition(Double Width, Double Height, ContentAlignment Alignment);

  最后将图像绘制成内容使用DrawImage方法。如果您希望图像保持正确的宽高比使用ImageSizeImageSizePosition计算宽度和高度。如果宽度和高度的比率与图像不同,则图像将看起来在一个方向上拉伸。

  Contents.DrawImage(Image, PosX, PosY, Width, Height);

应当指出的是,除了PdfImagePdfQRCodePdfChartPrintPdfDocument产生PDF文档中PDF图像

2.5  条形码支持

  下面的代码说明了如何在PDF文档中包含UPC-A条形码。

// 创建对象
BarcodeEAN13 Barcode = new BarcodeEAN13("123456789010");

// 绘制条形码
Contents.DrawBarcode(PosX, PosY, BarWidth, BarcodeHeight, Barcode, Font, FontSize);

  在这种情况下,类是具有12位数字输入字符串的BarcodeEAN13。结果是UPC-A条形码。

  PDF文件编写器库包括基类Barcode 对于每个支持的条形码,需要一个派生类。类库包括四个子类:Barcode128Barcode39 BarcodeInterleaved2of5 BarcodeEAN13BarcodeEAN13生产EAN-13条码,如果输入字符串为13位数字和UPC-A如果输入字符串为12位。具有13位数字和前导零的输入字符串被认为是UPC-A。

  该DrawBarcode方法具有多个重载。您可以指定条形码左下角的位置,窄条的宽度,条形码的高度以及导出的条形码类别。有可选参数:对齐(左,中,右)颜色和字体以显示文本。条形码周围的安静区域是您的责任。可选文本显示在条形码下方。如果你选择的颜色不是黑色,你应该确保背景的对比是显着的。用法示例中给出3.7绘制条形码ArticleExample.csOtherExample.cs

  如果要为另一个条形码创建派生类,请使用三个包含的类的源代码作为示例。

2.6  加密支持

  PDF文件编写器库支持AES 128和标准128(RC4)加密。有关详细信息,请参阅PDF参考第六版(1.7版)第3.5节加密。PDF文件编写器支持两种类型的加密过滤器,AES-128和128.标准128是RC4加密。它被认为不安全。对于新项目不使用它。它不支持公钥密码编码收件人列表。

  要加密PDF文档,请调用类中SetEncryption定义的四种方法之一PdfDocument

  1.设置不带参数的加密。

  PDF文件编写器库将使用AES-128加密来加密PDF文档。PDF阅读器将打开文档,而无需请求密码。权限标志设置为允许所有。

   Document.SetEncryption();

  2.使用一个参数设置加密。

  PDF文件编写器库将使用AES-128加密来加密PDF文档。参数是权限。权限标志定义如下。你可以或者一起获得多个权限。PDF参考手册有完整的权限描述。PDF阅读器将打开文档,而无需请求密码。

 Document.SetEncryption(Permission Permissions);

  3.使用两个参数设置加密。

      PDF文件编写器库将使用AES-128加密来加密PDF文档。两个参数是用户密码和权限。PDF阅读器将使用用户密码打开文档。权限将根​​据参数设置。

  Document.SetEncryption(String UserPassword, Permission Permissions);

  4.使用四个参数设置加密。

  PDF文件编写器库将使用EncryptionType.Aes128加密或EncryptionType.Standard128加密来加密PDF文档。四个参数是用户密码,所有者密码,权限和加密类型。如果用户密码为空,将采用默认密码。如果所有者密码为null,则软件会生成随机数密码。Standard128加密被认为不安全。它不应该用于新项目。

  诸如Acrobat的PDF阅读器将接受用户或所有者密码。如果使用所有者密码打开文档,PDF阅读器将打开它,并将所有权限设置为允许操作。

  Document.SetEncryption(String UserPassword, String OwnerPassword, Permission Permissions, EncryptionType Type);

  权限标志如下:

复制代码
//全描述引用1.7版本表3.20
public enum Permission
    {
    None = 0,
    LowQalityPrint = 4,    // bit 3
    ModifyContents = 8,    // bit 4
    ExtractContents = 0x10,    // bit 5
    Annotation = 0x20,    // bit 6
    Interactive = 0x100,    // bit 9
    Accessibility = 0x200,    // bit 10
    AssembleDoc = 0x400,    // bit 11
    Print = 0x804,        // bit 12 + bit 3
    All = 0xf3c,        // bits 3, 4, 5, 6, 9, 10, 11, 12
    }
复制代码

2.7   Web链接支持

  PDF文件编写器库提供对Web链接的支持。此功能是PDF参考手册第8节交互功能中描述的PDF交互功能之一。它是注释和动作的组合。注释将Web链接与页面上的区域相关联。当用户点击该区域时,PDF阅读器将激活导航到期望的网页的默认web浏览器。

  注释区域是由相对于页面左下角的绝对坐标定义的矩形区域。添加类的Web链接调用AddWebLink方法PdfPage

 Page.AddWebLink(Double LeftPos, Double BottomPos, Double RightPos, Double TopPos, String WebLink);

  注释不是页面内容的一部分。为了让PDF文档的读者知道在哪里点击,您需要在页面上的相同区域中显示相应的文本或图形。换句话说,你需要调用两个方法。AddWebLink与网页和与内容相关联的第二方法相关联的方法。第二种方法可以是图形对象,例如图像或矩形或文本。因为AddWebLink需要相对于页面左下角的坐标,所以图形对象的坐标必须相同。换句话说,不要使用平移,缩放或旋转。如果你这样做,你需要确保这两个区域将重合。

  PDF文件编写器有几种PdfContents支持文本注释的方法。

  使用相关的网络链接绘制一行文本。文本将左对齐,带下划线和蓝色。文本位置相对于页面的左下角。

PdfContents.DrawWebLink(PdfPage Page, PdfFont Font, Double FontSize,
    Double TextAbsPosX, Double TextAbsPosY, String Text, String WebLink);

  使用相关的网络链接绘制一行文本。文本位置相对于页面的左下角。

PdfContents.DrawWebLink(PdfPage Page, PdfFont Font, Double FontSize, Double TextAbsPosX, Double TextAbsPosY,
    TextJustify Justify, DrawStyle DrawStyle, Color TextColor, String Text, String WebLink);

  在其中绘制Web链接TextBox是一个两步过程。首先,使用类的一种AddText方法将文本和Web链接字符串添加到框中TextBox第二个你绘制的TextBox页面内容使用的DrawText方法之一PdfContents

添加网络链接TextBox文本将显示为下划线和蓝色。 

TextBox.AddText(PdfFont Font, Double FontSize, String Text, String WebLink);

  添加网络链接TextBox文本属性由DrawStyle定义FontColor

TextBox.AddText(PdfFont Font, Double FontSize, DrawStyle DrawStyle, Color FontColor, String Text, String WebLink);

  第二步绘制文本到内容。此方法假设没有额外的行或段落间距。请注意,如果你调用DrawTextPdfPage参数上TextBoxWebLink信息,ApplicationException将被抛出。

//PosYTop 可以引用上一个元素的PointY位置

PdfContents.DrawText(Double PosX, ref Double PosYTop, Double PosYBottom, Int32 LineNo, TextBox Box, PdfPage Page);

  此方法允许您定义额外的行或段落间距。请注意,如果你调用DrawTextPdfPage参数上TextBoxWebLink信息,ApplicationException将被抛出。

PdfContents.DrawText(Double PosX, ref Double PosYTop, Double PosYBottom, Int32 LineNo,
    Double LineExtraSpace, Double ParagraphExtraSpace, Boolean FitTextToWidth, TextBox Box, PdfPage Page);

    有关编码示例,请参阅3.4 Draw Frame,ArticleExample.cs和OtherExample.cs源代码。

2.8  QR码支持

  从V1.7开始,PDF文件编写器库提供对QR码的支持。该程序支持三个字符集:数字,字母数字和8位字节。程序不支持汉字字符。QR码是图像资源。库将QR代码内容转换为图像。要在文档中显示QR码,需要定义一个资源对象,并将此对象添加到页面的内容。程序自动选择最佳字符集和最佳矩阵大小。用户必须提供数据字符串和所需的纠错级别。错误校正级别是:L低(7%),M中(15%),Q中中高(25%),H高(30%)。字符集定义为:数字数据(数字0-9)。字母数字(数字0-9,大写字母AZ和九个其他字符空格$%* + - 。/:),8位字节数据。程序将扫描数据串输入并选择最有效的字符集。如果您的数据可以分成只有数字或只是字母数字字符的段,您可以创建一个QR码对象与数据字符串数组。

  使用单个数据字符串创建QR代码对象。

PdfQRCode QRCode = new PdfQRCode(PdfDocument Document, String DataString, ErrorCorrection ErrorCorrection);

  或者,使用数据字符串数组创建QR Code对象。如果要将数据字符串分成不同字符集的部分,请使用此形式。

PdfQRCode QRCode = new PdfQRCode(PdfDocument Document, String[] DataString, ErrorCorrection ErrorCorrection);

  默认情况下,创建的图像将具有每个QR码模块4×4像素和图像周围16个像素的安静空间。要覆盖默认使用:

QRCode.SetModuleSize(Int32 ModuleSize, Int32 QuietZone);

  绘制QR码调用DrawQRCode方法PdfContentsQRCode是一个正方形。宽度和高度相同。

Contents.DrawQRCode(PdfQRCode QRCode, Double OrigX, Double OrigY, Double Width);

  有关编码示例,请参阅3.7绘制条形码,ArticleExample.cs和OtherExample.cs源代码。

2.9  书签支持

  书签在PDF规范(第8.2.2节“文档大纲”)中描述如下:“PDF文档可以可选地在屏幕上显示文档大纲,允许用户以交互方式从文档的一个部分导航到另一个部分。的树结构层次结构的大纲项(有时称为书签),其作为内容的可视表以向用户显示文档的结构。用户可以通过用鼠标点击它们来交互地打开和关闭单个项。

OtherExample.cs源代码具有书签示例。在一个位置有三个层次的层次结构。您可以在OtherExample.pdf文件中查看结果。

向应用程序添加书签的第一步是:

// 文档创建书签
PdfBookmark BookmarkRoot = Document.GetBookmarksRoot();

  此步骤激活文档中的书签,并返回根节点。

  添加书签类似于向窗体中添加控件。第一级书签被添加到根。后续级别将添加到现有书签。至少,您必须定义页面上的标题,页面,垂直位置以及打开的条目标志。page是要去的页面的PdfPage对象。YPos是相对于页面左下角的垂直位置。如果较低级别的书签是可见的,则打开条目标志为真,如果较低级别的书签被隐藏,则为假。默认情况下,第一级始终可见。

复制代码
// 书签实例
PdfBookmark FirstLevel_1 = BookmarkRoot.AddBookmark("Chapter 1", Page, YPos, false);
    PdfBookmark SecondLevel_11 = FirstLevel_1.AddBookmark("Section 1.1", Page, YPos, false);
    PdfBookmark SecondLevel_12 = FirstLevel_1.AddBookmark("Section 1.2", Page, YPos, false);
        PdfBookmark ThirdLevel_121 = SecondLevel_12.AddBookmark("Section 1.2.1", Page, YPos, false);
        PdfBookmark ThirdLevel_122 = SecondLevel_12.AddBookmark("Section 1.2.2", Page, YPos, false);
    PdfBookmark SecondLevel_13 = FirstLevel_1.AddBookmark("Section 1.3", Page, YPos, false);
PdfBookmark FirstLevel_2 = BookmarkRoot.AddBookmark("Chapter 2", Page, YPos, false);
    PdfBookmark SecondLevel_21 = FirstLevel_2.AddBookmark("Section 2.1", Page, YPos, false);
    PdfBookmark SecondLevel_22 = FirstLevel_2.AddBookmark("Section 2.2", Page, YPos, false);
复制代码

  AddBookmark()方法有四个重载变体:

复制代码