我正在尝试将多个 PDF 合并为一个 PDF。PDF 来自 SSRS,来自我处理的一些 LocalReports。我正在使用 PDFSharp,因为它已经在整个项目中使用。但是,这些outputDocument.addPage(page)
方法会引发InvalidOperationException("Cannot change document.")
异常。我已经尝试了许多不同的方法来做到这一点,但我无法让它工作......
这是我的方法,已经检查了所有输入:
private static void saveFile(string fileName, params byte[][] bytes)
{
try
{
PdfDocument outputDocument = new PdfDocument();
for (int i = 0; i < bytes.Length; i++)
{
using (MemoryStream stream = new MemoryStream(bytes[i]))
{
PdfDocument inputDocument = PdfReader.Open(stream, PdfDocumentOpenMode.Import);
foreach (PdfPage page in inputDocument.Pages)
{
outputDocument.AddPage(page); //throws the exception !!!
}
}
}
outputDocument.Save(fileName);
}
catch (Exception ex)
{
throw new Exception("Erreur lors de l'enregistrement du fichier", ex);
}
}
从我在网上看到的示例来看,这似乎是正确的做法......我愿意接受其他合并我的 PDF 的建议,但我宁愿不使用另一个第三方库,如 ITextSharp,因为 PDFSharp 是已经在项目中使用了。
如果重要的话,我在 Win7 机器上使用 VS2010 Pro。
编辑:从异常调用堆栈:
at PdfSharp.Pdf.PdfObject.set_Document(PdfDocument value)
at PdfSharp.Pdf.PdfObject.ImportClosure(PdfImportedObjectTable importedObjectTable, PdfDocument owner, PdfObject externalObject)
at PdfSharp.Pdf.PdfPages.CloneElement(PdfPage page, PdfPage importPage, String key, Boolean deepcopy)
at PdfSharp.Pdf.PdfPages.ImportExternalPage(PdfPage importPage)
at PdfSharp.Pdf.PdfPages.Insert(Int32 index, PdfPage page)
at PdfSharp.Pdf.PdfPages.Add(PdfPage page)
at PdfSharp.Pdf.PdfDocument.AddPage(PdfPage page)
at Something.saveFile(String fileName, Byte[][] bytes)
是我的问题吗?这不就是应该这样做的吗?或者有没有其他方法可以将多个 LocalReport 组合成一个 PDF?