複数の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に結合する他の方法はありますか?