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の2番目と3番目の列が表示されますが、最初の列が欠落しているため、私の質問は次のとおりです。

私のフォント (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 に答える