如何正确地将现有磁盘 PDF 文件中的页面添加到当前正在生成的内存 PDF 文档中?
我们有一个使用 iTextSharp 生成 PDF 文档的类。这工作正常。目前,我们在最后一页添加了条款和条件作为图片:
this.nettPriceListDocument.NewPage();
this.currentPage++;
Image logo = Image.GetInstance("/inetpub/Applications/Trade/Reps/images/TermsAndConditions.gif");
logo.SetAbsolutePosition(0, 0);
logo.ScaleToFit(this.nettPriceListDocument.PageSize.Width, this.nettPriceListDocument.PageSize.Height);
this.nettPriceListDocument.Add(logo);
我将此图像作为 PDF 文档,并希望附加它。如果我能弄清楚这一点,就可以将我们可能需要的其他 PDF 文档附加到我正在生成的文件中。
我试过了:
string tcfile = "/inetpub/Applications/Trade/Reps/images/TermsAndConditions.pdf";
PdfReader reader = new PdfReader(tcfile);
PdfWriter writer = PdfWriter.GetInstance(this.nettPriceListDocument, this.nettPriceListMemoryStream);
PdfContentByte content = writer.DirectContentUnder;
for (int pageno = 1; pageno < reader.NumberOfPages + 1; pageno++)
{
this.nettPriceListDocument.NewPage();
this.currentPage++;
PdfImportedPage newpage = writer.GetImportedPage(reader, pageno);
content.AddTemplate(newpage, 1f, 1f);
}
这会导致“文档未打开”异常writer.DirectContentUnder
我也试过:
string tcfile = "/inetpub/Applications/Trade/Reps/images/TermsAndConditions.pdf";
PdfReader reader = new PdfReader(tcfile);
PdfConcatenate concat = new PdfConcatenate(this.nettPriceListMemoryStream);
concat.AddPages(reader);
这会导致在文档的通常第一页上插入一个空白的、大小不一的页面。
我也试过:
string tcfile = "/inetpub/Applications/Trade/Reps/images/TermsAndConditions.pdf";
PdfReader reader = new PdfReader(tcfile);
PdfCopy copier = new PdfCopy(nettPriceListDocument, nettPriceListMemoryStream);
for (int pageno = 1; pageno < reader.NumberOfPages + 1; pageno++)
{
this.currentPage++;
PdfImportedPage newpage = copier.GetImportedPage(reader, pageno);
copier.AddPage(newpage);
}
copier.Close();
reader.Close();
这导致 NullReferenceException 在copier.AddPage(newpage)
。
我也试过:
string tcfile = "/inetpub/Applications/Trade/Reps/images/TermsAndConditions.pdf";
PdfReader reader = new PdfReader(tcfile);
PdfCopyFields copier = new PdfCopyFields(nettPriceListMemoryStream);
copier.AddDocument(reader);
这也会导致 NullReferenceException 在copier.AddDocument(reader)
。
我从各种 StackOverflow 问题和答案中获得了大部分这些想法。似乎没有人处理的一件事是,将现有 PDF 文件中的新页面添加到尚未写入磁盘上 PDF 文件的现有内存文档中。该文档已被打开,并已写入多页数据。如果我把这个条款和条件程序排除在外,或者只是把它写成一个图像(就像原来的一样),那么生成的 PDF 就可以了。
在我开始的时候完成:如何正确地将页面从现有的磁盘 PDF 文件添加到当前正在生成的内存 PDF 文档中?
提前感谢并感谢您对此的思考。如果我能提供更多信息,请告诉我。