Html到pdf Unicode字符未在pdfptable中显示

时间:2017-03-23 18:04:21

标签: c# html pdf itext

我正在从html标记写一个pdf文件。在我的代码片段中,正在成功生成pdf,并且还在表上呈现了unicode字符。
以下是我的代码段:

void GeneratePdfFromHtml()
{
    const string outputFilename = @"c:\report.pdf";
    const string inputFilename = @"C:\report.html";

    using (var input = new FileStream(inputFilename, FileMode.Open))
    using (var output = new FileStream(outputFilename, FileMode.Create))
    {
        CreatePdf(input, output);
    }
}

并且此方法使用unicode支持创建pdf:

void CreatePdf(Stream htmlInput, Stream pdfOutput)
{
    using (var document = new Document(PageSize.A4, 30, 30, 30, 30))
    {
        var writer = PdfWriter.GetInstance(document, pdfOutput);
        var worker = XMLWorkerHelper.GetInstance();

        document.Open();

        worker.ParseXHtml(writer, document, htmlInput, null, Encoding.Unicode, new UnicodeFontFactory());

        document.Close();
    }
}

这是一个提供所需字体的助手类:

public class UnicodeFontFactory : FontFactoryImp
{
    private static readonly string FontPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
          "ARIALUNI.ttf");

    private readonly BaseFont _baseFont;

    public UnicodeFontFactory()
    {
        _baseFont = BaseFont.CreateFont(FontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

    }

    public override iTextSharp.text.Font GetFont(string fontname, string encoding, bool embedded, float size, int style, BaseColor color,
          bool cached)
    {
        return new iTextSharp.text.Font(_baseFont, size, style, color);
    }
}

问题这会在Pdf文档页面上绘制结果内容,但我希望在pdfptable单元格中绘制。

我试图实现这一目标:

void CreatePdf(string htmltext)
{
    using (var document = new Document(PageSize.A4, 30, 30, 30, 30))
    {
        document.Open();

        PdfPTable table = new PdfPTable(1);
        PdfPCell cell = new PdfPCell();
        List<IElement> elementsIzv = XMLWorkerHelper.ParseToElementList(htmltext, null);
        foreach (IElement e in elementsIzv)
        {
            cell.AddElement(e);
        }
        table.AddCell(cell);
        document.Add(table);

        document.Close();
    }
}

此片段会截断特殊字符。请以正确的方式指导我,任何替换itextsharp也是可以接受的。

0 个答案:

没有答案