2016-05-09 9 views
1

私はPDFのリストをlist<byte[]>として保存しています。私はPDFsharpを使用してこれらのPDFファイルをすべて連結しようとしますが、私の操作後に適切なページ数のPDFが得られますが、すべてのページは空白です。私はいくつかのヘッダーや何かを失うように見えますが、私はどこを見つけることができません。PDFsharpを使用してPDFを連結すると空のPDFが返されます

マイコード:私は後でそれらを使用しているためbyte[]としてそれを返すようにしたい

 PdfDocument output = new PdfDocument(); 
     try 
     { 
      foreach (var report in reports) 
      { 
       using (MemoryStream stream = new MemoryStream(report)) 
       { 

        PdfDocument input = PdfReader.Open(stream, PdfDocumentOpenMode.Import); 

        foreach (PdfPage page in input.Pages) 
        { 
         output.AddPage(page); 
        } 
       } 
      } 


      if (output.Pages.Count <= 0) 
      { 
       throw new Exception("Empty Document"); 
      } 
      MemoryStream final = new MemoryStream(); 
      output.Save(final); 
      output.Close(); 
      return final.ToArray(); 
     } 
     catch (Exception e) 
     { 
      throw new Exception(e.ToString()); 
     } 

return File(report, System.Net.Mime.MediaTypeNames.Application.Octet, "test.pdf");

これは、適切なページ数でPDFを返しますが、すべてのブランク。

私はiTextSharpを使用
+0

output.Save(filename);作業? –

+0

ファイルに保存するときに正しいファイルを取得していますか?そうでない場合は、インポートしたPDFファイルに問題がある可能性があります。はいの場合、使用しているMemoryStreamに問題がある可能性があります(ToArrayを呼び出す前に2回クローズしていますが、デバッガなしでは問題があるかどうかはわかりません)。 MCVEがなければ、あなたの問題をデバッグしようとはしません。 –

+0

PDFSharpを使用せずにPDFを返すと、正しく動作します。私はPDFSharpを使用して6 pdfを1ページに連結すると、結果として6ページの1 pdfが得られますが、すべてのページは空白です。 – Aht

答えて

2

あなたはファイルがSSRSから来ることをコメントで教えてください。 PDFsharpの

古いバージョンが特別SSRS設定が必要です。

theDeviceSettings = "<DeviceInfo><HumanReadablePDF>True</HumanReadablePDF></DeviceInfo>"; 

ソース:
ReportExecutionServiceオブジェクトのレンダリング方法DeviceSettingsパラメータについて

を、この値を渡しますhttp://forum.pdfsharp.net/viewtopic.php?p=1613#p1613

+0

私はPDFSharpフォーム1.32を1.50 Beta_3Bに切り替えることができました。私はこの設定を追加し、古いバージョンを使用すると私はあまりにもうまくいくだろうと信じています。ご協力いただきありがとうございます。私はDLLの作成者が私を助けようとするとは思わなかった。製品をサポートする素晴らしい方法:)ありがとうもう一度:) – Aht

-1

、このsapleコードを見て(それが動作する)

public static byte[] PdfJoin(List<String> pdfs) 
    { 
     byte[] mergedPdf = null; 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      using (iTextSharp.text.Document document = new iTextSharp.text.Document()) 
      { 
       using (iTextSharp.text.pdf.PdfCopy copy = new iTextSharp.text.pdf.PdfCopy(document, ms)) 
       { 
        document.Open(); 

        for (int i = 0; i < pdfs.Count; ++i) 
        { 
         iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(pdfs[i]); 
         // loop over the pages in that document 
         int n = reader.NumberOfPages; 
         for (int page = 0; page < n;) 
         { 
          copy.AddPage(copy.GetImportedPage(reader, ++page)); 
         } 
        } 
       } 
      } 
      mergedPdf = ms.ToArray(); 
     } 
     return mergedPdf; 
    } 




public static byte[] PdfJoin(List<byte[]> pdfs) 
    { 
     byte[] mergedPdf = null; 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      using (iTextSharp.text.Document document = new iTextSharp.text.Document()) 
      { 
       using (iTextSharp.text.pdf.PdfCopy copy = new iTextSharp.text.pdf.PdfCopy(document, ms)) 
       { 
        document.Open(); 

        for (int i = 0; i < pdfs.Count; ++i) 
        { 
         iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(pdfs[i]); 
         // loop over the pages in that document 
         int n = reader.NumberOfPages; 
         for (int page = 0; page < n;) 
         { 
          copy.AddPage(copy.GetImportedPage(reader, ++page)); 
         } 
        } 
       } 
      } 
      mergedPdf = ms.ToArray(); 
     } 
     return mergedPdf; 
    } 
+0

おそらくあなたは正しいですが、私はiTextを使用できません(会社コードなので、PDFSharpを使用する必要があります) – Aht

関連する問題