簡體   English   中英

如何使用itext 7從HTML div生成PDF並將其保存到.net服務器上的文件夾中

[英]How to use itext 7 to generate a PDF from an HTML div and save it to a folder on the server in .net

我正在嘗試創建一個CV構建器,將用戶編輯的CV保存到我項目中的文件夾中,以進行進一步的處理,以通過電子郵件發送它,我已經達到了使用itext來創建HTML div的PDF的目的,但是沒有CSS或我從數據庫返回的任何文本值。 通過一些研究,我發現可以通過使用itext 7和附加的pdfHTML來解決我的問題,但是找不到如何將其與ASP.NET代碼一起使用的適當示例。 非常感謝您的幫助。

波紋管是我用來生成PDF的單擊按鈕事件的代碼

    protected void ButtonDownload_Click(object sender, EventArgs e)
{
    Response.ContentType = "application/pdf";
   //Response.AddHeader("content-disposition", "attachment;filename=Panel.pdf");
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);

    contentdiv.RenderControl(hw); //convert the div to PDF
    StringReader sr = new StringReader(sw.ToString());
    Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
    HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
    PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
    pdfDoc.Open();
    htmlparser.Parse(sr);
    pdfDoc.Close();
    string filename = base.Server.MapPath("~/PDF/" + "UserCV.pdf");
    HttpContext.Current.Request.SaveAs(filename, false);
    Response.End();
}

這張圖片顯示了我單擊下載按鈕時得到的pdf結果 ,這是html頁面,它正在嘗試轉換 。HTML頁面標題下方的文本是Labels,其值是通過從數據庫中檢索值來設置的

這是有關如何使用pdfHTML

該示例相當廣泛,因為它還設置文檔屬性並注冊自定義字體。

public void createPdf(String src, String dest, String resources) throws IOException {
try {
    FileOutputStream outputStream = new FileOutputStream(dest);

    WriterProperties writerProperties = new WriterProperties();
    //Add metadata
    writerProperties.addXmpMetadata();

    PdfWriter pdfWriter = new PdfWriter(outputStream, writerProperties);

    PdfDocument pdfDoc = new PdfDocument(pdfWriter);
    pdfDoc.getCatalog().setLang(new PdfString("en-US"));
    //Set the document to be tagged
    pdfDoc.setTagged();
    pdfDoc.getCatalog().setViewerPreferences(new PdfViewerPreferences().setDisplayDocTitle(true));

    //Set meta tags
    PdfDocumentInfo pdfMetaData = pdfDoc.getDocumentInfo();
    pdfMetaData.setAuthor("Joris Schellekens");
    pdfMetaData.addCreationDate();
    pdfMetaData.getProducer();
    pdfMetaData.setCreator("JS");
    pdfMetaData.setKeywords("example, accessibility");
    pdfMetaData.setSubject("PDF accessibility");
    //Title is derived from html

    // pdf conversion
    ConverterProperties props = new ConverterProperties();
    FontProvider fp = new FontProvider();
    fp.addStandardPdfFonts();
    fp.addDirectory(resources);//The noto-nashk font file (.ttf extension) is placed in the resources

    props.setFontProvider(fp);
    props.setBaseUri(resources);
    //Setup custom tagworker factory for better tagging of headers
    DefaultTagWorkerFactory tagWorkerFactory = new AccessibilityTagWorkerFactory();
    props.setTagWorkerFactory(tagWorkerFactory);

    HtmlConverter.convertToPdf(new FileInputStream(src), pdfDoc, props);
    pdfDoc.close();

} catch (Exception e) {
    e.printStackTrace();
}

}

這里最相關的行是

    HtmlConverter.convertToPdf(new FileInputStream(src), pdfDoc, props);

從本質pdfHTML ,這告訴pdfHTML執行inputstream的轉換(由src指定),將內容放入pdfDoc並使用給定的ConverterProperties (由props指定)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM