给PDF加水印用的插件是PdfSharp.DLL,在VS中可以直接安装。
(非CRM需求者可跳过下面文字直接看代码)
如果是Dynamics CRM 本地不是想要加水印的话可以参考我的思路。
我的文档是存在本地SharePoint中的。
Action从SharePoint获取文件base64,返回到前端。我在这里做了手脚,在这个过程中我通过调用接口的方式,将水印加到文件中,返回一个新的base64,所以前端拿到的文件就是加水印的。
下面是给PDF加水印的一种方式-----绘制水印为文本字符串
//获取本地文件
PdfDocument pdf = PdfReader.Open(FilePath + "\\" + fileName);
//设定PDF文件加密
PdfSecuritySettings pdfSecurity = pdf.SecuritySettings;
pdfSecurity.OwnerPassword = "bailuya~";
pdfSecurity.PermitAccessibilityExtractContent = false;
pdfSecurity.PermitAnnotations = false;
pdfSecurity.PermitAssembleDocument = false;
pdfSecurity.PermitExtractContent = false;
pdfSecurity.PermitFormsFill = true;
pdfSecurity.PermitFullQualityPrint = false;
//是否可修改文档
pdfSecurity.PermitModifyDocument = true;
//是否可打印
pdfSecurity.PermitPrint = true;
//获取PDF文件页数
int Page = pdf.PageCount;
//设置水印样式
XFont font = new XFont("Arial Rounded MT Bold", 25);
//水印
string waterMark = Domainname + " " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
foreach (var Pinfo in pdf.Pages)
{
//置于图层上方,图层上方不易被图片遮挡。需求者也可以使用XGraphicsPdfPageOptions.Prepend置于图层下方
var gfx = XGraphics.FromPdfPage(Pinfo, XGraphicsPdfPageOptions.Append);
var size = gfx.MeasureString(waterMark, font);
//水印位置
gfx.TranslateTransform(Pinfo.Width / 2, Pinfo.Height / 2);
gfx.RotateTransform(-Math.Atan(Pinfo.Height / Pinfo.Width) * 180 / Math.PI);
gfx.TranslateTransform(-Pinfo.Width / 2, -Pinfo.Height / 2);
var format = new XStringFormat();
format.Alignment = XStringAlignment.Near;
format.LineAlignment = XLineAlignment.Near;
//将水印绘制为文本字符串
XBrush brush = new XSolidBrush(XColor.FromArgb(128, 255, 0, 0));
gfx.DrawString(waterMark, font, brush, new XPoint((Pinfo.Width - size.Width) / 2, (Pinfo.Height - size.Height) / 2), format);
}
//保存
pdf.Save(FilePath + "\\" + fileName);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43