【问题标题】:How to specify the position of parsed XHTML using itextsharp如何使用 itextsharp 指定已解析 XHTML 的位置
【发布时间】:2014-12-14 08:51:03
【问题描述】:

我使用 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 并用元素填充它:

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();

【问题讨论】:

  • 感谢您提供 C# 语法。这肯定有助于进一步的参考。我总是很难将我的答案从 Java 翻译成 C#,所以当有人以工作 C# 代码的形式提供关于我的 Java 答案的反馈时,它会有所帮助。

标签: xhtml itextsharp


【解决方案1】:

你需要结合 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 检索到的所有元素,然后go() 添加该内容。

【讨论】:

    猜你喜欢
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 2022-07-26
    相关资源
    最近更新 更多