iTextSharp,生成文档后将条码添加到第 1 页
iTextSharp, add barcode to page 1 after generating document
我正在使用 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);
我的问题是生成整个文档后如何返回第一页并向第一页添加元素?我将添加条形码(我知道如何在当前页面上添加条形码、表格等我想要的位置),但我不知道如何 "go back" 到第一页添加元素。
这是完整的代码,但由于依赖关系,您将无法编译它。另外,不要纠结于完整代码的细节,因为这是一个创建动态生成文档的大型项目。 https://pastebin.com/kABi7fzW
我无法证明对 iTextSharp
的确切调用,因为我们处理文档的方式完全不同;打开一个 Word 模板,在数据为 DataTables
等处,执行 MailMerge,关闭并重新打开并另存为 PDF。听起来更复杂,但不需要您逐段创建文档的详细程度,但它确实允许文档生成器担心内容而不是样式放置(通过 Word,手动和应用程序外部处理) ).
根据使用 iTextSharp
的经验,您在尝试将元素浮动到部分顶部以插入条形码时会遇到很多麻烦。在这种情况下,文档生成工具有一个不 相当 工作的令人讨厌的趋势。我们在 iTextSharp 支持和版本升级方面来回折腾了好几个星期,但仍然无法让它在所有情况下都能正常运行。
正如评论中所讨论的那样,鉴于您已经编写了代码(我怀疑您会放弃所有代码并从 MailMerge 开始,除非您真的、真的必须这样做),您需要插入您可以通过 iTextSharp
的 PdfBuilder
api 找到一个占位符块。我想设置书签位置可能是最简单的方法。
如果可以(最好?)将条形码放在自己的页面上,那么您已经拥有执行此操作所需的代码(大约在您的 pastebin link 中的第 324
行)与;
// create doc...
// reopen doc and get page count
doc.NewPage();
// add barcode with page count + 1
// save
我正在使用 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);
我的问题是生成整个文档后如何返回第一页并向第一页添加元素?我将添加条形码(我知道如何在当前页面上添加条形码、表格等我想要的位置),但我不知道如何 "go back" 到第一页添加元素。
这是完整的代码,但由于依赖关系,您将无法编译它。另外,不要纠结于完整代码的细节,因为这是一个创建动态生成文档的大型项目。 https://pastebin.com/kABi7fzW
我无法证明对 iTextSharp
的确切调用,因为我们处理文档的方式完全不同;打开一个 Word 模板,在数据为 DataTables
等处,执行 MailMerge,关闭并重新打开并另存为 PDF。听起来更复杂,但不需要您逐段创建文档的详细程度,但它确实允许文档生成器担心内容而不是样式放置(通过 Word,手动和应用程序外部处理) ).
根据使用 iTextSharp
的经验,您在尝试将元素浮动到部分顶部以插入条形码时会遇到很多麻烦。在这种情况下,文档生成工具有一个不 相当 工作的令人讨厌的趋势。我们在 iTextSharp 支持和版本升级方面来回折腾了好几个星期,但仍然无法让它在所有情况下都能正常运行。
正如评论中所讨论的那样,鉴于您已经编写了代码(我怀疑您会放弃所有代码并从 MailMerge 开始,除非您真的、真的必须这样做),您需要插入您可以通过 iTextSharp
的 PdfBuilder
api 找到一个占位符块。我想设置书签位置可能是最简单的方法。
如果可以(最好?)将条形码放在自己的页面上,那么您已经拥有执行此操作所需的代码(大约在您的 pastebin link 中的第 324
行)与;
// create doc...
// reopen doc and get page count
doc.NewPage();
// add barcode with page count + 1
// save