使用iTextSharp.dll生成PDF时耗尽PDF页面

时间:2012-12-04 10:49:56

标签: c# .net pdf itextsharp

我使用iTextSharp.i生成PDF有一个HTMl页面,我正在阅读HTML页面,然后生成PDF。但问题是页面的一半是PDF格式,而另一半页面用完了PDF页面中的页面意味着页面的一半以PDF格式显示。而页面的一半以PDF格式剪切。

我的代码在Load Event中就像这样。

    string fileContents;
    string FilePath = Server.MapPath("print-withoutlogin.html");
    StreamReader mstrFileStreamReader = new StreamReader(FilePath);
    try
    {
        fileContents = mstrFileStreamReader.ReadToEnd();
        byte[] result = createPDF(fileContents.ToString()).GetBuffer();

        Response.Clear();
        Response.AddHeader("Content-Length", result.Length.ToString());
        Response.ContentType = "application/pdf";
        Response.AddHeader("Accept-Ranges", "bytes");
        Response.Buffer = true;
        Response.AddHeader("Expires", "0");
        Response.AddHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
        Response.AddHeader("Pragma", "public");
        Response.AddHeader("content-Transfer-Encoding", "binary");
        Response.AddHeader("Content-Disposition", "attachment; filename=kartik.pdf");
        Response.BinaryWrite(result);
        Response.Flush();
        Response.End();
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        mstrFileStreamReader.Close();
    }

 private MemoryStream createPDF(string html)
 {
    MemoryStream msOutput = new MemoryStream();
    TextReader reader = new StringReader(html);

    Document document = new Document(PageSize.A4, 0, 0, 50, 50);

    PdfWriter writer = PdfWriter.GetInstance(document, msOutput);
    HTMLWorker worker = new HTMLWorker(document);
    //worker.SetStyleSheet(styles);


    // step 4: we open document and start the worker on the document 
    document.Open();
    worker.StartDocument();
    // step 5: parse the html into the document      
    worker.Parse(reader);
    // step 6: close the document and the worker     
    worker.EndDocument();
    worker.Close();
    document.Close();

    return msOutput;
 }

1 个答案:

答案 0 :(得分:0)

您是否考虑过使用Crystal Reports?我发现它更容易,你可以使用

pdfStream = (MemoryStream)report.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);