【问题标题】:iTextSharp, add barcode to page 1 after generating documentiTextSharp,生成文档后将条形码添加到第 1 页
【发布时间】:2017-09-21 16:12:10
【问题描述】:

我正在使用 iTextSharp (5.5.5.90) 生成 PDF 文件。我正在使用段落并从读者等处导入页面。以下是我创建文档的方式,从那里我只需添加我需要的内容:

FileStream fs = new FileStream("filename.pdf", FileMode.Create, FileAccess.Write, FileShare.None);
Document doc = new Document(new Rectangle(PageSize.LETTER), 58, 58, 100, 50);
PdfWriter writer = PdfWriter.GetInstance(doc, fs);

创建文件后,我添加如下段落:

doc.Add(new Paragraph("Paragraph text"));

并像这样从阅读器中导入页面:

writer.DirectContent.AddTemplate(writer.GetImportedPage(reader, page), 0, 0);

我的问题是如何在生成整个文档并在第一页添加一个元素后返回到第一页?我将添加条形码(我知道如何在当前页面上添加条形码、表格等我想要的位置),但我不知道如何“返回”到第一页以添加元素。

这是完整的代码,但由于依赖关系,您将无法编译它。此外,不要被完整代码的细节所困扰,因为这是一个创建动态生成文档的大型项目。 https://pastebin.com/kABi7fzW

【问题讨论】:

  • 鉴于您是从一开始就生成文档,您是否有理由不在一开始就插入条形码?
  • DiskJunky,直到最后我才知道文档的整个长度。条形码包含文档中的页数。由于段落以及它们在到达底部时会自动流入下一页的方式,我不能 100% 确定有多少页(我想在早期计算字符/行/等)避免)
  • 您必须至少在开始时为条形码放置一个占位符,否则仅仅插入就会增加您的页数。在这种情况下,您需要创建文档,重新打开它,找到条形码占位符并更新它。这是一个更复杂的过程
  • 条形码将放在其他段落的顶部,因此不会修改长度(未经测试,但我认为这会起作用)。是的,选项 B 肯定是保存、重新打开和添加条形码。有没有办法放置一些东西来参考?如果可能的话,我可以将“表格”放在我想要的位置并稍后添加数据。
  • 您可以创建一个PdfTemplate 并将其添加到第一页。完成后,您可以在该模板上绘制条形码。

标签: c# pdf itext pdf-generation


【解决方案1】:

我无法证明对iTextSharp 的确切调用,因为我们处理文档的方式完全不同;打开一个Word模板,在DataTables等数据处,做一个MailMerge,关闭并重新打开并保存为PDF。听起来更复杂,但不需要您逐段创建文档的详细程度,但它确实允许文档生成器担心内容而不是样式放置(通过 Word 处理,手动和应用程序外部)。

根据使用iTextSharp 的经验,尝试将元素浮动到部分顶部以插入条形码会遇到很多麻烦。文档生成工具在这种情况下完全有一种令人讨厌的倾向。我们在 iTextSharp 支持和版本升级方面经历了数周的反复,但仍然无法让它在所有情况下都能正常运行。

正如在 cmets 中讨论的那样,并考虑到您已经编写代码的方式(我怀疑您会废弃所有代码并从 MailMerge 开始,除非您真的必须这样做),您需要插入一个占位符您可以通过iTextSharpPdfBuilder api 定位的块。我想设置书签位置可能是最简单的方法。

如果可以(最好?)将条形码放在自己的页面上,那么您已经拥有执行此操作所需的代码(大约在您的 pastebin 链接中的行 324);

// create doc...
// reopen doc and get page count
doc.NewPage();
// add barcode with page count + 1
// save

【讨论】:

  • 我实际上是从 Mail Merge 迁移到这个新系统,因为我们希望能够定义与每个包含的表单一起使用的段落,而不是如果有多个则必须生成多个封面表格(或组合封面,这是我们现在拥有的,并且变得难以维护)。我正在使用数据库系统来存储内容和表单关系,然后根据工作人员的请求生成文档。
  • 我最终选择了关闭/重新打开文档并将其添加到那里的选项,因为它对我来说是最不密集的,并且由于它作为一个自动化过程运行,所以我不太担心运行-时间。谢谢你的建议。我将继续对此进行监控以获取未来的建议。
  • 您的 JIRA 问题 ID 是什么?我想检查一下为什么我们无法以最好的方式回答您的问题。
  • @AmedeeVanGasse,那是几年前的事了,所以我不得不去挖掘。在我们的场景中,我们有一个模板,并试图将图像、pdf 和文档插入到一个更大的、带有 ToC 的编译文档中。图像/文档的混合被证明是获得格式和正确放置的痛点。浮动插入的项目导致了很多调整,其中一个支持团队找到了解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多