首页 > 解决方案 > ITextSharp v5.5.13.0 XMLWorker 土耳其语字符问题

问题描述

我使用了 iTextSharp,所有土耳其语字符都消失了。html inline css 属性也适用于 table 元素,但不适用于 div 元素。

我尝试了很多编码转换示例代码,但没有找到任何结果。

我的示例代码:

public static byte[] HtmlToPdfItextSharp(string HTMLCONTENTSTRING, List<string> cssFiles = null)
{
    using (var ms = new MemoryStream())
    {
        Document pdfDoc = new Document(PageSize.A4.Rotate(), 10, 10, 10, 10);

        BaseFont STF_Helvetica_Turkish = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, "CP1254", BaseFont.NOT_EMBEDDED);
        Font fontNormal = new Font(STF_Helvetica_Turkish, 12, Font.NORMAL, BaseColor.BLACK);


        string fontPath = Path.Combine(Path.Combine(Server.MapPath("~/App_Data/Pdf/arial.ttf")));
        XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
        fontProvider.UseUnicode = true;
        fontProvider.Register(fontPath);
        CssAppliers ca = new CssAppliersImpl(fontProvider);

        var pdfWriter = PdfWriter.GetInstance(pdfDoc, ms);

        pdfDoc.Open();
        pdfWriter.DirectContent.SetFontAndSize(STF_Helvetica_Turkish, 12);
        pdfWriter.CloseStream = false;

        var htmlContext = new HtmlPipelineContext(null);

        htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());

        ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
        cssFiles.ForEach(e => cssResolver.AddCssFile(e, true));

        var pp = new PdfWriterPipeline(pdfDoc, pdfWriter);
        IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, pp));

        XMLWorker worker = new XMLWorker(pipeline, true);
        XMLParser parser = new XMLParser(worker);


        parser.Parse(new MemoryStream(Encoding.UTF8.GetBytes(HTMLCONTENTSTRING)));

        pdfDoc.Close();

        return ms.GetBuffer();
    }
}

标签: itext

解决方案


我更新了我的代码并添加了样式表文件(字体家族:arial;),我解决了字符,但它需要很长时间我的新更新功能,如:

public static byte[] HtmlToPdfItextSharp(string HTMLCONTENTSTRING, List<string> cssFiles = null)
{
    using (var ms= new MemoryStream())
    {
        Document pdfDoc = new Document(PageSize.A4.Rotate(), 10, 10, 7, 10);

        var pdfWriter = PdfWriter.GetInstance(pdfDoc, ms);
        pdfWriter.CloseStream = false;
        pdfDoc.Open();

        var htmlContext = new HtmlPipelineContext(null);

        htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());

        ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
        cssFiles.ForEach(e => cssResolver.AddCssFile(e, true));

        var pp = new PdfWriterPipeline(pdfDoc, pdfWriter);
        IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, pp));

        XMLWorker worker = new XMLWorker(pipeline, true);
        XMLParser parser = new XMLParser(worker);
        parser.Parse(new MemoryStream(Encoding.UTF8.GetBytes(pHtmlIcerik)));

        pdfDoc.Close();
        return ms.ToArray();
    }
}

CSS代码:

 body {
     font-family:Arial;
}
table{
    font-family:Arial;
}
td{
    font-family:Arial;
}

推荐阅读