PDFSharp - Graphics

Graphics - PDFsharp and MigraDoc Wiki

所有的 Graphics 类型都设计成模仿来自 System.Drawing 命名空间中的 GDI+ 类型。类型的名称也类似,例如:XColor, XPen, XBrush, XGraphics, XRect, XMatrix, XImage 等等。它们的作用也与 GDI+ 中类似。所有的名称前面都有一个 X 前缀,使得它们在 GDI+ 和 WPF 类型中都可以使用相同的代码。

在 PDFSharp 中的 X 前缀的类型与 System.Drawing 中的类型存在如下区别:

  • 所有的浮点类型都是 double 类型,以防止在 System.Drawing 中乏味的 float 类型转换
  • X 前缀的类型和功能仅仅在 PDFSharp 中存在

在 WPF 版本的 PDFSharp 中,X 前缀的类型与 GDI+ 版本有着非常类似的接口,内部却基于 WPF 来实现。

1. Graphics 概念

XGraphics 类型表示绘图界面的接口。使用如下代码可以在 PDF 页面上绘图。

XGraphics gfx = XGraphics.FromPdfPage(page);

如果页面上已经存在内容 ( 例如页面来自已经存在的 PDF 文件 ),你可以选择使用 XGraphicsPdfPageOptions 来决定新绘制的对象是位于现有内容的上层还是下层。

在 GDI+ 版本的 PDFSharp 上,XGraphics 对象还可以在 System.Drawing.Graphics 对象上绘制。

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

在 WPF 版本上,XGraphics 对象也可以在 System.Windows.Media.DrawingContext 对象上绘制。

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

这使得使用 PDFSharp 有可能使用同样的函数在窗口、打印机、位图、或者 PDF 页面上进行绘制。

2. Coordinates 坐标系统

当前的 PDFSharp 实现只有一种图形布局系统。原点位于左上角,X 向右增长,Y 向下增长。测量的单位总是使用 point ( 1/72 英寸)。

这样并没有实际的局限,因为使用转换矩阵可以转换原点位置,或者缩放比例,你可以在 Transformation 中看到它的使用。使用 XUnit 类型,你可以在 point、英寸、厘米和毫米之间进行转换。

3. 直线和曲线

类型 XGraphics 提供如下的函数绘制直线和曲线:

  • DrawLine
  • DrawLines
  • DrawBezier
  • DrawBeziers
  • DrawCurve
  • DrawArc

每种函数都使用 XPen 来定义如何绘制.

4. 图形 Shapes

类型 XGraphics 提供如下函数绘制预先定义的图形:

  • DrawRectangle
  • DrawRectangles
  • DrawRoundedRectangle
  • DrawEllipse
  • DrawPolygon
  • DrawPie
  • DrawClosedCurve

每个函数可以使用 XPen (仅限笔触),或者画刷 XBrush (仅限填充),或者同时使用两者。(笔触和填充)。

5. Graphical 路径

类型 XGraphicalPath 表示绘图路径。类型 XGraphics 提供如下函数绘制路径:

  • DrawPath

该函数可以使用 XPen (仅限笔触),或者画刷 XBrush (仅限填充),或者同时使用两者。(笔触和填充)。

6. Fonts 字体

当前的 PDFSharp 实现支持 TrueType 字体和使用 TrueType 轮廓的 OpenType 字体,也就是说,使用 Microsoft Windows 的字体。

使用 XFont 类型来创建字体

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

类型 XPdfFontOptions 设置 PDF 特定的设置:

  • 使用 ANSI 还是 Unicode 编码
  • 在 PDF 文档内部,使用嵌入字体,还是使用字体的子集

7. Text 文本

类型 XGraphics 提供如下函数来使用文本:

  • MeasureString
  • DrawString

函数 DrawString 拥有一个 XStringFormat 参数,可以用来进行文本对齐。 DrawString 函数是一个基本函数,没有用于包装的功能。使用 MigraDoc foundation 可以在段落中使用各种字体、尺寸对文本进行格式化等等。示例见:Mix MigraDoc and PDFsharp

8. Images 图片

类型 XGraphics 提供如下函数绘制图片:

  • DrawImage

PDFsharp 支持如下图片格式:

  • BMP
  • GIF (with optional transparency)
  • PNG (with optional transparency)
  • JPEG
  • TIFF (with optional transparency)

9. Graphics State

类型 XGraphics 提供如下函数来保存和恢复当前的绘制状态:

  • Save
  • Restore
  • BeginContainer
  • EndContainer

在执行转换和剪切功能之前,使用这些函数来保存绘制状态,并在以后恢复之前的转换和剪切状态。使用 BeginContainer 函数,你可以指定两个额外的矩形来为你计算映射,例如将第一个矩形映射到第二个矩形。这可以使得易于定义新的坐标系统。

10. Transformation

类型 XGraphics 提供如下函数进行坐标系统转换:

  • TranslateTransform
  • ScaleTransform
  • RotateTransform
  • MultiplyTransform
  • AddTransform

通过将其与 XMatrix 对象相乘,转换将立即在当前绘图上下文生效。使用 XMatrixOrder 来选择该转换时追加还是插入到当前转换。

使用 Save / Restore 来保持当前的转换。

11. Clipping

类型 XGraphics 提供如下函数来限制当前的剪切区域:

  • IntersectClip

在剪切区域之外的文本和图形将不会显示。

使用 Save / Restore 来保持当前的转换。

12. Miscellaneous 杂项

类型 XGraphics 提供如下杂项函数:

  • WriteComment
  • Internals

原文地址:Graphics - PDFsharp and MigraDoc Wiki

PDFSharp - Graphics 绘制接口的更多相关文章

  1. WinForms 使用Graphics绘制字体阴影

    C#以两种方法实现文字阴影效果,同时还实现了简单的动画效果: 一种是对文本使用去锯齿的边缘处理,在两个不同的位置绘制文本,形成阴影: 另一个是以阴影为线条,构造影线画刷,先画背景再画前景,使用grap ...

  2. 【转】WinForms 使用Graphics绘制字体阴影

    转自:http://www.cnblogs.com/LonelyShadow/p/3893743.html C#以两种方法实现文字阴影效果,同时还实现了简单的动画效果: 一种是对文本使用去锯齿的边缘处 ...

  3. iOS圆角view的Swift实现(利用Core Graphics绘制)

    iOS圆角view的Swift实现(利用Core Graphics绘制) 因为app的列表用用到了圆形图片的头像,所以去探究并思考了一下这个问题.首先这个问题有两个方向的解决方案: 把图片弄成圆形的. ...

  4. 解决C# WinForm Graphics绘制闪烁问题

    不直接使用form的CreateGraphics创建Graphics进行绘制,可以先在Form上面放一个需要大小的PictureBox,再创建一个同大小的Bitmap,将这个Bitmap设置为Pict ...

  5. Graphics绘制类及打印机设置相关

    Graphics 有两个多个方法 这里面介绍3个: 1.Graphics.drawString():绘制.画字符串........... e.Graphics.DrawString("新乡市 ...

  6. Graphics绘制图形

    List<double> labels = form.channelData2[kp.Key]; List<double> listY = kp.Value; int labe ...

  7. OpenGL7-1-快速绘制接口(使用高效的函数接口进行绘制)

    代码下载 #include "CELLWinApp.hpp"#include <gl/GLU.h>#include <assert.h>#include & ...

  8. 用Html5制作的一款数学教学程序Function Graphics(绘制函数图的程序)

    最近我不仅对游戏开发感兴趣,还对函数图感兴趣,特此我开发了这个程序.以下是一些介绍和下载演示地址,喜欢的朋友可以看看: 一,产品名片 产品名:Function Graphics 版本: 0.1 开发者 ...

  9. 像Linq一样来使用Graphics

    Linq的链式编程用起来总是那样畅快淋漓,可惜在C#中并不是每时每刻都能有这么畅快的感觉,其中使用Graphics的时候就是,每次用Graphics绘制大量图形时尤其如此.GDI+的API功能很强大, ...

  10. Android中贝塞尔曲线的绘制方法

    贝塞尔曲线,很多人可能不太了解,什么叫做贝塞尔曲线呢?这里先做一下简单介绍:贝塞尔曲线也可以叫做贝济埃曲线或者贝兹曲线,它由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋.一般的矢量图形软件常 ...

随机推荐

  1. 【赵渝强老师】Docker Swarm集群的数据持久化

    如果Docker Swarm集群中运行了mysql.nginx等服务,这些服务的数据如果没有挂载到宿主机中,那么容器一旦停止运行,那就意味着数据丢失. 有什么方法可以解决swarm集群中运行的服务能够 ...

  2. initrd&init进程

    initrd的全名是 init ramdisk,是一个启动时存在于内存的文件系统. kernal 到 initrd的流程 在GRUB加载kernel时,kernel会先在内存中制造一个rootfs当做 ...

  3. vue前端开发仿钉图系列(2)左侧图层列表的开发详解

    项目开发前还是特别说明一下组件库的重要性,谢谢饿了么团队分享的element组件库,大大节省了页面的开发成本.左侧图层列表核心功能有1.根据图层类型展示点线面2.开关控制右侧地图上点线面的展示和隐藏3 ...

  4. 权限控制 vue3

  5. select语句

    SELECT语句可以从表中选择数据 SELECT <列名1>,<列名2> as "aaa" FROM <表名>; 查询两列数据SELECT * ...

  6. 开源的口袋妖怪自走棋「GitHub 热点速览」

    作为一名 90 后,我对口袋妖怪(宝可梦)游戏有着特殊的感情,满满的都是回忆.如果你也喜欢宝可梦主题的游戏,这款开源的宝可梦自走棋游戏 pokemonAutoChess 一定要试试,它采用战棋(自走棋 ...

  7. SaaS架构:应用服务、应用结构设计

    大家好,我是汤师爷~ 应用架构设计通常包括以下步骤: 根据业务架构,将业务需求转化为IT系统,识别核心应用服务. 划分应用结构,设计应用结构与业务流程.数据之间的关系. 设计应用结构之间的交互和集成关 ...

  8. WEB渗透01_渗透测试方法论

    前言 这个系列是根据一个网络安全教程学习的笔记. 1 渗透测试 渗透测试,是为了证明网络防御按照预期计划正常运行而提供的一种机制.不妨假设,你的公司定期更新安全策略和程序,时时给系统打补丁,并采用了漏 ...

  9. 几张图带你了解.NET String

    String 字符串作为一种特殊的引用类型,是迄今为止.NET程序中使用最多的类型.可以说是万物皆可string 因此在分析dump的时候,大量字符串对象是很常见的现象 string的不可变性 str ...

  10. C221110C. SolarPea与网格

    C221110C. SolarPea与网格 是怎么想到dp定义的? 思考下面这个情景: 如果一个人在 \(x\), 另一个人在 \(y \ (x \lt y)\), 那么在 \(x\) 的人会把 \( ...