使用PDFSharp组合多个PDF

Pie*_*let 17 c# pdfsharp ssrs-2008

我正在尝试将多个PDF组合成一个PDF.PDF来自SSRS,来自我处理的一些LocalReports.我正在使用PDFSharp,因为它已经在整个项目中使用.但是,outputDocument.addPage(page)方法抛出InvalidOperationException("无法更改文档.")异常.我尝试了许多不同的方法,但我无法让它工作......

这是我的方法,其中已经检查了所有输入:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

从我在网上看到的例子来看,这似乎是这样做的正确方法......我对合并我的PDF的其他建议持开放态度,但我宁愿不使用其他第三方库,比如ITextSharp,因为PDFSharp是已经在项目中使用过.

如果重要,我在Win7机器上使用VS2010 Pro.

编辑:从异常调用堆栈:
在PdfSharp.Pdf.PdfObject.set_Document(PdfDocument值)
在PdfSharp.Pdf.PdfObject.ImportClosure(PdfImportedObjectTable importedObjectTable,PdfDocument老板,PdfObject externalObject)
在PdfSharp.Pdf.PdfPages.CloneElement(PdfPage页, PdfPage importPage,串键,布尔deepcopy的意思)
在PdfSharp.Pdf.PdfPages.ImportExternalPage(PdfPage importPage)
在PdfSharp.Pdf.PdfPages.Insert(的Int32指数,PdfPage页)
在PdfSharp.Pdf.PdfPages.Add(PdfPage页)
在PdfSharp Something.saveFile的.Pdf.PdfDocument.AddPage(PdfPage页面)
(String fileName,Byte [] [] bytes)

问题是我吗?这不是应该这样做的方式吗?或者有没有其他方法将多个LocalReport组合成一个PDF?

Siw*_*hit 11

我不确定我的答案。请自行阅读。

http://www.go4coding.com/post/2011/05/26/Merging-PDF-files-into-single-PDF-in-CSharp-using-PDFSharp.aspx

private static void MergeMultiplePDFIntoSinglePDF(string outputFilePath, string[] pdfFiles)
{
    Console.WriteLine("Merging started.....");
    PdfDocument outputPDFDocument = new PdfDocument(); 
    foreach (string pdfFile in pdfFiles)
    {
        PdfDocument inputPDFDocument = PdfReader.Open(pdfFile, PdfDocumentOpenMode.Import);
        outputPDFDocument.Version = inputPDFDocument.Version; 
        foreach (PdfPage page in inputPDFDocument.Pages)
        {
            outputPDFDocument.AddPage(page);
        }
    }
    outputPDFDocument.Save(outputFilePath); 
    Console.WriteLine("Merging Completed");
}
Run Code Online (Sandbox Code Playgroud)

  • 请改用此链接。http://www.pdfsharp.net/wiki/ConcatenateDocuments-sample.ashx (2认同)

asg*_*las 8

我开始相信它可能是PDFSharp损坏或不可读的输入PDF.有几个SSRS PDF的例子不能被PDF库或甚至Adobe的Reader读取.例如这里:

http://www.sqldev.org/sql-server-reporting-services/export-pdf-in-ssrs-2008-vs-ssrs-2005--pdf-is-different-wont-work-with-itextsharp-possibly - 其他 - 13968.shtml

... 和这里:

/sf/ask/167522281/

...最重要的是在PDFSharp论坛上:

http://forum.pdfsharp.net/viewtopic.php?f=2&t=674

我不知道这是否是您遇到的错误 - 消息很奇怪 - 但是当您考虑到您的代码示例与我尝试的任何PDF完美无瑕时,它似乎可能与此有关.虽然我没有尝试任何SQL Server报告

  • 压缩的PDF文件是PDFSharp无法读取的PDF文件的一个很好的例子...这就是为什么它无法读取SSRS 2008 PDF文件并读取SSRS 2005文件就好......但是,它不会在上面的行中生成异常foreach循环如果这是问题吗? (2认同)