Tro*_*roy 5 c# pdf itext itextsharp
如何将现有磁盘上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);
Run Code Online (Sandbox Code Playgroud)
我将此图像作为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);
}
Run Code Online (Sandbox Code Playgroud)
这会导致"文档未打开"异常 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);
Run Code Online (Sandbox Code Playgroud)
这导致在文档的通常第一页上插入空白的,奇怪大小的页面.
我也尝试过:
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();
Run Code Online (Sandbox Code Playgroud)
这会导致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);
Run Code Online (Sandbox Code Playgroud)
这也会导致NullReferenceException copier.AddDocument(reader)
.
我从各种StackOverflow问题和答案中获得了大部分这些想法.没有人似乎要处理的一件事是将现有PDF文件中的新页面添加到尚未写入磁盘上的PDF文件的已存在的内存文档中.该文档已经打开并且已经写入了数据页面.如果我退出本条款和条件程序,或者只是写一个图像(就像最初的那样),生成的PDF就可以了.
在我开始时完成:如何正确地将现有的磁盘PDF文件中的页面添加到当前生成的内存中PDF文档?
感谢并提前感谢您对此的思考.如果我能提供进一步的信息,请告诉我.
这是一个简单的合并方法,可以将PDF文件复制到一个PDF中.合并pdf时我经常使用这种方法.我已经使用它来合并不同大小的页面,没有问题.希望能帮助到你.
public MemoryStream MergePdfForms(List<byte[]> files)
{
if (files.Count > 1)
{
PdfReader pdfFile;
Document doc;
PdfWriter pCopy;
MemoryStream msOutput = new MemoryStream();
pdfFile = new PdfReader(files[0]);
doc = new Document();
pCopy = new PdfSmartCopy(doc, msOutput);
doc.Open();
for (int k = 0; k < files.Count; k++)
{
pdfFile = new PdfReader(files[k]);
for (int i = 1; i < pdfFile.NumberOfPages + 1; i++)
{
((PdfSmartCopy)pCopy).AddPage(pCopy.GetImportedPage(pdfFile, i));
}
pCopy.FreeReader(pdfFile);
}
pdfFile.Close();
pCopy.Close();
doc.Close();
return msOutput;
}
else if (files.Count == 1)
{
return new MemoryStream(files[0]);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6972 次 |
最近记录: |