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);
//保存PDF
document.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");
}
}