html 标签在 html 使用 itextSharp 转换为 pdf 时未转换

html tags not converting when html to pdf convert using itextSharp

我正在尝试使用 iTextSharp 创建一个 pdf,它做到了。但它也在 pdf 中打印 html 标签,而不是将其作为围绕文本的设计

            Document pdfDoc = new Document(PageSize.A4, 25, 10, 25, 10);
            PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
            pdfDoc.Open();
            Paragraph Text = new Paragraph("<b>Hiii</b>");
            pdfDoc.Add(Text);
            pdfWriter.CloseStream = false;
            pdfDoc.Close();
            Response.Buffer = true;
            Response.ContentType = "application/pdf";
            Response.AddHeader("content-disposition", "attachment;filename=Example.pdf");
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.Write(pdfDoc);
            Response.End();
        }

它的输出是 Hiii,它在代码中看起来是粗体标记,但我想要 Hiii

您希望 iText 解析其布局元素 (Paragraph, ...) 文本中的 HTML 标签,但 iText 不会这样做。要在 iText 中获取“Hiii”而不是“Hiii”,您基本上有两个选择:

  • 对粗体文本明确使用粗体,对常规文本明确使用普通字体。

    var phrase = new Phrase();
    phrase.Add(new Chunk("REASON(S) FOR CANCELLATION:", boldFont));
    phrase.Add(new Chunk(" See Statutoryreason(s) designated by Code No(s) 1 on the reverse side hereof", normalFont));
    

    这在评论中对 the question @Ratheesh pointed to 的回答中有详细解释。特别是,您可以通过明确命名粗体字体来获得粗体字体,例如

    var normalFont = FontFactory.GetFont(FontFactory.HELVETICA, 12);
    var boldFont = FontFactory.GetFont(FontFactory.HELVETICA_BOLD, 12);
    

    或者你可以让iText找一个字体家族的粗体;如果 iText 找不到它,它将通过沿着字体字形的轮廓画一条线来创建普通字体的粗体版本:

    Font verdanaBold = FontFactory.GetFont("Verdana", 7f, Font.BOLD);
    
  • 使用 XMLWorker 解析 XHTML 并从中生成相应样式的布局元素。

    这在堆栈溢出的许多答案中也有解释,例如参见 [​​=19=] 中的 CreateSimpleHtmlParagraph 方法:

    private static Phrase CreateSimpleHtmlParagraph(String text)
    {
        var p = new Phrase();
        var mh = new MyElementHandler();
        using (TextReader sr = new StringReader("<html><body><p>" + text + "</p></body></html>"))
        {
            XMLWorkerHelper.GetInstance().ParseXHtml(mh, sr);
        }
        foreach (var element in mh.elements)
        {
            foreach (var chunk in element.Chunks)
            {
                p.Add(chunk);
            }
        }
        return p;
    }
    

    (助手 class MyElementHandler 显示在参考答案中。)