鱼酱第一次接触到为pdf加水印的功能,需求是输入使用事由,将事由作为附件pdf的水印,使用者下载得到水印附件。
度娘很快告诉我itextsharp非常好使,于是下载了dll,做出了生成文字水印的功能。
水印想做成三行,本以为 里边的变量要定义三次,结果发现定义的PdfContentByte有一个接口,直接调用三次就可以了,只需要传入不同的文字就OK:
pdfContentByte.ShowTextAligned(Element.ALIGN_CENTER, "仅供", width / 2-50, height / 2+50, 45);
pdfContentByte.ShowTextAligned(Element.ALIGN_CENTER, waterMarkName, width / 2 + 10, height / 2 - 10, 45);
pdfContentByte.ShowTextAligned(Element.ALIGN_CENTER, "使用", width / 2+70, height / 2-70, 45);
鱼酱做的水印是文件中心倾斜45°的,这样在上方生水印(GetOverContent)与在下方生水印(GetUnderContent)调用其中一个就OK,两个都是用发现水印效果没有什么变化。
功能做好之后测试下载时,系统报了一个错误,但不是每次下载都报错:
“PdfReader not opened with owner password”,
排查发现针对某一个PDF,做水印时出现此错误,其他pdf都可正常生成水印并下载,检查此pdf可正常打开无异常,无解遂又寻度娘 ,有粘贴出大段落的,但是鱼渣没看懂,有说将itextsharp版本换成2.0开头的,鉴于一些原因更换不是很方便,遂鱼酱又继续找寻方法,最终在一个外文网站 发现一个回帖,只有一句,自感霸气侧漏相当高冷:
PdfReader.unethicalreading = true;
(ps:此色自带高冷色)抱着侥幸心理 一试,Bingo!心中顿时跪拜此人隐有世外高手气质~如此,最后一个问题也如愿解决。然后想加什么水印加什么水印,例如 :呵呵、呵你妹啊、我就呵呵咋滴、呵呵假水印 。。。