我到处寻找这个问题,我仍然无法得到工作解决方案,这非常烦人。
我使用xmlworker(itextsharp 2.1)从html创建pdf。这对我来说很完美,但是我需要在每个被传递的html填充的页面中添加页脚和标题。在示例中,我将此字符串传递给footer 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)作为字体提供程序。 任何帮助将不胜感激
答案 0 :(得分:-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);