如何使用itextsharp指定解析的XHTML的位置

时间:2014-12-14 08:51:04

标签: xhtml itextsharp

我使用itextsharp来创建pdf。我需要在其上放置XHTML,所以我使用XMLWorkerHelper类:

iTextSharp.tool.xml.XMLWorkerHelper worker = iTextSharp.tool.xml.XMLWorkerHelper.GetInstance();
worker.ParseXHtml(pdfWrite, doc, new StringReader(sb.ToString()));

但是我想为解析的XHTML指定一个位置。我该怎么做?

修改

我想我会在其他人遇到这个问题的情况下发布代码。下面提供的链接是针对JAVA的,而C#中的工作则有点不同。

首先,您需要一个用于收集元素的类:

class ElementHandlerClass : iTextSharp.tool.xml.IElementHandler
{
    public List<IElement> elements = new List<IElement>();

    public void Add(iTextSharp.tool.xml.IWritable input)
    {
        if (input is iTextSharp.tool.xml.pipeline.WritableElement)
        {
            elements.AddRange(((iTextSharp.tool.xml.pipeline.WritableElement)input).Elements());
        }
    }
}

然后你用它

 ElementHandlerClass ehc = new ElementHandlerClass();
 worker.ParseXHtml(ehc, new StringReader(sb.ToString()));

现在你有了元素。下一步是创建ColumnText并使用Elements填充它:

iTextSharp.text.pdf.ColumnText ct = new iTextSharp.text.pdf.ColumnText(pdfWrite.DirectContent);
ct.SetSimpleColumn(200, 300, 300, 500);
foreach (IElement element in ehc.elements)
     ct.AddElement(element);
ct.Go();

1 个答案:

答案 0 :(得分:0)

您需要在StackOverflow上结合前两个问题的答案。

您需要的第一个答案是How to get particular html table contents to write it in pdf using itext

在本回答中,您将学习如何将XHTML源解析为Element个对象列表。

获得此列表后,您需要itext ColumnText ignores alignment

的答案

您可以创建ColumnText对象,使用setSimpleColumn()方法定义矩形,使用带有addElement()方法的XML Worker添加从XHTML检索到的所有元素,并{{1添加该内容。