PdfSharp一款开源的用于创建,操作PDF文档的.Net类库

核心类介绍

  1. PdfDocument:表示一个PDF文档对象,调用save方法保存文档到指定路径。
  2. PdfPage:表示PDF文档中的一页。
  3. XGraphics:表示页面上的绘制对象,所有的页面内容,都可通过此对象绘制。如:DrawString绘制文本内容,DrawLine绘制直线等。
  4. XFont:绘制文本的字体,字体名称只能取C:\Windows\Fonts目录下的ttf字体文件,不能是ttc格式的字体。
  5. XTextFormatter:表示一个简单的文本字体格式,如识别文本的换行符而实现自动换行等内容。

简单demo

这个简单demo,是创建简单PDF的流程

  1. static void PDF()
  2. {
  3. int margin_left_right = 30;//左右边距
  4. int margin_top_bottom = 30;//上下边距
  5. //注册字体
  6. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
  7. //定义文档对象
  8. using (PdfDocument document = new PdfDocument())
  9. {
  10. //新增一页
  11. PdfPage page = document.AddPage();
  12. // 设置纸张大小
  13. page.Size = PageSize.A4;
  14. //创建一个绘图对象(几乎所有的对PDF的操作都是用这个绘制对象来画出来的)
  15. XGraphics gfx = XGraphics.FromPdfPage(page);
  16. //设置字体,创建一个字体对象,画PDF时用的
  17. XFont font = new XFont("华文宋体", 40, XFontStyle.Bold);
  18. //xy的起始点
  19. int cur_x = 0 + margin_left_right;
  20. int cur_y = 0 + margin_top_bottom;
  21. //开始绘制文本
  22. gfx.DrawString("这是一段标题", font, XBrushes.Red, new XRect(cur_x, cur_y, page.Width - 2 * cur_x, 80), XStringFormats.Center);
  23. //保存PDF
  24. document.Save("p.pdf");
  25. }
  26. }

PdfDocument

PdfDocument继承了IDisposable接口,需要释放资源,就用using,所有对这个PDF的操作都写在这里面。
实例化传入参数,可以打开指定pdf。

  1. public PdfDocument();
  2. public PdfDocument(string filename);
  3. public PdfDocument(Stream outputStream);

gfx.DrawString

这个方法是在PDF上绘制文字的。
根据简单demo的例子

  1. //开始绘制文本
  2. gfx.DrawString("这是一段标题", font, XBrushes.Red, new XRect(cur_x, cur_y, page.Width - 2 * cur_x, 80), XStringFormats.Center);

第一个参数:你要写的文字。 第二个参数XFont:字体样式。 第三个参数XBrush:字的颜色。 第四个参数XRect:绘制块的范围,XRect参数:xy坐标的起始点,绘制块的宽度和高度 第五个参数XStringFormat:字符串的样式,居中,靠左……..

创建水印

1.将水印绘制为文本字符串

  1. static void PDF()
  2. {
  3. //注册字体
  4. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
  5. //定义文档对象
  6. using (PdfDocument document = new PdfDocument())
  7. {
  8. //2.新增一页
  9. PdfPage page = document.AddPage();
  10. //设置纸张大小
  11. page.Size = PageSize.A4;
  12. //获取用于在现有内容下绘图的XGRAPHICS对象
  13. XGraphics gfx = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Prepend);
  14. //字体
  15. XFont font = new XFont("华文宋体", 80, XFontStyle.Bold);
  16. // 获取文本的大小(以点为单位)
  17. XSize size = gfx.MeasureString("这是水印", font);
  18. // 在页面中心定义旋转转换
  19. gfx.TranslateTransform(page.Width / 2, page.Height / 2);
  20. gfx.RotateTransform(-Math.Atan(page.Height / page.Width) * 180 / Math.PI);
  21. gfx.TranslateTransform(-page.Width / 2, -page.Height / 2);
  22. // 创建字符串格式
  23. XStringFormat format = new XStringFormat();
  24. format.Alignment = XStringAlignment.Near;
  25. format.LineAlignment = XLineAlignment.Near;
  26. // 创建暗红色画笔
  27. XBrush brush = new XSolidBrush(XColor.FromArgb(128, 255, 0, 0));
  28. // 画水印
  29. gfx.DrawString("这是水印", font, brush,
  30. new XPoint((page.Width - size.Width) / 2, (page.Height - size.Height) / 2),
  31. format);
  32. //保存
  33. document.Save("p.pdf");
  34. }
  35. }

image.png