2016-07-11 21 views
0

を生成し、私は、メモリ内のダミーPDFを生成し、クライアントに戻ってそれを送信するために次の関数を作っていますiTextSharpはitextsharp 4.2.0を使用して、無効なPDF

静的関数から呼び出され
internal override byte[] GeneratePDFDocument(pdfContent content) 
{ 
    Document document = new Document(PageSize.A4, 30f, 30f, 30f, 30f); 

    MemoryStream output = new MemoryStream(); 
    PdfWriter writer = PdfWriter.GetInstance(document, output); 
    document.Open(); 
    document.Add(new Paragraph("Hello World")); 
    byte[] response = output.ToArray(); 
    document.Close(); 
    return response; 
} 

私はFoxitのリーダー7が得られたPDFを開くと

public HttpResponseMessage PrintPDF(HttpRequestMessage req) 
{ 
    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); 
    byte[] pdfData = PrintReport.Print(printJobString); 
    result.Content = new ByteArrayContent(pdfData); 
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf"); 
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); 
    result.Content.Headers.ContentDisposition.FileName = "PrintPDF.pdf"; 
    return result; 
} 

:WebAPIのコントローラから呼び出され

public static byte[] Print(string jsonData) 
{ 
    PDFGeneratorBase generator; 
    generator = new ITextSharpGenerator(); 
    return generator.GeneratePDFDocument(view.GetViewData()); 
} 

。 2、エラーメッセージは "フォーマットエラー:PDFまたは破損していません"です。

私はここで間違っていますか?

+0

は、他のリーダで正しく読まファイルですか? MD5合計を確認できますか? –

答えて

2

バイト配列を取得する前に、ドキュメントを閉じる必要があります。ドキュメントを閉じると、ドキュメントの "終了"の内部バッファがフラッシュされます。これをスワップ:これにより

byte[] response = output.ToArray(); 
document.Close(); 

document.Close(); 
byte[] response = output.ToArray(); 
関連する問題