PDFsharp使用介绍(一)

0、说明

  项目组开发的应用系统已经使用了多年,我在其中负责使用C#的GDI+功能绘制特定的卡片格式并支持在线编辑。用户在使用过程中提出,他们希望将应用系统中使用GDI+绘制的卡片格式和内容变成pdf文档,然后在应用系统外使用。之前采用的是偷懒的方式,因为用户电脑上都装了pdf打印机,所以建议他们直接在应用系统中将卡片打印到pdf打印机上,这样就生成了pdf格式的文档。但是他们有批量输出卡片的需求,还想按一定的顺序把多个卡片的内容合并到一个pdf文档中,这时用pdf打印机生成pdf文档就满足不了需求了。
  通过在网上搜索,最终确定开源C#类库PDFsharp能够满足要求。

1、PDFsharp介绍

  PDFsharp是个.net类库,用于在C#、VB.NET等.net编程语言中以编程方式操作Adobe PDF文档。PDFsharp为PDF文档中的每种对象都创建了类,因此在程序中不需要直接操作对象ID或者引用。
  PDFsharp的特点有:

  • 使用任意.net 编程语言实时创建pdf文档;
  • 可以从不同数据源中导入数据,例如XML文件或其它数据接口(任意可在.net中使用的数据源);
  • 在pdf页面中使用的绘图代码同样适用于窗口或打印机;
  • 能够编辑、合并、拆分现有pdf文档;
  • 具有透明度的图像(彩色掩模、单色掩模、α掩模);
  • 使用C#语言重写PDFsharp代码;
  • PDFsharp中的图形类与.net很匹配。
2、PDFsharp绘图类介绍

  PDFsharp中的绘图相关类与.net框架中System.Drawing命名空间下的GDI+绘图类类似。PDFsharp中的绘图类包括XColor、XPen、XBrush、XGraphics、XRect、XMatrix、XImage等,这样命名的目的是为了仿效GDI+中的类名,之所以所有的类名前都加上X的前缀,是在同一份代码中出现GDI+或WPF绘图类时保持类名不重复。

绘图上下文

  PDFsharp中的XGraphics类表示抽象的绘图表面,使用下列代码就可以在PDF文件页面上绘图:

XGraphics gfx = XGraphics.FromPdfPage(page);

  如果PDF文档中已经有内容,可以使用XGraphicsPdfPageOptions 参数设置新绘制的内容在已有内容之上还是之下。
  在GDI版本的PDFsharp中使用XGraphics对象还可以在System.Drawing.Graphics对象上绘图:

XGraphics gfx = XGraphics.FromGraphics(graphics, size);

  在WPF版本的PDFsharp中使用XGraphics对象可以在System.Windows.Media.DrawingContext 对象上绘图:

XGraphics gfx = XGraphics.FromDrawingContext(drawingContext, size);

  完全有可能使用相同的函数在窗口、打印机或PDF页面上绘图。

坐标系

  当前版本的PDFsharp只有一种图形上下文布局,坐标原点在左上角,坐标轴方向类似于下图所示。默认的计量单位是点(1/72英寸)。这样其实限制不大,因为可以使用变换矩阵来进行平移或者缩放,也可以使用XUnit在点、 英寸、厘米和毫米之间切换。
PDFsharp使用介绍(一)_第1张图片

绘制直线和曲线

  XGraphics类中提供下列函数绘制直线和曲线:

  • DrawLine
  • DrawLines
  • DrawBezier
  • DrawBeziers
  • DrawCurve
  • DrawArc
      上述函数都需要使用XPen参数来设置如何绘制直线或曲线。
绘制形状

  XGraphics类中提供下列函数绘制预先定义好的形状:

  • DrawRectangle
  • DrawRectangles
  • DrawRoundedRectangle
  • DrawEllipse
  • DrawPolygon
  • DrawPie
  • DrawClosedCurve
      上述函数都需要使用XPen参数或XBrush参数来绘制或者填充形状。
绘图路径

  XGraphicalPath类表示一个绘图路径,类似于System.Drawing中的GraphicalPath类。XGraphics类中提供下列函数绘制绘图路径:

  • DrawPath
      上述函数都需要使用XPen参数或XBrush参数来绘制或者填充路径。
字体

  当前版本的PDFsharp支持TrueType字体和OpenType字体,也即支持Microsoft Windows中的常见字体。使用XFont类创建字体对象:

XFont font = new XFont("Verdana", 12, XFontStyle.Italic)

  使用XPdfFontOptions进行PDF的字体设置:

  • 采用 ANSI 或Unicode编码;
  • 在PDF文档中嵌入字体或其子集。
文本

  XGraphics类中提供下列文本处理函数:

  • MeasureString
  • DrawString

      DrawString函数使用XStringFormat参数设置文本对齐方式。

图形

  XGraphics类中提供下列函数绘制图形:

  • DrawImage

  PDFsharp支持下列图形格式:

  • BMP
  • GIF
  • PNG
  • JPEG
  • TIFF
绘图状态

  XGraphics类中提供下列函数保存和还原当前绘图状态:

  • Save
  • Restore
  • BeginContainer
  • EndContainer

  在做图形变换或区域剪切之前使用上述函数保存绘图状态,并在处理完成后还原到图形变换或区域剪切之前的绘图状态。

坐标系变换

  XGraphics类中提供下列函数进行坐标系变换:

  • TranslateTransform
  • ScaleTransform
  • RotateTransform
  • MultiplyTransform
  • AddTransform

  将函数参数与XMatrix相乘,函数会立即作用到当前绘图上下文中。使用XMatrixOrder对象指定变换放在当前变换之前还是之后。使用Save及Restore函数保存当前绘图状态。

剪切

  XGraphics类中提供下列函数控制剪切区域:

  • IntersectClip

  剪切区域之外的文本和图形不可见。使用Save及Restore函数保存当前绘图状态。

其它函数

  XGraphics类中还提供下列函数:

  • WriteComment
  • Internals

  第1、2章中的内容是从参考文献中摘要并翻译的,如果翻译有误,请参考参考文献中的内容。对这些函数的具体参数及用法,也可以参考参考文献。

参考文献:
[1]https://sourceforge.net/p/pdfsharp/wiki/Home/
[2]http://www.pdfsharp.net/wiki/PDFsharpArticles.ashx
[3]http://www.pdfsharp.net/wiki/PDFsharpFirstSteps.ashx
[4]http://www.pdfsharp.net/Features.ashx
[5]http://www.pdfsharp.net/PDFsharpFeatures.ashx
[6]http://www.pdfsharp.net/wiki/Graphics.ashx

你可能感兴趣的:(dotnet编程,PDFsharp)