【发布时间】:2021-02-22 17:20:26
【问题描述】:
我在 vb.net 中使用 itextsharp 将一些背景(即其他单页 pdf)标记到另一个 pdf 上。
所以我有一个 5 页的“空白”pdf,在其上我用名为 page1.pdf 的文件的第一页标记第 1 页,然后我将 page2.pdf 的第一页作为第 2 页等的背景.
到目前为止它运行良好,但我遇到了将特定 pdf 标记到我的“空白”上的问题 - 问题似乎与我将称为“page4.pdf”的文件有关,而且很可能是因为 page4.pdf 被设计为可填写的表单。
当我在第 4 页上标记并在 Adobe Reader 中打开空白文件时,我收到以下消息:
处理页面时出错。阅读本文档时出现问题 (18)
谁能建议一种方法,我可以在没有此问题的情况下使用表单 pdf 作为源来标记 pdf?
谢谢!
这是我用于标记的代码的摘录(它会执行其他操作并涉及一个循环来遍历 pdf 的页面,但我只是将实际标记位放在下面以保持简单):
Dim background As PdfContentByte
Dim page As PdfImportedPage = Nothing
Dim reader As PdfReader = New PdfReader(sourcepdf)
Dim stamper As New itextsharp.text.pdf.PdfStamper(reader, New System.IO.FileStream(outputpdf, System.IO.FileMode.Create))
Dim s_reader As New PdfReader(backfile)
page = stamper.GetImportedPage(s_reader, 1)
background.AddTemplate(page, 0, 0)
stamper.Close()
reader.Close()
s_reader.Close()
这是我一直在尝试将表单 pdf 转换为“非表单”的代码,我希望它可以消除标记问题(目前没有成功):
Dim pdfReader As PdfReader = New PdfReader(inputpdf)
Dim pdfStamper As itextsharp.text.pdf.PdfStamper = New PdfStamper(pdfReader, New FileStream(outputpdf, FileMode.Create))
pdfStamper.AnnotationFlattening = True
pdfStamper.FreeTextFlattening = True
pdfStamper.FormFlattening = True
pdfStamper.Close()
【问题讨论】:
-
您的代码应该可以正常工作。因此,这可能是该pdf的问题。你能分享那个pdf进行分析吗?
-
真的吗? - 我猜这是个好消息。这是文件的链接:drive.google.com/file/d/1FiQlv9XzWdfqruzyRUG8hy_pfKifFEiz/…
-
不过,有一件事:当我说“您的代码应该可以正常工作”时,我假设您确实在实际代码中为
background分配了一些合理的东西;您问题中的摘录永远无法工作,因为background未分配... -
共享文件代表该 PDF 的哪种状态?压扁之前还是之后?我想知道,因为它不包含任何 AcroForm 表单字段,但它看起来也不像被 iText 展平的文件。
-
我想我已经搞清楚了——今天早上我又做了一次测试,一切正常。问题是我在测试代码时不断地反复运行戳记,而不是在每次运行之间删除戳记的 pdf。我假设该过程会覆盖输出文件,但它只是一直在顶部进行标记。只要在运行之间删除输出文件,就没有问题。我不知道为什么这个过程特别不喜欢 page4,这让我认为它与表单相关,但这是一个红鲱鱼,我只需要每次都从“新鲜”开始。