Pdf File Writer 汉语应用(PDF文件编写器C#类库)

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

3.8  绘制与圆角的矩形和填充砖情势

  该DrawBrickPattern方法绘制具备圆角的矩形。该区域填充有砖图案。本PdfTillingPattern类是形似类定义划分方式。该类有多个静态方法来创设特定格局。

SetBrickPattern绘图砖墙图案并SetWeavePattern制图织造图案。

 

// Draw rectangle with rounded corners and filled with brick pattern
private void DrawBrickPattern()
{
// Define brick tilling pattern resource
// Arguments: PdfDocument class, Scale factor (0.25), Stroking color (lines between bricks), Nonstroking color (brick)
// Return value: tilling pattern resource
PdfTilingPattern BrickPattern = PdfTilingPattern.SetBrickPattern(Document, 0.25, Color.LightYellow, Color.SandyBrown);

// save graphics state
Contents.SaveGraphicsState();

// set outline width 0.04"
Contents.SetLineWidth(0.04);

// set outline color to purple
Contents.SetColorStroking(Color.Purple);

// set fill pattern to brick
Contents.SetPatternNonStroking(BrickPattern);

// draw rounded rectangle filled with brick pattern
Contents.DrawRoundedRectangle(1.1, 5.0, 1.4, 1.5, 0.2, PaintOp.CloseFillStroke);

// restore graphics sate
Contents.RestoreGraphicsState();
return;
}

1.介绍

PDF文件编写器C#类库PdfFileWriter允许你一向从.net应用程序创立PDF文件。库免除了您的PDF文件结构的内部原因。要动用库,您需求加上对附加PdfFileWriter.dll的类库文件的using PdfFileWriter援用,在行使库的每一个源文件中加多七个话语,并包蕴PdfFileWriter.dll与你的散发。有关越多详细新闻,请转到2.23安装。只怕,您能够在应用程序中包罗库的源代码,并防止分发单独的多寡链接库文件。最低开荒须求是.NET
Framework 4.0(Visual Studio  二〇一一,在vs二〇一一中动用也很健康)。

 版本1.19.0修改表明

  • 文书档案链接允许PDF文书档案顾客单击链接并跳转到文书档案的另一部分。添Gavin档链接分为两有个别。目的定义为地方标志。地方标识必需怀有唯一的称呼,范围(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:AddLocation马克尔修复具有小数分隔符实际不是句点的区域。

    从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节条码协助。
    QENCORE码:扶助二维码。第2.8节QPAJERO码补助。
    加密:协助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类定义的图片。输入参数可以是文本字符串或帕特h吉优metry类。第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种)用于向文书档案中添Gavin本和图纸的措施。

PdfDocument完成IDisposable接口释放非托管能源。创设PDF文件后CreateFile调用该办法Document.Dispose()。可是,为了保险能源的假释,你应有用多个说话或三个block./p>
包装PdfDocument创设和最后CreateFileusingtry/catch

  本文附带的亲自过问程序是支付用于调节和测验库的测量试验程序。在TestPdfFileWriter有主显示屏上的多个开关。七个按键生成PDF文件的演示,一个开关展现Computer上可用的兼具字体。第一个开关“小说示例”成立展现在本文顶端的PDF文件。第2节。

  如前所述,PdfFileWriterC#类库使您免受PDF文件结构的纷纷。然则,优异的摸底PDF文件三番五次一个优势。Adobe
PDF文件标准文书档案可从Adobe网址得到:“PDF参照他事他说加以考察,第六版,Adobe便携式文书档案格式版本1.7,二〇〇六年三月”。那是三个令人战战惶惶的1310页的文件。作者刚强提议阅读第4章图形以及文本第5章的第5.2和5.3节。

假定您想深入分析那个类型成立的PDF文件,或许一旦你想精晓一般的PDF文件结构,你能够应用自家的上一篇文章“PDF文件深入分析器与C#分析类”附带的身体力行程序。本文简单介绍了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。对于每一种扶助的条形码,要求一个派生类。类库包含七个子类:Barcode128Barcode39BarcodeInterleaved2of5BarcodeEAN13。该BarcodeEAN13生产EAN-13条码,要是输入字符串为十六人数字和UPC-A假使输入字符串为十一人。具备16人数字和前导零的输入字符串被认为是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
    }

3.6  画喜悦的人脸

  该DrawHappyFace办法是从线和贝塞尔曲线绘制椭圆和协会路线的示范。

 

// Draw Happy Face
private void DrawHappyFace()
{
// save graphics state
Contents.SaveGraphicsState();

// translate coordinate origin to the center of the happy face
Contents.Translate(4.25, 7.5);

// change nonstroking (fill) color to yellow
Contents.SetColorNonStroking(Color.Yellow);

// draw happy face yellow oval
Contents.DrawOval(-1.5, -1.0, 3.0, 2.0, PaintOp.Fill);

// set line width to 0.2" this is the black circle around the eye
Contents.SetLineWidth(0.2);

// eye color is white with black outline circle
Contents.SetColorNonStroking(Color.White);
Contents.SetColorStroking(Color.Black);

// draw eyes
Contents.DrawOval(-0.75, 0.0, 0.5, 0.5, PaintOp.CloseFillStroke);
Contents.DrawOval(0.25, 0.0, 0.5, 0.5, PaintOp.CloseFillStroke);

// mouth color is black
Contents.SetColorNonStroking(Color.Black);

// draw mouth by creating a path made of one line and one Bezier curve 
Contents.MoveTo(-0.6, -0.4);
Contents.LineTo(0.6, -0.4);
Contents.DrawBezier(0.0, -0.8, 0, -0.8, -0.6, -0.4);

// fill the path with black color
Contents.SetPaintOp(PaintOp.Fill);

// restore graphics sate
Contents.RestoreGraphicsState();
return;
}

 

8.  关于原来的文章者

  加拿大 Uzi格兰诺   格兰 科技(science and technology)有限企业

 

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

 

 

 2.14  播放声音文件

  该PdfFileWriter支撑嵌入PDF文档中的声音文件。播放声音文件的完全示例在第7页中提交OtherExample.cs。嵌入声音文件与录像文件基本一样。独一分明的不相同是不曾什么样能够来得。

// create embedded media file
PdfDisplayMedia DisplayMedia = new PdfDisplayMedia(PdfEmbeddedFile.CreateEmbeddedFile(Document, "Ring01.wav"));
DisplayMedia.SetMediaWindow(MediaWindow.Hidden);
AnnotDisplayMedia RingSound = new AnnotDisplayMedia(DisplayMedia);

// display text area to activate the sound
Double LineSpacing = ArialNormal.LineSpacing(12.0);
Double TextPosX = PosX + 0.5 * AreaWidth;
Double TextPosY = PosY + 0.5 * AreaHeight + LineSpacing;
Contents.DrawTextWithAnnotation(Page, ArialNormal, 12.0, TextPosX, TextPosY, TextJustify.Center,
  DrawStyle.Normal, Color.Red, "Click this text to play", RingSound);
TextPosY -= LineSpacing;
Contents.DrawTextWithAnnotation(Page, ArialNormal, 12.0, TextPosX, TextPosY, TextJustify.Center,
  DrawStyle.Normal, Color.Red, "Ringing sound", RingSound);

2.2  小数分隔符

  诸如Adobe
Acrobat之类的PDF阅读器期望实数具备小数,以使用句点作为小数分隔符。一些社会风气地区接纳其它小数分隔符,如逗号。由于PDF
File
Writer库的本子1.1将使用句点作为小数分隔符,而不考虑计算机的区域安装。

3  实例开荒指南

  本节介绍PDF文件编写器C#类库到你的应用程序的融会。测量检验程序TestPdfFileWriter次第是对友好的应用程序的模拟。当按下“作品示例”开关时,程序将实践ArticleExample.cs源文件中的代码。上航海用教室突显了变通的PDF文件。此办法以身作则了怎么样成立四个分包部分文件和图片的页面文书档案。通过这几个事例,你应当有三个很好的垂询的经过。其余示例按键生成各类PDF文书档案。总的来讲,实际上那么些库的各类特征都通过这么些施行例来验证。

  调节和测验复选框(假诺当选)将开创八个PDF文件,能够使用文本编辑器查看,但不只怕加载到PDF阅读器。生成的文书未压缩,图像和字体文件将替换为文本占位符。调节和测量检验复选框应仅用于调节和测量检验。

  TestPdfFileWriter程序是应用Microsoft Visual
C#2013耗费的。它已针对性Windows
XP,Vista,7和8扩充了测验。图片 1

 

3.9  绘制图像并私分它

  在Draw本人法师方法是绘制一图象的一个例证。该PdfFileWriter积累在帮忙的有所图像文件的帮助图纸图片Bitmap类和Metafile类。在ImageFormat类定义全体图像类型。JPEG图像文件类型是PDF文件的本机图像格式。借使PdfImage动用JPEG文件调用构造函数,程序将该公文按原样复制到PDF文件中。假若你调用PdfImage别的其余类其余图像文件的构造函数,程序将其改变为JPEG文件。为了维持PDF文件的大小尽恐怕小,确认保证您的图像文件分辨率不是不客观的高。

  在PdfImage类加载图像和测算能够顺应客户坐标给定的图像大小和保存原有宽高比最大尺寸。在绘制图像此前,大家创造三个圆锥形剪切路线以私分图像。

// Draw image and clip it
private void DrawImage()
{
// define local image resources
// resolution 96 pixels per inch, image quality 50%
PdfImage Image1 = new PdfImage(Document, "TestImage.jpg", 96.0, 50);

// save graphics state
Contents.SaveGraphicsState();

// translate coordinate origin to the center of the picture
Contents.Translate(2.6, 5.0);

// adjust image size and preserve aspect ratio
ImageSizePos NewSize = Image1.ImageSizePosition(1.75, 1.5, ContentAlignment.MiddleCenter);

// clipping path
Contents.DrawOval(NewSize.DeltaX, NewSize.DeltaY, NewSize.Width, NewSize.Height, PaintOp.ClipPathEor);

// draw image
Contents.DrawImage(Image1, NewSize.DeltaX, NewSize.DeltaY, NewSize.Width, NewSize.Height);

// restore graphics state
Contents.RestoreGraphicsState();
return;
}

3.13  绘制定单表格

  该DrawBookOrderForm艺术是订单输入表单或小票的演示。它是数据表帮衬的八个示范。它身体力行使用的PdfTablePdfTableCell以及PdfTableStyle类。

// Draw example of order form
private void DrawBookOrderForm()
{
// Define constants to make the code readable
const Double Left = 4.35;
const Double Top = 4.65;
const Double Bottom = 1.1;
const Double Right = 7.4;
const Double FontSize = 9.0;
const Double MarginHor = 0.04;
const Double MarginVer = 0.04;
const Double Border = 0.015;
const Double Grid = 0.01;

// column widths
Double ColWidthPrice = ArialNormal.TextWidth(FontSize, "9999.99") + 2.0 * MarginHor;
Double ColWidthQty = ArialNormal.TextWidth(FontSize, "Qty") + 2.0 * MarginHor;
Double ColWidthDesc = Right - Left - Border - 3 * Grid - 2 * ColWidthPrice - ColWidthQty;

// define table
PdfTable Table = new PdfTable(Page, Contents, ArialNormal, FontSize);
Table.TableArea = new PdfRectangle(Left, Bottom, Right, Top);
Table.SetColumnWidth(new Double[] {ColWidthDesc, ColWidthPrice, ColWidthQty, ColWidthPrice});

// define all borders
Table.Borders.SetAllBorders(FrameWidth, GridWidth);

// margin
PdfRectangle Margin = new PdfRectangle(MarginHor, MarginVer);

// default header style
Table.DefaultHeaderStyle.Margin = Margin;
Table.DefaultHeaderStyle.BackgroundColor = Color.FromArgb(255, 196, 255);
Table.DefaultHeaderStyle.Alignment = ContentAlignment.MiddleRight;

// private header style for description
Table.Header[0].Style = Table.HeaderStyle;
Table.Header[0].Style.Alignment = ContentAlignment.MiddleLeft;

// table heading
Table.Header[0].Value = "Description";
Table.Header[1].Value = "Price";
Table.Header[2].Value = "Qty";
Table.Header[3].Value = "Total";

// default style
Table.DefaultCellStyle.Margin = Margin;

// description column style
Table.Cell[0].Style = Table.CellStyle;
Table.Cell[0].Style.MultiLineText = true;

// qty column style
Table.Cell[2].Style = Table.CellStyle;
Table.Cell[2].Style.Alignment = ContentAlignment.BottomRight;

Table.DefaultCellStyle.Format = "#,##0.00";
Table.DefaultCellStyle.Alignment = ContentAlignment.BottomRight;

Contents.DrawText(ArialBold, FontSize, 0.5 * (Left + Right), Top + MarginVer + Table.DefaultCellStyle.FontDescent,
    TextJustify.Center, DrawStyle.Normal, Color.Purple, "Example of PdfTable support (new for 1.10.0)");

// reset order total
Double Total = 0;

// loop for all items in the order
// Order class is a atabase simulation for this example
foreach(Order Book in Order.OrderList)
    {
    Table.Cell[0].Value = Book.Title + ". By: " + Book.Authors;
    Table.Cell[1].Value = Book.Price;
    Table.Cell[2].Value = Book.Qty;
    Table.Cell[3].Value = Book.Total;
    Table.DrawRow();

    // accumulate total
    Total += Book.Total;
    }
Table.Close();

// save graphics state
Contents.SaveGraphicsState();

// form line width 0.01"
Contents.SetLineWidth(FrameWidth);
Contents.SetLineCap(PdfLineCap.Square);

// draw total before tax
Double[] ColumnPosition = Table.ColumnPosition;
Double TotalDesc = ColumnPosition[3] - MarginHor;
Double TotalValue = ColumnPosition[4] - MarginHor;
Double PosY = Table.RowTopPosition - 2.0 * MarginVer - Table.DefaultCellStyle.FontAscent;
Contents.DrawText(ArialNormal, FontSize, TotalDesc, PosY, TextJustify.Right, "Total before tax");
Contents.DrawText(ArialNormal, FontSize, TotalValue, PosY, TextJustify.Right, Total.ToString("#.00"));

// draw tax (Ontario Canada HST)
PosY -= Table.DefaultCellStyle.FontLineSpacing;
Contents.DrawText(ArialNormal, FontSize, TotalDesc, PosY, TextJustify.Right, "Tax (13%)");
Double Tax = Math.Round(0.13 * Total, 2, MidpointRounding.AwayFromZero);
Contents.DrawText(ArialNormal, FontSize, TotalValue, PosY, TextJustify.Right, Tax.ToString("#.00"));

// draw total line
PosY -= Table.DefaultCellStyle.FontDescent + 0.5 * MarginVer;
Contents.DrawLine(ColumnPosition[3], PosY, ColumnPosition[4], PosY);

// draw final total
PosY -= Table.DefaultCellStyle.FontAscent + 0.5 * MarginVer;
Contents.DrawText(ArialNormal, FontSize, TotalDesc, PosY, TextJustify.Right, "Total payable");
Total += Tax;
Contents.DrawText(ArialNormal, FontSize, TotalValue, PosY, TextJustify.Right, Total.ToString("#.00"));

PosY -= Table.DefaultCellStyle.FontDescent + MarginVer;
Contents.DrawLine(ColumnPosition[0], Table.RowTopPosition, ColumnPosition[0], PosY);
Contents.DrawLine(ColumnPosition[0], PosY, ColumnPosition[4], PosY);
Contents.DrawLine(ColumnPosition[4], Table.RowTopPosition, ColumnPosition[4], PosY);

// restore graphics state
Contents.RestoreGraphicsState();
return;
}

6.  历史

  • 二〇一三/04/01:版本1.0原来版本。
  • 二零一二/04/09:版本1.1支撑除句点之外的小数分隔符的国家/地区。
  • 二〇一三/07/21:版本1.2原始版本协助的图像能源独有jpeg文件格式。版本1.2支撑Bitmap类可承受的具备图像文件。请参阅ImageFormat类。程序测量试验与:Bmp,Gif,Logo,Jpeg,Png和Tiff。参见上边包车型大巴2.3节和3.8节。
  • 2014/02/07:版本1.3修正PdfContents.DrawBezierNoP2(PointD P1,PointD
    P3)的错误。
  • 二〇一四/03/01:1.4版创新了对字符替换的帮忙。革新对图像包涵的协助。一些修复与PdfXObject相关。
  • 二零一四/05/05:版本1.5不行使字体的条形码帮忙。饱含四个条形码:Code-128,Code-39,UPC-A和EAN-13。参见第2.5节和第3.7节。
  • 2016/07/09:版本1.6(1)创立文件后,CreateFile方法将PdfDocument复位为始发标准。(2)PdfFont对象不错地释放非托管代码能源。
  • 二〇一六/08/25:版本1.7支撑文书档案加密,互连网链接和QPAJERO码。
  • 二〇一四/09/12:版本1.8援救书签。
  • 2015/10/06:版本1.9支撑制图,PrintDocument和图像元文件。
  • 二零一四/10/12:版本1.9.1革新为ChartExample。深入分析除句点之外的持有小数分隔符的区域中的数字字段。
  • 二〇一四/12/02:1.10.0本子辅助数据表。加多源代码文书档案。扩展每种文书档案的最大图像数据。
  • 贰零壹陆/01/12:版本1.11.0支撑摄像,声音和附属类小部件文件。增多对Interleave 2
    of 5条码的支撑。
  • 二〇一六/04/13:版本1.12.0支撑再次排序页面和抓实数据表边框线协理。
  • 二零一五/05/05:1.13.0本子PDF文书档案输出到流。PDF表插入分页符。图像品质提升。扶助典型128(RC4)加密。
  • 二零一四/06/08:1.14.0版支持PDF表中的长文本块或TextBox。
  • 二〇一五/06/09:版本1.14.1一行改为PdfTableStyle类的复制方法。
  • 2014/06/17:版本1.15.0文书档案消息字典。PdfImage重写。其余图像保存选项。
  • 二零一四/06/18:版本1.15.1从施工方案财富管理器中删去未使用的源。
  • 二〇一四/07/27:版本1.16.0 Unicode匡助。提交页面方法。
  • 二零一五/08/07:版本1.16.1。考订小(<0.0001)实数转变为字符串。
  • 二〇一五/09/01:版本1.16.2。修复未定义的字符。所选字体不帮忙采纳的字符。 
  • 二零一五/09/22:版本1.16.3。PdfTable构造函数使用当前页面大小来测算暗许表区域矩形。当PdfTable运营新页面时,从上一页获取页面类型和可行性。
  • 贰零壹陆/09/30:Version 1.16.4同一采纳IDisposable接口释放非托管财富。
  • 二〇一五/0一半6:版本1.17.0
    WPF图形,发光度,颜色混合,椭圆弧和一遍贝塞尔曲线。
  • 贰零壹陆/02/29:Version
    1.17.1当第一列标题是TextBox时,PdfTable将科学彰显标题。
  • 2014/03/22:版本1.17.2 PdfInfo PDF文书档案属性将科学展现。
  • 二〇一六/04/14:版本1.17.3更正了将非整数字体大小在将小数分隔符定义为非句点(逗号)的区域中的难点。
  • 二〇一四/05/24:版本1.18.0命名指标地和PdfFont能源的创始。
  • 二零一六/06/02:版本1.18.1再一次申请1.17.3修复。
  • 二零一四/06/13:版本1.19.0文书档案链接。命名目的的变动。交互作用协助TextBox和PdfTable。
  • 贰零壹肆/07/27:版本1.19.1
    Fix:AddLocation马克尔修复了富有小数分隔符而不是句点的区域。 

2.21  折射率,不折射率,Alpha颜色成分和交集

  默许景况下,PDF成像模型会将目的(形状,线条,文本和图像)不透明地绘制到页面上。种种新指标完全覆盖了它上面包车型大巴图像。PDF有三种体制来改换这种作为不折射率和交集。图形状态字典具备用于描边(笔)和非描边(刷)操作的不折射率值。完全不透明的不发光度值为1.0,完全折射率为0.0。不折射率值对应于颜色结构的α分量,使得1.0为255,α为0。假若不透明度值为0.5,则在页面上制图的新对象将是50%晶莹剔透的。要设置不发光度,申请调离用SetAlphaStroking线或SetAlphaNonStroking办法的形状的艺术。混合是将页面上的水彩与正在绘制的新品类的水彩组合的历程。要设置三个bland格局调用的SetBlendMode方法PdfContents。参数是BlendMode枚举。有关详细表达,请参阅PDF规格文书档案的7.2.4混合格局。譬如,请参见OtherExample.cs第8页。

    已整整卷入到百度云盘:链接:http://pan.baidu.com/s/1nvFKDvj
密码:apj0  

2.15  附加数据文件

  在PdfFileWriter支撑PDF文书档案中放置数据文件。嵌入文件的完整示例在第7页中提交OtherExample.cs。客户能够保存文件或彰显文件。

// create embedded media file
PdfEmbeddedFile EmbeddedFile = PdfEmbeddedFile.CreateEmbeddedFile(Document, "BookList.txt");
AnnotFileAttachment FileIcon = new AnnotFileAttachment(EmbeddedFile, FileAttachIcon.Paperclip);

// display text area to activate the file attachment
Double LineSpacing = ArialNormal.LineSpacing(12.0);
Double TextPosX = PosX + 0.5 * AreaWidth;
Double TextPosY = PosY + 0.5 * AreaHeight + LineSpacing;
Contents.DrawText(ArialNormal, 12.0, TextPosX, TextPosY, TextJustify.Center, "Right click on the paper clip");
TextPosY -= LineSpacing;
Double TextWidth = Contents.DrawText(ArialNormal, 12.0, TextPosX, TextPosY, TextJustify.Center, "to open or save the attached file");

// annotation
Double IconPosX = TextPosX + 0.5 * TextWidth + 0.1;
Double IconPosY = TextPosY;
PdfRectangle AnnotRect = new PdfRectangle(IconPosX, IconPosY, IconPosX + 0.15, IconPosY + 0.4);
Page.AddFileAttachment(AnnotRect, EmbeddedFile, FileAttachIcon.Paperclip);
TextPosY -= 2 * LineSpacing;
AnnotFileAttachment FileText = new AnnotFileAttachment(EmbeddedFile, FileAttachIcon.NoIcon);
Contents.DrawTextWithAnnotation(Page, ArialNormal, 12.0, TextPosX, TextPosY, TextJustify.Center,
  DrawStyle.Underline, Color.Red, "File attachment (right click)", FileText);

                PDF文件编写器C#类库   

  这一篇首要是对 PDF-File-Writer的利用进行中文翻译,在各位使用的进程中有如何难点,可以联系笔者。笔者曾经在生养境况中央银行使。

2.12  数据表(table)支持

  数据表类允许你在PDF文书档案中展现数据表。PdfTable是决定多个表的体现的主类。表由标题行和多少行组成。每行被剪切为单元格。PdfTableCell支配二个题名单元或三个数码单元的显得。如果选择头,它将展现在表的最上端。可选地,它将显得在种种附加页面包车型地铁最上端。要在单元格中展现数据,请将数据加载到的Value属性中PdfTableCell。数据足以是:文本字符串,基本数值,布尔,字符TextBox,图像,QTiguan码或条形码。独立于数据,您能够加载文书档案链接,网络链接,录制,音频或嵌入文件的单元格。单击单元格区域内的别的岗位将使PDF阅读器激活文书档案链接,互连网链接,录像,音频或嵌入式文件。数据的体现由PdfTableStyle类控制。PdfTable类包涵私下认可单元格样式和暗中同意标题样式。您能够覆盖在那之中的私有样式的暗中认可样式PdfTableCell。要显得表,请创造贰个PdfTable指标。接下来,您将开首化表,标题单元格,数据单元格和体裁对象。最终,设置多个周而复始并加载一行的单元格值,然后绘制此行。此循环继续,直到展现全部数据。下边您将看到生成表所需的手续顺序。

  调用DrawRow措施时,软件计算机技巧商讨所需的行高。行高是参天单元格的冲天。倘若表中有丰富的上空,将绘制该行。当底部的可用空间太小时,将调用新页面,何况可选标题和脚下行彰显在报表的顶上部分。假若所需的行中度过大,将不适合全空表,则会引发那些。为了适应长多行字符串,或TextBoxes软件能够灵活地拍卖这一个境况。多行字符串由PdfTable转换为a TextBox。本PdfTableStyle类有叁个TextBoxPageBreakLines性子。假若此属性设置为零(暗中同意值),则将TextBox其就是别的数据值。TextBox可观必须符合页面。倘使TextBoxPageBreakLines设置为正整数,系统将计算单元格的惊人作为TextBox惊人或可观的前几行钦点TextBoxPageBreakLines。系统将绘制具备适合页面包车型地铁行数的行。将创制贰个新页面,并绘制别的的线条。换句话说,long的率先行块TextBox将至少是TextBoxPageBreakLines长的。TableExample.cs源包罗长TextBox单元格的亲自去做。

  创建PdfTable对象。

// create table
PdfTable Table = new PdfTable(Page, Contents, Font, FontSize);

  page是眼下的PdfPage。内容是前段时间的PdfContents。Font是表暗中同意字体。FontSize是以点为单位的暗中认可字体大小。

  在页面上定义表的区域。

// table's area on the page
Table.TableArea = new PdfRectangle(Left, Bottom, Right, Top);

// first page starting vertical position
Table.RowTopPosition = StartingTopPosition;

  八个参数是表格相对于左下角和客户单位的四边。借使在第一页上,表顶端地点不在设置RowTopPosition为早先最上端地点的页面包车型客车最上端。在后续页面上,表格将始终从最上部开始。假如TableArea未钦定,库将其安装为默许页面大小减弱1英寸边距。

  将表宽度划分为列。

// divide table area width into columns
StockTable.SetColumnWidth(Width1, Width2, Width3, ...);

  参数的数码是列数。表格宽度减去总边界线将与那个参数成比例。

  一旦选拔SetColumnWidth主意设置列的数量,库将开创多少个PdfTableCell数组。二个用于标题单元的数组和三个用于数据单元的数组。

  数据表的行和列能够用边框线分隔。边框线属性由PdfTableBorder和定义PdfTableBorderStyle。有多少个水平边框线:TopBorderBottomBorderHeaderHorBorder标题行和率先个数据行之间以及CellHorBorder数据行之间。有两组垂直边框线:HeaderVertBorder用于标题行CellVertBorder中的垂直边框线的数组,以及用于表的数据部分中的列之间的垂直边框线的数组。数组大小是列数加一。数组成分零是表的左手框。数组成分列是表的左臂框。全数其余因素是分隔列的行。那个行中的每一行能够独自定义。有部分艺术能够一次定义全体边界线,或概念各种独立的边界线。

  定义全部边框线的办法:

// clear all border lines
Table.Borders.ClearAllBorders();

// set all border lines to default values (no need to call)
// All frame lines are one point (1/72") wide
// All grid lines are 0.2 of one point wide
// All borders are black
Table.Borders.SetDefaultBorders();

// set all borders to same width and black color
Table.Borders.SetAllBorders(Double Width);

// set all borders to same width and a specified color
Table.Borders.SetAllBorders(Double Width, Color LineColor);

// set all borders to one width and all grid lines to another width all lines are black
Table.Borders.SetAllBorders(Double FrameWidth, Double GridWidth);

// set all borders to one width and color and all grid lines to another width and color
Table.Borders.SetAllBorders(Double FrameWidth, Color FrameColor, Double GridWidth, Color GridColor);

// set all frame borders to same width and black color and clear all grid lines
Table.Borders.SetFrame(Double Width);

// set all frame borders to same width and a specified color and clear all grid lines
Table.Borders.SetFrame(Double Width, Color LineColor);

  能够祛除或设置每种水平边界线。示例是顶端边框线:

// clear border
Table.Borders.ClearTopBorder();

// set border with default color set to black
// Zero width means one pixel of the output device.
Table.Borders.SetTopBorder(Double LineWidth);

// set border
Table.Borders.SetTopBorder(Double LineWidth, Color LineColor);

  可防止去或安装各种垂直边界线。示例是单元格的垂直边框线:

// clear border
Table.Borders.ClearCellVertBorder(Int32 Index);

// set border with default color set to black
Table.Borders.SetCellVertBorder(Int32 Index, Double LineWidth);

// set border
Table.Borders.SetCellVertBorder(Int32 Index, Double LineWidth, Color LineColor);

  设置任何可选的表属性。上边包车型客车以身作则中提交的值是默许值。

// header on each page
HeaderOnEachPage = true;

// minimum row height
MinRowHeight = 0.0;

  表消息每趟管理一行。每行由单元格组成。每列二个单元格。单元格消息的体现由PdfTableStyle类调节。有大致21个样式属性。对于完整的列表视图的源代码或援助文件。这几个样式中的一些特定于要显得的信息的项目。这里是贰个例证

// make some changes to default header style
Table.DefaultHeaderStyle.Alignment = ContentAlignment.BottomRight;

// create private style for header first column
Table.Header[0].Style = Table.HeaderStyle;
Table.Header[0].Style.Alignment = ContentAlignment.MiddleLeft;

// load header value
Table.Header[0].Value = "Date";

// make some changes to default cell style
Table.DefaultCellStyle.Alignment = ContentAlignment.MiddleRight;
Table.DefaultCellStyle.Format = "#,##0.00";

// create private style for date column
Table.Cell[0].Style = StockTable.CellStyle;
Table.Cell[0].Style.Alignment = ContentAlignment.MiddleLeft;
Table.Cell[0].Style.Format = null;

  开端化完结后,彰显数据。下边包车型大巴事例是从TableExample.cs。那是一张股价表。有6列。

// open stock daily price
StreamReader Reader = new StreamReader("SP500.csv");

// ignore header
Reader.ReadLine();

// read all daily prices
for(;;)
    {
    String TextLine = Reader.ReadLine();
    if(TextLine == null) break;

    String[] Fld = TextLine.Split(new Char[] {','});

    Table.Cell[ColDate].Value = Fld[ColDate];
    Table.Cell[ColOpen].Value = Double.Parse(Fld[ColOpen], NFI.PeriodDecSep);
    Table.Cell[ColHigh].Value = Double.Parse(Fld[ColHigh], NFI.PeriodDecSep);
    Table.Cell[ColLow].Value = Double.Parse(Fld[ColLow], NFI.PeriodDecSep);
    Table.Cell[ColClose].Value = Double.Parse(Fld[ColClose], NFI.PeriodDecSep);
    Table.Cell[ColVolume].Value = Int32.Parse(Fld[ColVolume]);
    StockTable.DrawRow();
    }

StockTable.Close();

  该DrawRow(NewPage)办法具备可选参数Boolean NewPage = false。暗中同意值为false。假设愿意下一行打字与印刷在下一页的顶端,请将参数设置为true

  交互效用示例。

// set cell number 6 with web link
BookList.Cell[6].WebLink = WebLinkString;

// another way to set weblink
BookList.Cell[6].AnnotAction = new AnnotWebLink(WebLinkString);

// set cell with document link to chapter 3
BookList.Cell[6].AnnotAction = new AnnotLinkAction("Chapter3");

// play video
PdfDisplayMedia Omega = new PdfDisplayMedia(PdfEmbeddedFile.CreateEmbeddedFile(Document, "Omega.mp4"));
BookList.Cell[6].AnnotAction = new AnnotDisplayMedia(Omega);

// play audio
PdfDisplayMedia RingSound = new PdfDisplayMedia(PdfEmbeddedFile.CreateEmbeddedFile(Document, "Ring01.wav"));
BookList.Cell[6].AnnotAction = new AnnotDisplayMedia(RingSound);

// allow user to save or view embedded file
PdfEmbeddedFile EmbeddedFile = PdfEmbeddedFile.CreateEmbeddedFile(Document, "BookList.txt");
BookList.Cell[6].AnnotAction = new AnnotFileAttachment(EmbeddedFile, FileAttachIcon.NoIcon);

  对于数据表的源代码,愈来愈多的例证看看ArticleExample.csTableExample.cs。有关,和类的越来越多详细音讯PdfTable,请查看帮忙文件。PdfTableCell``PdfTableStyle``PdfTableBorder``PdfFileWriter.chm

* 3.1  文书档案成立概述

  上面包车型地铁测量试验方法演示了创设PDF文件的牵线中描述的两个步骤。当你按下示范程序的“文章示例”按钮时,将实践该格局。以下小节详细描述每种步骤。

 

/// Create “article example” test PDF document
public void Test(Boolean Debug, String FileName)
{
// Step 1: Create empty document
// Arguments: page width: 8.5”, page height: 11”, Unit of measure: inches
// Return value: PdfDocument main class
Document = new PdfDocument(PaperType.Letter, false, UnitOfMeasure.Inch, FileName);

// for encryption test
// Document.SetEncryption(Permission.All & ~Permission.Print);

// Debug property
// By default it is set to false. Use it for debugging only.
// If this flag is set, PDF objects will not be compressed, font and images will be replaced
// by text place holder. You can view the file with a text editor but you cannot open it with PDF reader.
Document.Debug = Debug;

// Step 2: create resources
// define font resources
DefineFontResources();

// define tiling pattern resources
DefineTilingPatternResource();

// Step 3: Add new page
Page = new PdfPage(Document);

// Step 4:Add contents to page
Contents = new PdfContents(Page);

// Step 5: add graphics and text contents to the contents object
DrawFrameAndBackgroundWaterMark();
DrawTwoLinesOfHeading();
DrawHappyFace();
DrawBarcode();
DrawBrickPattern();
DrawImage();
DrawHeart();
DrawChart();
DrawTextBox();
DrawBookOrderForm();

// Step 6: create pdf file
// argument: PDF file name
Document.CreateFile();

// start default PDF reader and display the file
Process Proc = new Process();
Proc.StartInfo = new ProcessStartInfo(FileName);
Proc.Start();

// exit
return;
}

     下边为全文翻译:

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类使用此格式来代表QTiguan图像。
  • 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.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源代码。

3.12  绘制文本框

DrawTextBox主意是应用TextBox类的示范。本TextBox类格式文本,以适应列中。能够选取字体的样式和大小的真正来绘制文本。

// Draw example of a text box
private void DrawTextBox()
{
// save graphics state
Contents.SaveGraphicsState();

// translate origin to PosX=1.1" and PosY=1.1" this is the bottom left corner of the text box example
Contents.Translate(1.1, 1.1);

// Define constants
// Box width 3.25"
// Box height is 3.65"
// Normal font size is 9.0 points.
const Double Width = 3.15;
const Double Height = 3.65;
const Double FontSize = 9.0;

// Create text box object width 3.25"
// First line indent of 0.25"
TextBox Box = new TextBox(Width, 0.25);

// add text to the text box
Box.AddText(ArialNormal, FontSize,
    "This area is an example of displaying text that is too long to fit within a fixed width " +
    "area. The text is displayed justified to right edge. You define a text box with the required " +
    "width and first line indent. You add text to this box. The box will divide the text into " + 
    "lines. Each line is made of segments of text. For each segment, you define font, font " +
    "size, drawing style and color. After loading all the text, the program will draw the formatted text.\n");
Box.AddText(TimesNormal, FontSize + 1.0, "Example of multiple fonts: Times New Roman, ");
Box.AddText(Comic, FontSize, "Comic Sans MS, ");
Box.AddText(ArialNormal, FontSize, "Example of regular, ");
Box.AddText(ArialBold, FontSize, "bold, ");
Box.AddText(ArialItalic, FontSize, "italic, ");
Box.AddText(ArialBoldItalic, FontSize, "bold plus italic. ");
Box.AddText(ArialNormal, FontSize - 2.0, "Arial size 7, ");
Box.AddText(ArialNormal, FontSize - 1.0, "size 8, ");
Box.AddText(ArialNormal, FontSize, "size 9, ");
Box.AddText(ArialNormal, FontSize + 1.0, "size 10. ");
Box.AddText(ArialNormal, FontSize, DrawStyle.Underline, "Underline, ");
Box.AddText(ArialNormal, FontSize, DrawStyle.Strikeout, "Strikeout. ");
Box.AddText(ArialNormal, FontSize, "Subscript H");
Box.AddText(ArialNormal, FontSize, DrawStyle.Subscript, "2");
Box.AddText(ArialNormal, FontSize, "O. Superscript A");
Box.AddText(ArialNormal, FontSize, DrawStyle.Superscript, "2");
Box.AddText(ArialNormal, FontSize, "+B");
Box.AddText(ArialNormal, FontSize, DrawStyle.Superscript, "2");
Box.AddText(ArialNormal, FontSize, "=C");
Box.AddText(ArialNormal, FontSize, DrawStyle.Superscript, "2");
Box.AddText(ArialNormal, FontSize, "\n");
Box.AddText(Comic, FontSize, Color.Red, "Some color, ");
Box.AddText(Comic, FontSize, Color.Green, "green, ");
Box.AddText(Comic, FontSize, Color.Blue, "blue, ");
Box.AddText(Comic, FontSize, Color.Orange, "orange, ");
Box.AddText(Comic, FontSize, DrawStyle.Underline, Color.Purple, "and purple.\n");
Box.AddText(ArialNormal, FontSize, "Support for non-Latin letters: ");
Box.AddText(ArialNormal, FontSize, Contents.ReverseString( "עברית"));
Box.AddText(ArialNormal, FontSize, "АБВГДЕ");
Box.AddText(ArialNormal, FontSize, "αβγδεζ");

Box.AddText(ArialNormal, FontSize, "\n");

// Draw the text box
// Text left edge is at zero (note: origin was translated to 1.1") 
// The top text base line is at Height less first line ascent.
// Text drawing is limited to vertical coordinate of zero.
// First line to be drawn is line zero.
// After each line add extra 0.015".
// After each paragraph add extra 0.05"
// Stretch all lines to make smooth right edge at box width of 3.15"
// After all lines are drawn, PosY will be set to the next text line after the box's last paragraph
Double PosY = Height;
Contents.DrawText(0.0, ref PosY, 0.0, 0, 0.015, 0.05, TextBoxJustify.FitToWidth, Box);

// Create text box object width 3.25"
// No first line indent
Box = new TextBox(Width);

// Add text as before.
// No extra line spacing.
// No right edge adjustment
Box.AddText(ArialNormal, FontSize,
    "In the examples above this area the text box was set for first line indent of " +
    "0.25 inches. This paragraph has zero first line indent and no right justify.");
Contents.DrawText(0.0, ref PosY, 0.0, 0, 0.01, 0.05, TextBoxJustify.Left, Box);

// Create text box object width 2.75
// First line hanging indent of 0.5"
Box = new TextBox(Width - 0.5, -0.5);

// Add text
Box.AddText(ArialNormal, FontSize,
    "This paragraph is set to first line hanging indent of 0.5 inches. " +
    "The left margin of this paragraph is 0.5 inches.");

// Draw the text
// left edge at 0.5"
Contents.DrawText(0.5, ref PosY, 0.0, 0, 0.01, 0.05, TextBoxJustify.Left, Box);

// restore graphics state
Contents.RestoreGraphicsState();
return;
}

2.10。图表辅助

  PDF标准未有一定的图样支持。PDF文件编写制定器库通过同意开拓职员创设Microsoft
Charting对象并将此指标作为图像绘制到PDF文件中来提供图片帮助。有关Microsoft图表控件注释MSDN库文书档案Visual
Studio 二零一二图纸控件的详细音讯。图表名称空间的文档在“
数据可视化图表命名空间”中提供。附上ChartExample.cs有三个图表的例子。就算您策动选用图表,您供给增添System.Windows.Forms.Visualization对你的类型的援引。在各样源模块使用Chart你要求引用System.Windows.Forms.DataVisualization.Charting命名空间。

  将图纸加多到PDF文档是多个步骤的历程。

  • 成立图表对象。
  • 创建PdfChart对象。
  • 构建图表。
  • 绘制PdfChart到PdfContents。

  成立图表的引荐格局是利用PdfChart指标的静态方法。

//  参数:文档对象,宽,高,分辨率
Chart MyChart = PdfChart.CreateChart(PdfDocument Document, Double Width, Double Height, Double Resolution);

  你可以Chart友善实例化类。

Chart MyChart = new Chart();
MyChart.RenderingDpiY = 300;    // example of 300 pixels per inch
MyChart.Width = 1950;        // example of 6.5 inches in pixels    
Mychart.Height = 1350;        // example of 4.6 inches in pixels

  接下来PdfChartChart地点创制四个。也许,您能够覆盖分辨率。

// resolution is optional. It will override the resolution set above.
PdfChart MyPdfChart = new PdfChart(PdfDocument Document, Chart MyChart, Double Resolution);

  接下去,您创设您的图纸。ChartExample.cs有多少个例证。营造图表的文书档案高出了本文的限定。互联网络有非常多事例。

PdfChart有一种CreateFont形式来简化字体的创建。它将依据图表的分辨率总计字体大小。

// FontSizeUnit is an enumeration
// Available units: pixel, point, UserUnit, Inch, cm, mm
Font CreateFont(String FontFamilyName, FontStyle Style, Double FontSize, FontSizeUnit Unit);

  最终一步是绘制图表。

// Draw the chart at OrigX, OrigY in user units
// The width and height of the chart are taken from the Chart object.
// They are calculated from the size in pixels and resolution of the chart.
public void PdfContents.DrawChart(PdfChart MyPdfChart, Double OrigX, Double OrigY);

// Draw the chart at OrigX, OrigY with Width and Height as specified, all in user units.
// NOTE: Width and Height should be selected to agree with the aspect ratio of the chart object.
public void PdfContents.DrawChart(PdfChart MyPdfChart, Double OrigX, Double OrigY, Double Width, Double Height);

  本PdfChart类提供了有个别可选的法子来支配图像的一定。

  该ImageSize主意重临具有适合给定区域的没有错宽高比的最大矩形。

SizeD ImageSize(Double Width, Double Height);

  该ImageSizePosition方法重临具备适合给定区域的不利宽高比的最大矩形,并基于ContentAlignment枚举对其开展定点。

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

2.22  文书档案链接和命名指标

  文书档案链接允许PDF文书档案客商单击链接并跳转到文书档案的另一片段。加多文书档案链接分为两片段。目的定义为地方标识。地点标识必需具备独一的名目,范围(LocalDestNamedDest)和文书档案地点(页面和岗位)。NamedDest范围可用以文书档案链接或命名指标或双方。第二部分是链接地点。那三个部分能够按任何顺序定义。他们被绑在一道的名字。名称区分轻重缓急写。许多链接能够本着同一人置标识。

  命名指标是PDF文书档案中的目的。它们利用地点标志以与文书档案链接一样的秘技定义。范围必得设置为NamedDest。当诸如Adobe
Acrobat的PDF阅读器张开PDF文书档案时,它能够在翻看窗口中展现目的时展开文档。

要放置地点标识,调用的AddLocationMarker方法PdfPage。注意:名称区分轻重缓急写。

// Add location marker to the document (PdfPage method)
public void AddLocationMarker
  (
  string          LocMarkerName, // unique destination name (case sensitive)
  LocMarkerScope  Scope,         // eigther LocalDest or NamedDest
  DestFit         FitArg,        // fit argument (see below)
  params double[] SideArg        // 0, 1 or 4 side dimension argument (see below)
  )

  增多链接地方调用PdfPage的AddLinkLocation方法。

public PdfAnnotation AddLinkAction
  (
  string LocMarkerName,    // location marker name
  PdfRectangle AnnotRect   // rectangle area on the page to activate the jump
  )

  有关命名目标地的详细音信,请参阅Adobe
PDF文件标准“PDF参考,第六版,Adobe便携式文书档案格式版本1.7,二零零五年四月”。第582页的表8.2。

  • DestFit.Fit (无参数):展现页面,其内容放大刚好可以适合水平和垂直窗口内的万事页面。
  • DestFit.FitH (1 arg
    Top):呈现页面,垂直坐标最上部坐落窗口的最上端边缘,并且页面包车型地铁内容放大刚好能够适合窗口内页面包车型地铁方方面面宽度。
  • DestFit.FitV (1 arg
    Left):呈现页面,水平坐标侧面位于窗口的左侧缘,页面包车型客车内容放大刚好能够适合窗口内页面的整整中度。
  • DestFit.FitR (4 args Left Bottom Right
    Top):展现页面,其内容被放大,刚好可以适合由水平和垂直方向的窗口内的左,右,底和坐标钦赐的矩形。
  • DestFit.FitB (无参数):显示页面,其内容放大刚刚足以适合水平和垂直的窗口内的全方位边界框。
  • DestFit.FitBH (1 arg
    Top):彰显页面,垂直坐标最上部位居窗口的顶端边缘,页面包车型大巴剧情放大刚好能够适合窗口内边界框的全体宽度。
  • DestFit.FitBV (1 arg
    Left):呈现页面,水平坐标左侧位于窗口的侧边缘,页面包车型大巴内容放大刚好能够适合窗口内其边界框的上上下下中度。

  PDF阅读器的调用参数在Adobe的“张开PDF文件的参数”中定义。假使PDF在台式计算机上开荒,呼叫线路必得是:

  “path \ AcroRd32.exe”/ A“nameddest = ChapterXX”“path \
Document.pdf”

  假若PDF文书档案由网页中的链接指向,则目的将增大到链接:

  <a
href=”http://example.org/Document.pdf\#ChapterXX"&gt;目标说明&lt;/a&gt;

  或者:<a
href=”http://example.org/Document.pdf\#namedsest=ChapterXX"&gt;目标说明&lt;/a&gt;

2.11  打字与印刷文书档案帮助

  打字与印刷文书档案辅助允许你以打字与印刷到打字与印刷机和生成PDF文书档案的等同方法打字与印刷度报纸告。这种产生PDF文件的章程和PdfContents用以产生PDF文件的格局之间的区分在于栅格图形与矢量图形之间的距离。打字与印刷文书档案援助每页创建三个jpeg图像。PrintExample.cs有开创三页文书档案的示范。

  平日种种页面是页面包车型大巴欧洲经济共同体图像。假诺你的页面是Letter
尺寸,分辨率为每英寸300像素,每一种像素为3个字节,页面包车型大巴位图将是25.245MB长。PrintPdfDocument具有CropRect能够显着减小位图的深浅的点子。假设使用一英寸边距,位图的活动大小将减弱到15.795
MB。减弱37.4%。

// main program
// Create empty document
Document = new PdfDocument(PaperType.Letter, false, UnitOfMeasure.Inch);

// create PrintPdfDocument producing an image with 300 pixels per inch 创建一个300像素每英寸的PrintPdfDocument

 PdfImageControl ImageControl = new PdfImageControl();
 ImageControl.Resolution = 300.0; 
PrintPdfDocument Print = new PrintPdfDocument(Document, ImageControl); 

// PrintPage in the delegate method PrintPageEventHandler 
// This method will print one page at a time to PrintDocument  
Print.PrintPage += PrintPage;
 // set margins in user units (Left, top, right, bottom) 边距设置
// note the margins order are per .net standard and not PDF standard 
Print.SetMargins(1.0, 1.0, 1.0, 1.0);
 // crop the page image result to reduce PDF file size //缩小尺寸
 // the crop rectangle is per .net standard. 

// The origin is top left. 原点在左上方
Print.CropRect = new RectangleF(0.95F, 0.95F, 6.6F, 9.1F); 

// initiate the printing process (calling the PrintPage method)启动打印进程
 // after the document is printed, add each page as an image to PDF file.在打印完文档之后,将每个页面作为一个图像添加到PDF文件中。

 Print.AddPagesToPdfDocument();
 // dispose of the PrintDocument object 

Print.Dispose(); 

// create the PDF file
 Document.CreateFile(FileName);

  PrintPage方法的演示

// Print each page of the document to PrintDocument class打印文档的每一页的PrintDocument类
// You can use standard PrintDocument.PrintPage(...) method.
// NOTE: The graphics origin is top left and Y axis is pointing down.图形原点是左上角,Y轴指向下方
// In other words this is not PdfContents printing.换句话说,这不是PdfContents的打印

 public void PrintPage(object sender, PrintPageEventArgs e) { 

// graphics object short cut Graphics G = e.Graphics; 

// Set everything to high quality 
G.SmoothingMode = SmoothingMode.HighQuality;
 G.InterpolationMode = InterpolationMode.HighQualityBicubic;
 G.PixelOffsetMode = PixelOffsetMode.HighQuality;
 G.CompositingQuality = CompositingQuality.HighQuality;
 // print area within margins 
Rectangle PrintArea = e.MarginBounds; 

// draw rectangle around print area 

G.DrawRectangle(Pens.DarkBlue, PrintArea);
 // line height 
Int32 LineHeight = DefaultFont.Height + 8;
 Rectangle TextRect = new Rectangle(PrintArea.X + 4, PrintArea.Y + 4, PrintArea.Width - 8, LineHeight); 

// display page bounds
 // DefaultFont is defined somewhere else 
String text = String.Format("Page Bounds: Left {0}, Top {1}, Right {2}, Bottom {3}", e.PageBounds.Left, e.PageBounds.Top, e.PageBounds.Right, e.PageBounds.Bottom);
 G.DrawString(text, DefaultFont, Brushes.Black, TextRect); TextRect.Y += LineHeight; 

// display print area 
text = String.Format("Page Margins: Left {0}, Top {1}, Right {2}, Bottom {3}", 
    PrintArea.Left, PrintArea.Top, PrintArea.Right, PrintArea.Bottom); 
G.DrawString(text, DefaultFont, Brushes.Black, TextRect); TextRect.Y += LineHeight; 
// print some lines 

for(Int32 LineNo = 1; ; LineNo++)
 {
 text = String.Format("Page {0}, Line {1}", PageNo, LineNo); 
G.DrawString(text, DefaultFont, Brushes.Black, TextRect); 
TextRect.Y += LineHeight; 
if(TextRect.Bottom > PrintArea.Bottom)
 break;
 } 

// move on to next page 
PageNo++;
 e.HasMorePages = PageNo <= 3; 

return; }

2.13  播放摄像文件

  该PdfFileWriter支撑嵌入PDF文书档案中的摄像文件。播放摄像文件的一体化示例在第7页OtherExample.cs。增添摄像文件要求选择多少个类。

    首先,您要求将摄像文件嵌入到PDF文书档案中。

    第二,你要求定义怎么着播放录制。的PdfDisplayMedia类有很多格局来支配录像突显。请参照他事他说加以考察类的源代码和文档帮忙文件。比如:RepeatCountScaleMedia。要是要在扭转窗口中播放录像,您必得使  用SetMediaWindow方法。

    第三,您必要在PDF页面上定义客户必得单击以激活录制的区域。即便要在讲授区域可知时激活视频,请使用ActivateActionWhenPageIsVisible

// define annotation rectangle that has the same aspect ratio as the video
PdfRectangle AnnotRect = ImageSizePos.ImageArea(480, 360,
AreaLeft, AreaBottom, AreaRight - AreaLeft, AreaTop - AreaBottom, ContentAlignment.MiddleCenter);

// create display media object
PdfDisplayMedia DisplayMedia = new PdfDisplayMedia(PdfEmbeddedFile.CreateEmbeddedFile(Document, "LooneyTunes.mp4"));

// create annotation object
PdfAnnotation Annotation = Page.AddScreenAction(AnnotRect, DisplayMedia);

// activate the video when the page becomes visible
// Annotation.ActivateActionWhenPageIsVisible(true);

// define X Object to paint the annotation area when the video is not playing
PdfXObject AnnotArea = AnnotationArea(AnnotRect.Width, AnnotRect.Height, Color.Lavender, Color.Indigo, "Click here to play the video");
Annotation.Appearance(AnnotArea);

  浮动窗口摄像显示

// create display media object
PdfDisplayMedia DisplayMedia = new PdfDisplayMedia(PdfEmbeddedFile.CreateEmbeddedFile(Document, "Omega.mp4"));

// activate display controls
DisplayMedia.DisplayControls(true);

// repeat video indefinitly
DisplayMedia.RepeatCount(0);

// display in floating window
DisplayMedia.SetMediaWindow(MediaWindow.Floating, 640, 360, WindowPosition.Center,
    WindowTitleBar.TitleBarWithCloseButton, WindowResize.KeepAspectRatio, "Floating Window Example");

Double LineSpacing = ArialNormal.LineSpacing(12.0);
Double TextPosX = PosX + 0.5 * AreaWidth;
Double TextPosY = PosY + 0.5 * AreaHeight + LineSpacing;
Double TextWidth = Contents.DrawText(ArialNormal, 12.0, TextPosX, TextPosY, TextJustify.Center, "Click this text to play video");
TextPosY -= LineSpacing;
Contents.DrawText(ArialNormal, 12.0, TextPosX, TextPosY, TextJustify.Center, "in floating window");

// create annotation object
PdfRectangle AnnotRect = new PdfRectangle(TextPosX - 0.5 * TextWidth, TextPosY - ArialNormal.DescentPlusLeading(12.0),
    TextPosX + 0.5 * TextWidth, TextPosY + ArialNormal.AscentPlusLeading(12.0) + LineSpacing);
Page.AddScreenAction(AnnotRect, DisplayMedia);

3.2  字体能源

  该DefineFontResources方法创建此示例中利用的持有字体资源。要翻看可用来其余字体的有所字符,请按“字体家庭”开关。选拔一个族并查看为各样字符定义的字形。要翻开单个字形按下视图或双击。

 

// Define Font Resources
private void DefineFontResources()
{
// Define font resources
// Arguments: PdfDocument class, font family name, font style, embed flag
// Font style (must be: Regular, Bold, Italic or Bold | Italic) All other styles are invalid.
// Embed font. If true, the font file will be embedded in the PDF file.
// If false, the font will not be embedded
String FontName1 = "Arial";
String FontName2 = "Times New Roman";

ArialNormal = PdfFont.CreatePdfFont(Document, FontName1, FontStyle.Regular, true);
ArialBold = PdfFont.CreatePdfFont(Document, FontName1, FontStyle.Bold, true);
ArialItalic = PdfFont.CreatePdfFont(Document, FontName1, FontStyle.Italic, true);
ArialBoldItalic = PdfFont.CreatePdfFont(Document, FontName1, FontStyle.Bold | FontStyle.Italic, true);
TimesNormal = PdfFont.CreatePdfFont(Document, FontName2, FontStyle.Regular, true);
Comic = PdfFont.CreatePdfFont(Document, "Comic Sans MS", FontStyle.Bold, true);
return;
}
  • 下载PDF文件的以身作则 – 258 KB => 01  
  • 下载C#类库(DLL) – 50.5 KB =>  02
  • 下载演示项目(包蕴DLL) – 546.5 KB  => 03
  • 下载源 – 860.4 KB  => 04

2.8  QR码支持

  从V1.7上马,PDF文件编制器库提供对QQX56码的支撑。该程序扶助多个字符集:数字,字母数字和8位字节。程序不援救汉字字符。Q瑞虎码是图像财富。库将QHighlander代码内容调换为图像。要在文档中显得QCR-V码,供给定义一个财富对象,并将此指标加多到页面的内容。程序自动接纳最好字符集和最棒矩阵大小。顾客必得提供数据字符串和所需的纠错品级。错误考订等第是:L低(7%),M中(15%),Q中中高(25%),H高(30%)。字符集定义为:数字数据(数字0-9)。字母数字(数字0-9,大写字母AZ和多少个其余字符空格$%*


  • 。/:),8位字节数据。程序将围观数据串输入并选择最实用的字符集。即便您的数据足以分为唯有数字或只是字母数字字符的段,您能够创造多个Q翼虎码对象与数据字符串数组。

  使用单个数据字符串创造Q悍马H2代码对象。

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

  只怕,使用数据字符串数组创制QR
Code对象。如若要将数据字符串分成不一致字符集的片段,请使用此方式。

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

  暗许意况下,创立的图像将装有每一种Q中华V码模块4×4像素和图像周围十六个像素的安静空间。要遮盖默认使用:

QRCode.SetModuleSize(Int32 ModuleSize, Int32 QuietZone);

  绘制QR码调用DrawQRCode方法PdfContents。这QRCode是一个长方形。宽度和惊人一致。

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

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

 首先 Pdf File Writer
 是贰个很好用的PDF文件生成工具,由于小编对普通话编码素不相识,涉及到中文字体的输出会产生万分,经过笔者数次测量检验,仿宋、黑体字体的汉语还比较好,不轻便生出非常。草书测验很频仍都未有得逞,包罗咨询了小编自身也从没获得满足的答案:

2.16  重新排序页面

  在PdfFileWriter日增新的网页页面列表的最终。假诺要将页面从脚下职分移动到新职分,请使用以下办法。

Document.MovePage(Int32 SourceIndex, Int32 DestinationIndex);

 
该文由小居职业室原创(QQ:2482052910)翻译并提供解答扶助,原著地址:Pdf
File Writer
普通话应用(PDF文件编写器C#类库)
http://www.cnblogs.com/wjs5943283/p/6528853.html

  PDF文件编写制定器库援助您计算机上安装的非常多字体。独一的两样是器械字体。补助的字体遵循OpenType字体标准。有关详细信息,请参阅[Microsoft字体

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

  Unicode调控字符。Unicode调整字符用于调整文件的分解或出示,但那个字符自辛卯有视觉或空中表示。PDF文件编写器不识别那些字符。库假定每个字符都以呈现字符。它们将呈现为未定义字符。

从右到左语言。平时,文本字符串中的字符的逐个是人人读取它们的依次。由于库从左到右绘制,文本将被向后写。该ReverseString方法颠倒字符顺序。借使文本独有从右到左的字符,那将一蹴即至难点。假若文本是从右到左,从左到右,数字和局地字符如括号()[]
<>
{混合,它不会产生所需的结果。另二个限量是TextBox类不可能打断长到右文本到行。

   
 在一些语言中,两个或多少个字符的系列被整合在一同以体现叁个字形。您的软件能够辨认那一个种类并将其替换为科学的字形。

虚线圆。要是您看看Glyph
Metrics显示屏的Glyph列,你能够观望一些glyphs有一个小的虚线圆圈(即字符代码2364和2367)。这么些字符是字符种类的一有些。不出示虚线圆圈。若是向上宽度为零,边界框在Y轴的左臂,则此字形将为drawen
ok。它将显得在上贰个字符的最上部。倘诺发展宽度不为零,则此字形应呈现在上一个字符以前。你的软件能够由此颠倒那四个字符来落成。

5.  其余开源软件由这些笔者

  • Android Color Selector for Programmers是GooglePlay上的无偿应用软件。
  • Google Play应用内买下账单演示应用本文是GooglePlay应用内付账版本3的一个演示。

3.3  平铺格局财富

  该DefineTilingPatternResource办法为示范区域定义背景图案能源。形式是在樱桃红色背景黄绿的单词“PdfFileWriter”。该格局由两行再一次第一字组合。这两条线偏移半字长度。

  即便你想找到风趣的情势,在互联网络追寻公司的目录像作floor或wall
tiles

//// Define Tiling Pattern Resource
private void DefineTilingPatternResource()
{
// create empty tiling pattern
WaterMark = new PdfTilingPattern(Document);

// the pattern will be PdfFileWriter layed out in brick pattern
String Mark = "PdfFileWriter";

// text width and height for Arial bold size 18 points
Double FontSize = 18.0;
Double TextWidth = ArialBold.TextWidth(FontSize, Mark);
Double TextHeight = ArialBold.LineSpacing(FontSize);

// text base line
Double BaseLine = ArialBold.DescentPlusLeading(FontSize);

// the overall pattern box (we add text height value as left and right text margin)
Double BoxWidth = TextWidth + 2 * TextHeight;
Double BoxHeight = 4 * TextHeight;
WaterMark.SetTileBox(BoxWidth, BoxHeight);

// save graphics state
WaterMark.SaveGraphicsState();

// fill the pattern box with background light blue color
WaterMark.SetColorNonStroking(Color.FromArgb(230, 244, 255));
WaterMark.DrawRectangle(0, 0, BoxWidth, BoxHeight, PaintOp.Fill);

// set fill color for water mark text to white
WaterMark.SetColorNonStroking(Color.White);

// draw PdfFileWriter at the bottom center of the box
WaterMark.DrawText(ArialBold, FontSize, BoxWidth / 2, BaseLine, TextJustify.Center, Mark);

// adjust base line upward by half height
BaseLine += BoxHeight / 2;

// draw the right half of PdfFileWriter shifted left by half width
WaterMark.DrawText(ArialBold, FontSize, 0.0, BaseLine, TextJustify.Center, Mark);

// draw the left half of PdfFileWriter shifted right by half width
WaterMark.DrawText(ArialBold, FontSize, BoxWidth, BaseLine, TextJustify.Center, Mark);

// restore graphics state
WaterMark.RestoreGraphicsState();
return;}

3.5  画两条标题

// Draw heading
private void DrawTwoLinesOfHeading()
{
// page heading
// Arguments: Font: ArialBold, size: 36 points, Position: X = 4.25", Y = 9.5"
// Text Justify: Center (text center will be at X position)
// Stoking color: R=128, G=0, B=255 (text outline)
// Nonstroking color: R=255, G=0, B=128 (text body)
Contents.DrawText(Comic, 40.0, 4.25, 9.25, TextJustify.Center, 0.02, Color.FromArgb(128, 0, 255), Color.FromArgb(255, 0, 128), "PDF FILE WRITER");

// save graphics state
Contents.SaveGraphicsState();

// change nonstroking (fill) color to purple
Contents.SetColorNonStroking(Color.Purple);

// Draw second line of heading text
// arguments: Handwriting font, Font size 30 point, Position X=4.25", Y=9.0"
// Text Justify: Center (text center will be at X position)
Contents.DrawText(Comic, 30.0, 4.25, 8.75, TextJustify.Center, "Example");

// restore graphics sate (non stroking color will be restored to default)
Contents.RestoreGraphicsState();
return;
}

2.19  内部存款和储蓄器调节

  在营造文书档案时,PDF文件编写器会积存创造PDF文件所需的持有音信。音信保存在内部存款和储蓄器中,除了图像和停放文件。图像和松手文件在注明时会自动写入输出文件。对于丰盛大的文档,使用的内部存款和储蓄器不断巩固。库提供方式(CommitToPdfFile)将内容信息写入输出文件,并调用垃圾搜聚器释放未选取的内部存款和储蓄器。该GC.Collect主意供给时日来实施。假使实施时间是难点,请GCCollect每几页设置叁回参数。换句话说,CommitToPdfFile非得针对每一种页面运维,但每几页清理叁次。实践提交后,不能够增添任何新闻。PdfTable旋即一行不可能兼容在最近页面包车型地铁底层时自动运维新页面。该PdfTable班有七个分子CommitToPdfFile,并CommitGCCollectFreq再正是表被营造以决定内存的行使状态。本PdfChart类生成从.NET类图的图像。该DrawChart方法PdfContents将实施提交。恐怕,您能够调用的CommitToPdfFile方法PdfChart

// PdfContents, PdfXObject and PdfTilingPattern
// Commit the contents to output file.
// Once committed, this PdfContents cannot be used.
// The argument is GCCollect
Contents.CommitToPdfFile(true); 

2.20  Windows Presentation Foundation WPF

  绘制WPF图形是叁个七个步骤的进程。

  • 步骤1:创建DrawWPFPath对象。输入参数是门路和Y轴方向。
  • 步骤2:可挑选经过调用八种SetBrush艺术之一或调用UseCurrentBrush方法增多画笔。
  • 步骤3:可挑选经过调用二种SetPen艺术之一或调用UseCurrentPen方法增添笔。
  • 步骤4:通过调用绘制图形对象PdfContents.DrawWPFPath

  如果System.Windows.Media援用不可用(即您的应用程序是Windows窗体),则须要向应用程序增多PresentationCoreWindowsBase程序集。

  Example8 OtherExample.cs和Example8f 中提交了使用WPF图形类绘制的编程示例。

  假诺未定义画笔和笔,则绘制图形将作为剪辑路线。

  下边你会发觉更加多的细节怎么着利用DrawWPFPath类WPF应用程序和别的应用程序。

DrawWPFPath构造函数接受三个参数:路线和Y轴方向。路线是字符串或System.Windows.Media.PathGeometry。文本字符串在路子标志语法中定义。路线几何类在Path吉优metry类中实行了描述。当为WPF蒙受定义路线时,Y轴方向为向下。Y轴适用于PDF情状。

注意世界任何地方的程序员使用除了句点之外的数字小数分隔符。表示路径的文本字符串输入必须完全按照路径标记语法中的定义来构造。具有分数的小数必须使用周期,而不考虑世界区域。如果在x和y值之间使用可选分隔符,它必须是逗号。如果字符串是由另一个应用程序生成的,请确保使用PathGeometry.ToString(System.Globalization.CultureInfo.InvariantCulture)调用PathGeometry ToString。换句话说,Microsoft的PathGeometry.Parse方法将无法读取意大利产生的文本字符串,例如,通过PathGeometry.ToString方法,而不将IFormatProvider设置为InvariantCulture。

有两种办法来为WPF应用程序定义画刷。全部这一个方法将相同的时候设置画笔不折射率。

  • System.Windows.Media.SolidColorBrush请参阅SolidColorBrush类
  • System.Windows.Media.LinearGradientBrush请参阅LinearGradientBrush类
  • System.Windows.Media.RadialGradientBrush请参阅RadialGradientBrush类

有四种艺术为持有应用程序定义画笔。全体这个艺术将同有的时候候设置画笔不光滑度。

  • 将画笔设置为System.Drawing.Color
  • 将画笔设置为 PdfAxialShading
  • 将画笔设置为 PdfRadialShading
  • 将画笔设置为 PdfTilingPattern
  • 将画笔设置为 UseCurrentBrush

万一你想让DrawWPFPath类将画笔设置为如今选用的画笔,调用UseCurrentBrush方法。

有一种方式为WPF应用程序定义笔。调用SetPen方法与System.Windows.Media.Pen类(请参阅 Pen类)。注意,Pen.Brush品质必需是SolidColorBrush。笔类包涵绘制线所需的有所信息,比方颜色和宽度。

有一种方式为有着应用程序定义笔。调用SetPenSystem.Drawing.Color参数。color参数定义了阿尔法,红,绿和鲜青分量。要设置任何笔个性,请设置以下任何或任何性质和情势:

  • SetPenWidth
  • DashArray
  • DashPhase
  • LineCap
  • LineJoin
  • MiterLimit

只要您愿意DrawWPFPath类将笔设置为近些日子增选的调子用UseCurrentPen方法。

一旦DrawWPFPath类设置了绘图路线所需的具有新闻,调用PdfContents.DrawWPFPath格局。DrawWPFPath类基于路线边界框和制图矩形和对齐,计算将输入路径调换为绘图矩形所需的转移矩阵。对齐零(暗许值)将拉伸路线以符合绘图区域。全体其余对齐值依据参数枚举值在绘图区域中一定路线。

public void DrawWPFPath(
    DrawWPFPath Path,   // path to be drawn
    double OriginX,     // Drawing rectangle in user units left side
    double OriginY,     // Drawing rectangle in user units bottom side
    double Width,       // Drawing rectangle in user units width
    double Height,      // Drawing rectangle in user units height
                            // path alignment within drawing rectangle
                            // Alignment=0 means the path will be stretched 
                            // in either horizontal or vertical direction
                            // to fit the drawing rectangle
    ContentAlignment Alignment = 0)

7.  执照

  本文以及另外有关的源代码和文书均已获得代码项目开放许可证(CPOL)许可

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

2.3  语言援助,字体和字符集

图片 2

3.10  绘制心

  该DrawHeart情势通过定义中央线的两端来突显心形。类的DrawHeart方法PdfContents是绘制产生路线的五个对称贝塞尔曲线的独具匠心情况。

// Draw heart
private void DrawHeart()
{
// save graphics state
Contents.SaveGraphicsState();

// draw heart
// The first argument are the coordinates of the centerline of the heart shape.
// The DrawHeart is a special case of DrawDoubleBezierPath method.
Contents.SetColorNonStroking(Color.HotPink);
Contents.DrawHeart(new LineD(new PointD(4.98, 5.1), new PointD(4.98, 6.0)), PaintOp.CloseFillStroke);

// restore graphics state
Contents.RestoreGraphicsState();
return;
}

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();

              (版本1.19.1增强版)

2.18  文书档案音信字典

  PDF文书档案音讯字典由PDF阅读器在文书档案属性的“说明”选项卡中显示。消息满含:标题,小编,主旨,关键字,创造的日子和岁月,修改的日子和时间,生成文书的应用程序,PDF生成器。

  在应用程序中蕴藏文书档案音讯的步骤如下:

PdfInfo Info = new PdfInfo(Document);
Info.Title("Article Example");
Info.Author("Uzi Granot Granotech Limited");
Info.Keywords("PDF, .NET, C#, Library, Document Creator");
Info.Subject("PDF File Writer C# Class Library (Version 1.15.0)");

  当PdfInfo指标被创造,多少个附加的字段被增加到词典中。您能够在代码中覆盖全部这几个。

// set creation and modify dates
DateTime LocalTime = DateTime.Now;
Info.CreationDate(LocalTime);
Info.ModDate(LocalTime);

// set creator and producer
Info.Creator("PdfFileWriter C# Class Library Version " + PdfDocument.RevisionNumber);
Info.Producer("PdfFileWriter C# Class Library Version " + PdfDocument.RevisionNumber);

  示例生成的PDF文件:

2.17  PDF文书档案输出

  PdfFileWriter创造PDF文书档案。主类PdfDocument构造函数给您多少个选项来保存文书档案。第一种选拔是将PDF文件保留到磁盘文件。在这种状态下,你提供了叁个文书名。在文件创造截止时调用PdfDocument.CreateFile。

  此格局将PDF写入文件并关闭文件。

// create main class
PdfDocument Document = new PdfDocument(PaperType.Letter, false, UnitOfMeasure.Inch, FileName);

// terminate
Document.CreateFile();

  第4个选拔是流。您创造一个流,内部存款和储蓄器流或文件流,并将该流作为参数字传送递给PdfDocument构造函数。实行CreateFile方法后,您的流包罗PDF文档。依据应用程序,从流中提取文书档案。您必须在应用程序中关闭流。

// create memory stream
MemoryStream PdfStream = new MemoryStream();

// create main class
PdfDocument Document = new PdfDocument(PaperType.Letter, false, UnitOfMeasure.Inch, PdfStream);

// terminate
Document.CreateFile();

// save the memory stream to a file
FileStream FS = new FileStream(FileName, FileMode.Create);
PdfStream.WriteTo(FS);
PdfStream.Close();
FS.Close();

 

    图片 3

3.11  绘制饼图

  该DrawChart办法是概念图表并将其绘制到PDF文书档案的言传身教。

/ Draw pie chart
private void DrawChart()
{
// save graphics state
Contents.SaveGraphicsState();

// create chart
Chart PieChart = PdfChart.CreateChart(Document, 1.8, 1.5, 300.0);

// create PdfChart object with Chart object
PdfChart PiePdfChart = new PdfChart(Document, PieChart);

// make sure we have good quality image
PieChart.AntiAliasing = AntiAliasingStyles.All;

// set colors
PieChart.BackColor = Color.FromArgb(220, 220, 255);
PieChart.Palette = ChartColorPalette.BrightPastel;

// default font
Font DefaultFont = MyPdfChart.CreateFont("Verdana", FontStyle.Regular, 0.05, FontSizeUnit.UserUnit);
Font TitleFont = MyPdfChart.CreateFont("Verdana", FontStyle.Bold, 0.07, FontSizeUnit.UserUnit);

// title (font size is 0.25 inches)
Title Title1 = new Title("Pie Chart Example", Docking.Top, TitleFont, Color.Purple);
PieChart.Titles.Add(Title1);

// legend
Legend Legend1 = new Legend();
PieChart.Legends.Add(Legend1);
Legend1.BackColor = Color.FromArgb(230, 230, 255);
Legend1.Docking = Docking.Bottom;
Legend1.Font = DefaultFont;

// chart area
ChartArea ChartArea1 = new ChartArea();
PieChart.ChartAreas.Add(ChartArea1);

// chart area background color
ChartArea1.BackColor = Color.FromArgb(255, 200, 255);

// series 1
Series Series1 = new Series();
PieChart.Series.Add(Series1);
Series1.ChartType = SeriesChartType.Pie;
Series1.Font = DefaultFont;
Series1.IsValueShownAsLabel = true;
Series1.LabelFormat = "{0} %";

// series values
Series1.Points.Add(22.0);
Series1.Points[0].LegendText = "Apple";
Series1.Points.Add(27.0);
Series1.Points[1].LegendText = "Banana";
Series1.Points.Add(33.0);
Series1.Points[2].LegendText = "Orange";
Series1.Points.Add(18.0);
Series1.Points[3].LegendText = "Grape";

Contents.DrawChart(MyPdfChart, 5.6, 5.0);

// restore graphics state
Contents.RestoreGraphicsState();
return;
}

3.4  画与背景样式的框架

  该DrawFrameAndBackgroundWaterMark办法在全数背景水印图案的演示区域左近绘制框架。情势财富在前边的小节中定义。

 

// Draw frame around example area
private void DrawFrameAndBackgroundWaterMark()
{
// save graphics state
Contents.SaveGraphicsState();

// Draw frame around the page
// Set line width to 0.02"
Contents.SetLineWidth(0.02);

// set frame color dark blue
Contents.SetColorStroking(Color.DarkBlue);

// use water mark tiling pattern to fill the frame
Contents.SetPatternNonStroking(WaterMark);

// rectangle position: x=1.0", y=1.0", width=6.5", height=9.0"
Contents.DrawRectangle(1.0, 1.0, 6.5, 9.0, PaintOp.CloseFillStroke);

// restore graphics sate
Contents.RestoreGraphicsState();

// draw article name under the frame
// Note: the \u00a4 is character 164 that was substituted during Font resource definition
// this character is a solid circle it is normally unicode 9679 or \u25cf in the Arial family
Contents.DrawText(ArialNormal, 9.0, 1.1, 0.85, "PdfFileWriter \u25cf PDF File Writer C# Class Library \u25cf Author: Uzi Granot");

// draw web link to the article
Contents.DrawWebLink(Page, ArialNormal, 9.0, 7.4, 0.85, TextJustify.Right, DrawStyle.Underline, Color.Blue, "Click to view article",
    "http://www.codeproject.com/Articles/570682/PDF-File-Writer-Csharp-Class-Library-Version");
return;
}

2.23  安装

  集成PdfFileWriter到您的应用程序须要以下步骤。PdfFileWriter.dll在开垦区域中安装附Gavin件。运转Visual
C#程序并开辟你的应用程序。转到应用方案能源管理器,右键单击援用,然后选择丰富援引。

  选取“浏览”选项卡,并将文件系统导航到的位置PdfFileWriter.dll。当您的应用程序公布时,必得富含代码>
PdfFileWriter.dll。

  源代码文书档案作为协理文件提供PdfFileWriter.chm。该公文由Sandcastle生成。结果看起来像Microsoft文书档案页。

  倘若要拜候PdfFileWriter项目标源代码,请PdfFileWriter在开辟区域中设置项目。该PdfFileWriter.dll会在PdfFileWriter\bin\Release目录中。

  使用此库将以下语句加多到全数源模块。

  using PdfFileWriter;

假使你筹算选拔图表,您须求增多引用:System.Windows.Forms.Visualization。在各类源模块使用Chart您要求丰裕

  using System.Windows.Forms.DataVisualization.Charting; 

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()方法有三个重载变体:

// 基本的
public PdfBookmark AddBookmark
    (
    String        Title,        // bookmark title
    PdfPage        Page,        // bookmark page
    Double        YPos,        // bookmark vertical position relative to bottom left corner of the page
    Boolean        OpenEntries    // true is display children. false hide children
    )

//标题颜色和样式
public PdfBookmark AddBookmark
    (
    String        Title,        // bookmark title
    PdfPage        Page,        // bookmark page
    Double        YPos,        // bookmark vertical position relative to bottom left corner of the page
    Color        Paint,        // bookmark color. Coloe.Empty is display title in default color
    TextStyle        TextStyle,    // bookmark text style: normal, bold, italic, bold-italic
    Boolean        OpenEntries    // true is display children. false hide children
    )

// PointX和缩放
public PdfBookmark AddBookmark
    (
    String        Title,        // bookmark title
    PdfPage        Page,        // bookmark page
    Double        XPos,        // bookmark horizontal position relative to bottom left corner of the page
    Double        YPos,        // bookmark vertical position relative to bottom left corner of the page
    Double        Zoom,        // Zoom factor. 1.0 is 100%. 0.0 is ignore zoom.
    Boolean        OpenEntries    // true is display children. false hide children
    )

// 完整
public PdfBookmark AddBookmark
    (
    String        Title,        // bookmark title
    PdfPage        Page,        // bookmark page
    Double        XPos,        // bookmark horizontal position relative to bottom left corner of the page
    Double        YPos,        // bookmark vertical position relative to bottom left corner of the page
    Double        Zoom,        // Zoom factor. 1.0 is 100%. 0.0 is ignore zoom.
    Color        Paint,        // bookmark color. Coloe.Empty is display title in default color
    TextStyle        TextStyle,    // bookmark text style: normal, bold, italic, bold-italic
    Boolean        OpenEntries    // true is display children. false hide children
    )

PdfBookmark类暴光贰个主意GetChild。您能够透过调用GetChild一个或两个整数参数来博取别的书签。每一种参数是等级中子地点的零基本参数。举例GetChild(2)率先级的第三项。GetChild(2, 3)是第八个第拔尖档案的次序的第多个第二级档案的次序。

3.7  绘制条形码

  该DrawBarcode方法是绘制多少个条形码EAN-13和Code-128的躬行实践

  该DrawTwoLinesOfHeading措施在页面宗旨绘制三个标题线。第一行是用大纲特殊效果绘制文本。

// Draw Barcode
private void DrawBarcode()
{
// save graphics state
Contents.SaveGraphicsState();

BarcodeEAN13 Barcode1 = new BarcodeEAN13("1234567890128");
Contents.DrawBarcode(1.3, 7.05, 0.012, 0.75, Barcode1, ArialNormal, 8.0);

PdfQRCode QRCode = new PdfQRCode(Document, "http://www.codeproject.com/Articles/570682/PDF-File-Writer-Csharp-Class-Library-Version", ErrorCorrection.M);
Contents.DrawQRCode(QRCode, 6.0, 6.8, 1.2);

// define a web link area coinciding with the qr code
Page.AddWebLink(6.0, 6.8, 7.2, 8.0, "http://www.codeproject.com/Articles/570682/PDF-File-Writer-Csharp-Class-Library-Version");

// restore graphics sate
Contents.RestoreGraphicsState();
return;
}

4.  仿照效法文献

  • Adobe
    PDF文件标准文书档案可从Adobe网址获得:“PDF参考,第六版,Adobe便携式文书档案格式版本1.7,贰零零柒年3月”。
  • 有关OpenType字体规范的消息方可在Microsoft Typography – OpenType
    Specification找到。
  • “PDF文件分析器与C#分析类”一文中提供了与PDF
    Deflate压缩类相称的解压缩类的源。
  • 减去和平消除压缩类的原始源代码取自Uzi
    Granot在CodeProject.com网址上刊出的“使用C#压缩/解压缩类管理标准ZIP文件”一文。

相关文章