简体   繁体   中英

How to print a PDF from a web page

Does anybody know how to make a print page button print a pdf document?

At the moment i'm using

<a href="javascript:window.print()" class="print_it" title="Print page">Print Page</a>

Obviously that just prints the page though. I have had to create pdf's for each page and thought it would be easier just to print the pdf instead of the page (Cross browser printing styles is kinda sucking ;).

Any ideas?

There is no standard way to print anything in PDF in any browser, such as on the Windows platform. On the Mac, there is always an option to print something as a PDF file, so regular printing will do.

I suggest you use Itextsharp. If you are using asp.net c#, this code works for you. Runs in the server side though. You can just put the html inside a panel to make it readable in the server.

    /// import these namespaces 
    using System.IO;
    using iTextSharp.text;
    using iTextSharp.text.pdf;
    using iTextSharp.text.html.simpleparser;
    using System.Web.Services;
    using System.Text;

    /// Call this method whenever you need to convert 
    /// the html content inside the panel which runs in the server side. 
    [WebMethod]
    public void ConvertHtmlStringToPDF()
    {
        StringBuilder sb = new StringBuilder(); 
        StringWriter tw = new StringWriter(sb); 
        HtmlTextWriter hw = new HtmlTextWriter(tw); 
        pnlPDF.RenderControl(hw);
        string htmlDisplayText = sb.ToString(); 

        Document document = new Document();
        MemoryStream ms = new MemoryStream();
        PdfWriter writer = PdfWriter.GetInstance(document, ms);
        StringReader se = new StringReader(htmlDisplayText);
        HTMLWorker obj = new HTMLWorker(document);
        document.Open();
        obj.Parse(se);
        // step 5: we close the document
        document.Close();
        Response.Clear();
        Response.AddHeader("content-disposition", "attachment; filename=report.pdf");
        Response.ContentType = "application/pdf";
        Response.Buffer = true;
        Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
        Response.OutputStream.Flush();
        Response.End();
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM