在iTextSharp中使用富文本值进行粗体扩展

时间:2011-11-29 18:28:09

标签: itextsharp

是否可以使用iTextSharp在句子中加粗单个单词?我正在处理来自xml的大段文本,我试图加粗几个单词,而不必将字符串分成单个短语。

例如:

document.Add(new Paragraph("this is <b>bold</b> text"));

应输出......

这是粗体文字

3 个答案:

答案 0 :(得分:2)

不确定您的Xml有多复杂,但请尝试XMLWorker。这是一个使用ASP.NET HTTP处理程序的工作示例:

<%@ WebHandler Language="C#" Class="boldText" %>
using System;
using System.IO;
using System.Web;
using iTextSharp.text;  
using iTextSharp.text.pdf;
using iTextSharp.text.xml;
using iTextSharp.tool.xml;

public class boldText : IHttpHandler {
  public void ProcessRequest (HttpContext context) {
    HttpResponse Response = context.Response;
    Response.ContentType = "application/pdf";  
    StringReader xmlSnippet = new StringReader(
      "<p>This is <b>bold</b> text</p>"
    );
    using (Document document = new Document()) {
      PdfWriter writer = PdfWriter.GetInstance(
        document, Response.OutputStream
      );
      document.Open();
      XMLWorkerHelper.GetInstance().ParseXHtml(
        writer, document, xmlSnippet
      );      
    }
  }
  public bool IsReusable { get { return false; } }
}

您可能需要在将Xml发送到XMLWorker之前对其进行预处理。 (请注意该片段与您的片段略有不同)最近发布了解析HTML / Xml的支持,因此您的里程可能会有所不同。

答案 1 :(得分:2)

我知道这是一个古老的问题,但我无法在这里找到适合我的其他例子。但是在Chucks中添加不同字体的文本就可以了。

//define a bold font to be used
Font boldFont = FontFactory.GetFont(FontFactory.HELVETICA_BOLD, 12);

//add a phrase and add Chucks to it
var phrase2 = new Phrase();
phrase2.Add(new Chunk("this is "));
phrase2.Add(new Chunk("bold", boldFont));
phrase2.Add(new Chunk(" text"));

document.Add(phrase2);

enter image description here

答案 2 :(得分:0)

这是另一个使用ParseHtml的不同重载并返回一个Phrase而不是直接将其写入文档的XMLWorker示例。

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;
}

private class MyElementHandler : IElementHandler
{
    public List<IElement> elements = new List<IElement>();
    public void Add(IWritable w)
    {
        if (w is iTextSharp.tool.xml.pipeline.WritableElement)
        {
            elements.AddRange(((iTextSharp.tool.xml.pipeline.WritableElement)w).Elements());
        }
    }
}