我正在尝试使用iTextSharp将两个PDF文件的内容合并为一个新的PDF文件。我之前曾使用PDFStamper在类似情况下完成此操作,但是由于某种原因,本次它不起作用。追加根本不起作用;该文件已创建,但在此代码块末尾,大小保持为0字节。任何人都可以提供的任何帮助将不胜感激。
File.Create(session.getLocalDir() + newPdfFile);
// pasting content from original file to new file
PdfReader reader = new PdfReader(originalFile);
string pageSelection = "1-" + reader.NumberOfPages;
reader.SelectPages(pageSelection);
PdfStamper stamper = new PdfStamper(reader, new FileStream(newPdfFile, FileMode.Append, FileAccess.Write));
stamper.Close();
reader.Close();
// pasting content from temp file to new file
reader = new PdfReader(temp);
pageSelection = "1-" + reader.NumberOfPages;
reader.SelectPages(pageSelection);
stamper = new PdfStamper(reader, new FileStream(newPdfFile, FileMode.Append, FileAccess.Write));
stamper.Close();
reader.Close();
答案 0 :(得分:0)
这里最简单的解决方案是在添加临时PDF文件时使用MemoryStream来保存它。经过一些研究,我发现如mkl所示,PdfStamper类不适合此操作。在iTextSharp中,您可以使用另一种方式附加2个PDF:
MemoryStream stream = new MemoryStream();
PdfCopyFields copy = new PdfCopyFields(stream);
var ms1 = new MemoryStream(File.ReadAllBytes(file1Path));
ms1.Position = 0;
copy.AddDocument(new PdfReader(ms1));
ms1.Dispose();
var ms2 = new MemoryStream(File.ReadAllBytes(file2Path));
ms2.Position = 0;
copy.AddDocument(new PdfReader(ms2));
ms2.Dispose();
copy.Close();
生成的'stream'变量包含合并的PDF,可以使用PdfStamper写入文件。
如果可以选择将.net切换到iText 7,则可以省略PdfStamper,而可以使用PdfDocument.copyPagesTo()方法。
一个简单的示例(使用iText 7 for .net):
MemoryStream stream = new MemoryStream();
PdfDocument outputDocument = new PdfDocument(new PdfWriter(stream));
PdfDocument pdfSource = new PdfDocument(new PdfReader("c:\\firstInput.pdf"));
pdfSource.CopyPagesTo(1, pdfSource.GetNumberOfPages(), outputDocument);
pdfSource = new PdfDocument(new PdfReader("c:\\secondInput.pdf"));
pdfSource.CopyPagesTo(1, pdfSource.GetNumberOfPages(), outputDocument);
pdfSource.Close();
outputDocument.Close();
MemoryStream outputStream = new MemoryStream(stream.ToArray());
outputDocument = new PdfDocument(new PdfReader(outputStream), new PdfWriter("c:\\result.pdf"));
第二次编辑了针对特定用例的解决方案。