首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自html的iTextSharp XMLWorker页脚

来自html的iTextSharp XMLWorker页脚
EN

Stack Overflow用户
提问于 2014-06-25 12:15:26
回答 1查看 2.9K关注 0票数 3

我到处找这个问题,我还是找不到解决办法,这很烦人。

我使用xmlworker (itextSharp2.1)从html创建pdf。这对我来说很好,但是我需要添加页脚和页眉到每一页中,每个页面都是由已传递的html填充的。例如,我将这个字符串传递给作为footer的函数。

代码语言:javascript
复制
<table>
    <tr>
        <td>كند / źćąśęłżźń</td>
        <td>something</td>
        <td><img src="i_03_x2.png"/></td>
    </tr>
</table>

我需要使用XMLWorker.GetInstance()将其解析为list,并将其作为脚注添加:

代码语言:javascript
复制
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中的第二和第三列显示了,但是第一列不见了,所以我的问题是:

是否可以将我的字体(统一码)附加到

代码语言:javascript
复制
XMLWorkerHelper.GetInstance().ParseXHtml 

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-26 11:18:00

好的,我知道了,首先,我需要完全从ParseXHtml函数中辞职。我在这个管道中使用了标准的XMLWorker:

代码语言:javascript
复制
PdfWriterPipeline pdf = new ElementHandlerPipeline(handler, null)

而不是默认的:

代码语言:javascript
复制
PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);

然后,我能够迭代处理程序中的元素。

代码语言:javascript
复制
foreach (var element in handler.elements)
{
    singleCell.AddElement(element);
}

footerTable.AddCell(singleCell);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24408418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档