我们有大量的 PDF 文件,我们正在创建一个网站以允许用户下载它们,当他们需要时,我们希望:
- 在上面加上他们的名字的水印。
- 我们希望表单字段保持打开状态,以便他们输入信息。
- 我们希望能够打印和保存文档
当我将水印放在文档上然后打开它时,我收到来自 Adobe 的消息:
“文档自创建以来已更改,无法再使用扩展功能。请联系作者...”
根据“iText-in-Action”一书,这是一个安全问题(第 8 章)。似乎有两种方法可以打开它们:
- 删除使用权:这打破了上面的#3。
- 以附加模式打开它:修改它并使用“FormFlatening = false”或true保存都没有关系,如果我在表单上放置水印,则字段不再可编辑。
Adobe 的错误消息确实描述了问题,我已经修改了带有水印的文档内容,因此表单字段被阻止。我尝试打开将水印放在上面的文档并将其保存到新文件中,然后将其关闭。然后重新打开它并尝试取消阻止表单字段,但它不起作用。
有谁知道这是否可能?我读过一些关于模板的东西;我不知道这是否是一个解决方案,因为需要将文档转换为模板?有谁知道这是否有帮助?
下面是我使用图像作为水印的代码示例,尽管我也尝试过添加文本:
PdfReader reader = new PdfReader(sourceFile.FullName);
//reader.RemoveUsageRights();
var fileStream = new FileStream(outputPath, FileMode.Create, FileAccess.ReadWrite);
PdfStamper pdfStamper = new PdfStamper(reader, fileStream, '\0', true);
Image image = Image.GetInstance(imagePath);
image.SetAbsolutePosition(250, 300);
for (int i = 1; i <= reader.NumberOfPages; i++) // Must start at 1 because 0 is not an actual page.
{
PdfContentByte pdfPageContents = pdfStamper.GetUnderContent(i);
pdfPageContents.AddImage(image);
}
pdfStamper.FormFlattening = false; // enable this if you want the PDF flattened.
//bool have = pdfStamper.PartialFormFlattening("test");
pdfStamper.Close(); // Always close the stamper or you'll have a 0 byte stream.