【问题标题】:iTextSharp - appending document as a pageiTextSharp - 将文档附加为页面
【发布时间】:2012-11-14 13:11:18
【问题描述】:

到目前为止,使用 iTextSharp,我已经能够使用带有文本字段的 Adob​​e Acrobat Pro 创建 pdf。我可以使用 iTextSharp 打开 PDF,然后将所需字段与关键信息填充到关键字段中。

接下来,我可以打包所有内容并将文件作为文件附件从字节数组中发送出去 - 所以一切正常。

问题在于——我必须在内存流中创建一个 PDF 文档,并用必要的文本填充该文档。我已经很好地解决了这个问题。

问题是我很困惑如何将内存流中的文档附加到文件流中的现有源 .PDF 作为新页面。

一个是使用 stamper.insert 页面,但我无法在矩形中添加标题,我认为使用 Document doc = new Document() 是可行的方法。

想法?

【问题讨论】:

  • 请使用涉及emptyform.pdf、filloutform.pdf、existingdocument.pdf等名称的伪代码重新表述您的问题。如果没有额外的信息,就不清楚你想要什么。
  • 您考虑过使用 PdfConcatenate 吗?您可以使用 PdfConcatenate 在任何流、内存或文件系统中生成连接文档,并且源文档需要以 PdfReaders 的形式,也可以从文件系统(按文件名)或内存(作为字节数组)实例化可以从 MemoryStream 中检索到)。如果您提供布鲁诺要求的(伪)代码,则可以详细说明。
  • 伪代码如下:

标签: pdf itextsharp


【解决方案1】:

这是伪代码代码。这就是它目前所做的。

打开源文件并存入by​​te[] 使用 .SetField 使用 Acrofields 填充 pdf 中的文本字段(这是成功的) 盖章并关闭 作为字节数组返回并作为文件附件发送。这一切都很好。

现在 - 我们需要在上述现有文档中附加一个新页面,其中包含文本 - 几个段落。

创建内存流 创建文档 创建一个 writer 并将内存流和文档混合在一起。

MemoryStream ms = new MemoryStream();
Document doc = new Document(PageSize.LETTER);
PdfWriter writer = PdfWriter.GetInstance(doc, ms);
doc.Open();
doc.NewPage();
Paragraph p = new Paragraph();
p.Add(new Chunk(complaintinfo.COMPLAINT_DESC, new Font(Font.NORMAL, qSize, iTextSharp.text.Font.NORMAL)));
// doc - add header info later..
doc.Add(p);

如何将文档作为新页面添加到文件流中已存在的现有 .pdf 中?当然,我假设我们要在盖章并关闭链接到原始 PDF 的阅读器之前添加页面。

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 2012-04-03
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2011-11-06
    • 2012-08-22
    相关资源
    最近更新 更多