3

我到处搜索这个问题,但我仍然无法得到有效的解决方案 wrrr,这很烦人。

我使用 xmlworker (itextsharp 2.1) 从 html 创建 pdf。这对我来说非常有效,但我需要为每个由传递的 html 填充的页面添加页脚和页眉。在示例中,我将此字符串传递给作为页脚 html 的函数

<table>
    <tr>
        <td>كند / źćąśęłżźń</td>
        <td>something</td>
        <td><img src="i_03_x2.png"/></td>
    </tr>
</table>

我需要使用 XMLWorker.GetInstance() 将其解析为列表并将其添加为页脚:

public override void OnEndPage(PdfWriter writer, Document document)
{
    PdfPTable footerTable = new PdfPTable(1);
    footerTable.TotalWidth = width;
    PdfPCell singleCell = new PdfPCell();
    singleCell.BorderWidth = 2f;

    DirectHandler handler = new DirectHandler();
    using (TextReader sr = new StringReader(HTMLtoPDF.footer.HTML))
    {
        XMLWorkerHelper.GetInstance().ParseXHtml(handler, sr);
    }

    foreach (var element in handler.elements)
    {
        singleCell.AddElement(element);
    }

    footerTable.AddCell(singleCell);
    footerTable.WriteSelectedRows(0, -1, left, bottom, writer.DirectContent);
}

public class DirectHandler : IElementHandler
{
    public List<IElement> elements = new List<IElement>();
    public void Add(IWritable w)
    {
        if (w is WritableElement)
        {
            elements.AddRange(((WritableElement)w).Elements());
        }
    }
}

现在来自 html 的第二列和第三列显示,但缺少第一列,所以我的问题是:

是否可以将我的字体(unicode arial)附加到

XMLWorkerHelper.GetInstance().ParseXHtml 

使用我的处理程序和字体?ParseXHtml 函数有多个重载,但我需要使用 DirectHandler 作为 IElement 处理程序和 MY FONT (arialuni.ttf) 作为字体提供程序。任何帮助,将不胜感激

4

1 回答 1

-1

好的,我首先想到了这一点 - 我需要完全退出 ParseXHtml 函数。我在这个管道中使用了标准 XMLWorker:

PdfWriterPipeline pdf = new ElementHandlerPipeline(handler, null)

而不是默认的:

PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);

然后我能够遍历处理程序中的元素

foreach (var element in handler.elements)
{
    singleCell.AddElement(element);
}

footerTable.AddCell(singleCell);
于 2014-06-26T11:18:00.280 回答