PdfSharp一款开源的用于创建,操作PDF文档的.Net类库
核心类介绍
- PdfDocument:表示一个PDF文档对象,调用save方法保存文档到指定路径。
- PdfPage:表示PDF文档中的一页。
- XGraphics:表示页面上的绘制对象,所有的页面内容,都可通过此对象绘制。如:DrawString绘制文本内容,DrawLine绘制直线等。
- XFont:绘制文本的字体,字体名称只能取C:\Windows\Fonts目录下的ttf字体文件,不能是ttc格式的字体。
- XTextFormatter:表示一个简单的文本字体格式,如识别文本的换行符而实现自动换行等内容。
简单demo
这个简单demo,是创建简单PDF的流程
static void PDF(){int margin_left_right = 30;//左右边距int margin_top_bottom = 30;//上下边距//注册字体Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);//定义文档对象using (PdfDocument document = new PdfDocument()){//新增一页PdfPage page = document.AddPage();// 设置纸张大小page.Size = PageSize.A4;//创建一个绘图对象(几乎所有的对PDF的操作都是用这个绘制对象来画出来的)XGraphics gfx = XGraphics.FromPdfPage(page);//设置字体,创建一个字体对象,画PDF时用的XFont font = new XFont("华文宋体", 40, XFontStyle.Bold);//xy的起始点int cur_x = 0 + margin_left_right;int cur_y = 0 + margin_top_bottom;//开始绘制文本gfx.DrawString("这是一段标题", font, XBrushes.Red, new XRect(cur_x, cur_y, page.Width - 2 * cur_x, 80), XStringFormats.Center);//保存PDFdocument.Save("p.pdf");}}
PdfDocument
PdfDocument继承了IDisposable接口,需要释放资源,就用using,所有对这个PDF的操作都写在这里面。
实例化传入参数,可以打开指定pdf。
public PdfDocument();public PdfDocument(string filename);public PdfDocument(Stream outputStream);
gfx.DrawString
这个方法是在PDF上绘制文字的。
根据简单demo的例子
//开始绘制文本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.将水印绘制为文本字符串
static void PDF(){//注册字体Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);//定义文档对象using (PdfDocument document = new PdfDocument()){//2.新增一页PdfPage page = document.AddPage();//设置纸张大小page.Size = PageSize.A4;//获取用于在现有内容下绘图的XGRAPHICS对象XGraphics gfx = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Prepend);//字体XFont font = new XFont("华文宋体", 80, XFontStyle.Bold);// 获取文本的大小(以点为单位)XSize size = gfx.MeasureString("这是水印", font);// 在页面中心定义旋转转换gfx.TranslateTransform(page.Width / 2, page.Height / 2);gfx.RotateTransform(-Math.Atan(page.Height / page.Width) * 180 / Math.PI);gfx.TranslateTransform(-page.Width / 2, -page.Height / 2);// 创建字符串格式XStringFormat format = new XStringFormat();format.Alignment = XStringAlignment.Near;format.LineAlignment = XLineAlignment.Near;// 创建暗红色画笔XBrush brush = new XSolidBrush(XColor.FromArgb(128, 255, 0, 0));// 画水印gfx.DrawString("这是水印", font, brush,new XPoint((page.Width - size.Width) / 2, (page.Height - size.Height) / 2),format);//保存document.Save("p.pdf");}}

