C# 使用itextSharp将html转换为pdf时不转换html标记

C# 使用itextSharp将html转换为pdf时不转换html标记,c#,asp.net,pdf,itext,C#,Asp.net,Pdf,Itext,我正在尝试使用iTextSharp创建pdf,它做到了。但它也在pdf中打印html标记,而不是将其作为围绕文本的设计 Document pdfDoc = new Document(PageSize.A4, 25, 10, 25, 10); PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDoc, Response.OutputStream); pdfDoc.Open();

我正在尝试使用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();
        }
documentpdfdoc=新文档(PageSize.A4,25,10,25,10);
PdfWriter PdfWriter=PdfWriter.GetInstance(pdfDoc,Response.OutputStream);
pdfDoc.Open();
段落文本=新段落(“Hiii”);
添加(文本);
pdfWriter.CloseStream=false;
pdfDoc.Close();
Response.Buffer=true;
Response.ContentType=“application/pdf”;
AddHeader(“内容处置”、“附件;文件名=Example.pdf”);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
响应写入(pdfDoc);
Response.End();
}

它的输出是带有粗体标记的Hiii,就像它在代码中的样子,但我希望Hiii

您希望iText在其布局元素的文本中解析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));
    
    这在评论中的答案中有详细解释。特别是,您可以通过显式命名粗体字体来获得粗体字体,例如

    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并从中生成相应的样式化布局元素

    关于堆栈溢出的许多回答中也解释了这一点,例如,请参见中的
    CreateSimpleHtmlParagraph
    方法:

    私有静态短语CreateSimpleHtmlParagraph(字符串文本)
    {
    var p=新短语();
    var mh=新的迈勒门汉德勒();
    使用(TextReader sr=new StringReader(“”+text+”

    ”) { XMLWorkerHelper.GetInstance().ParseXHtml(mh,sr); } foreach(mh.元素中的var元素) { foreach(element.Chunks中的var chunk) { p、 添加(块); } } 返回p; }
    (参考答案中显示了助手类
    MyElementHandler
    。)


请参考此SO链接,正如@Ratheesh所指出的答案所示,对您想要加粗的内容使用加粗字体。。或者,使用iText XMLWorker使用XHTML为iText文档生成元素。
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;
}