19

複数のPDFを1つのPDFに結合しようとしています。PDFは、私が処理したいくつかのLocalReportsのSSRSから取得されます。私は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をマージするための他の提案を受け入れていますが、PDFSharpはプロジェクトですでに使用されています。

重要な場合は、Win7マシンでVS2010Proを使用しています。

編集:例外からスタックを呼び出します:

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を1つのPDFに結合する他の方法はありますか?

4

3 に答える 3

8

破損しているか、PDFSharpで読み取れない入力PDFである可能性があると私は信じるようになりました。SSRSPDFがPDFライブラリやAdobeのリーダーでさえ読めない例がいくつかあります。たとえば、ここで:

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

... そしてここ:

https://stackoverflow.com/questions/2393175/ssrs-2008-pdf-files-cannot-be-opened

...そして最も重要なのはPDFSharpフォーラムです:

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

これがあなたが遭遇しているバグであるかどうかはわかりません-メッセージは奇妙です-しかし、あなたのコードサンプルが私が試したどのPDFでも完璧に動作することを考慮すると、それと関係があるようです(試してみるSQLServerレポートはありませんが)

于 2011-02-14T21:38:43.950 に答える
5

答えがわかりません。自分を読んでください。

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");
}
于 2013-07-14T14:35:14.933 に答える
1

まず、フィードバックをありがとうございます。<humanreadalble>デバイス情報文字列にtrueがあるため、問題は圧縮に</humanreadable>起因しません。そうでない場合、PDFSharpはPDFに何も表示されません。

最新のソースコードからPDFSharpを再コンパイルしようとしましたが、機能しました...もう例外はスローされません。奇妙なことに、dllのバージョンを確認したところ、最新のビルドと同じでした。たぶん彼らはバージョンをインクリメントせずに何かを修正しましたか?

とにかく、あなたの援助に感謝します。私はあなたの投稿を私の感謝の気持ちを表す答えとして受け入れました。

于 2011-02-15T14:09:04.903 に答える