0

itextsharp ..を使用して既にpdfを生成し、ローカルサーバーに保存しています。このPDFを別のボタンクリックでダウンロードしたい。PDF 生成のコードは正常に動作しています。ダウンロードが行われましたが、開こうとしてエラーが発生しました。「サポートされているファイル タイプではないか、ファイルが破損しているためです。

protected void createpdf_Click(object sender, EventArgs e)
{
    fs = new FileStream(Server.MapPath("pdf") + "\\" + "First PDF document.pdf",     FileMode.Create);

    document = new Document(PageSize.A4, 25, 25, 30, 30);

    writer = PdfWriter.GetInstance(document, fs);


    document.Open();

    document.Add(new Paragraph("Pdf Geneartion!"));


    document.Close();

    writer.Close();

    fs.Close();
}

PDFをダウンロードするためのコード

protected void download_Click(object sender, EventArgs e)
{
    try
    {
        fs = new FileStream(Server.MapPath("pdf") + "\\" + "FirstPDFdocument1.pdf", FileMode.Create);

        document = new Document(PageSize.A4, 25, 25, 30, 30);

        writer = PdfWriter.GetInstance(document, fs);



        using (MemoryStream ms = new MemoryStream())
        {
            document.Open();
            Response.Clear();

            Response.ContentType = "pdf/application";
            Response.AddHeader("content-disposition", "attachment;filename=PDFdocument1.pdf");

            Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
        }
        writer.Close();
        fs.Close();
    }
    catch (Exception ex)
    {
        Response.Write(ex.ToString());
    }

}
4

1 に答える 1

0

を除いて、すべてが多かれ少なかれ正しいように見えますContentTypeapplication/pdfの代わりにする必要がありpdf/applicationます。また、@lc が指摘しているように、書き込みMemoryStreamが行われているようには見えません。代わりに次のようにしてみてください。

using (MemoryStream ms = new MemoryStream())
        {
            PdfWriter.GetInstance(document, ms);  // added
            document.Open();
            Response.Clear();

            Response.ContentType = "application/pdf";  // changed
            Response.AddHeader("content-disposition", "attachment;filename=PDFdocument1.pdf");

            Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
        }
于 2013-03-25T09:22:57.823 に答える