iTextSharp - HTML转PDF时缺少一些土耳其字符

3

当我尝试从HTML生成PDF时,一些土耳其字符如ĞÜŞİÖÇğüşıöç在PDF中丢失,我看到这些字符的位置上是一个空格,但我希望打印出该字符。

我的代码是:

public virtual void print pdf(string html, int id)
{
    String htmlText = html.ToString();
    Document document = new Document();
    string filePath = HostingEnvironment.MapPath("~/Content/Pdf/");
    PdfWriter.GetInstance(document, new FileStream(filePath + "\\pdf-"+id+".pdf", FileMode.Create));
    document.Open();
    iTextSharp.text.html.simpleparser.HTMLWorker hw =
                     new iTextSharp.text.html.simpleparser.HTMLWorker(document);

    hw.Parse(new StringReader(htmlText));
    document.Close();
}

如何在PDF上打印所有土耳其字符?

可能是重复的问题:iTextSharp 5 波兰字符 - Chris Haas
可能是重复的问题itextSharp - htmlString to pdf Unicode are missing - Mitat Koyuncu
4个回答

7
我终于找到了一个解决这个问题的方法,通过这个方法,您可以打印所有土耳其字符。
    String htmlText = html.ToString();
    Document document = new Document();
    string filePath = HostingEnvironment.MapPath("~/Content/Pdf/");
    PdfWriter.GetInstance(document, new FileStream(filePath + "\\pdf-"+Name+".pdf", FileMode.Create));
    document.Open();

    iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(document);
    FontFactory.Register(Path.Combine(_webHelper.MapPath("~/App_Data/Pdf/arial.ttf")),  "Garamond");   // just give a path of arial.ttf 
    StyleSheet css = new StyleSheet();
    css.LoadTagStyle("body", "face", "Garamond");
    css.LoadTagStyle("body", "encoding", "Identity-H");
    css.LoadTagStyle("body", "size", "12pt");

    hw.SetStyleSheet(css);

    hw.Parse(new StringReader(htmlText));

3
这段代码可以解决我的问题:
var pathUpload = Server.MapPath($"~/Test.pdf");
using (var fs = System.IO.File.Create(pathUpload))
{
   using (var doc = new Document(PageSize.A4, 0f, 0f, 10f, 10f))
   {
       using (var writer = PdfWriter.GetInstance(doc, fs))
       {
           doc.Open();
           BaseFont baseFont = BaseFont.CreateFont("C:\\Windows\\Fonts\\Arial.ttf", "windows-1254", true);
           Font fontNormal = new Font(baseFont, 24, Font.NORMAL);

           var p = new Paragraph("Test paragrapgh İÇşıĞğŞçöÖ", fontNormal);
           doc.Add(p);
           doc.Close();
       }
   } }

1

经过几天的研究,我遇到了同样的问题;

BaseFont myFont = BaseFont.CreateFont(@"C:\windows\fonts\arial.ttf", "windows-1254", BaseFont.EMBEDDED);  
Font fontNormal = new Font(myFont);

每次需要编写具有特殊字符的文本时,请按照以下方式操作:
doc.Add(new Paragraph("İıĞğŞşÜüÖöŞşÇç", fontNormal));     // a new paragraph
results.Add(new ListItem("İıĞğŞşÜüÖöŞşÇç", fontNormal));  // a new list item

此外,这可能需要用于iTextSharp以允许字体更改。
using Font = iTextSharp.text.Font; 

它像魔法一样运作 :)

0

我曾经遇到过类似的问题,我无法让CP1254编码正常工作,但是我找到了另一种解决方案,对我很有效。

在CSS中只需添加 "font-family: Arial;" 并将其放置在外部div标签上即可。

.className{
   font-family: Arial;
}

<div class="className">
...
</div>

我在这里找到了答案:如何使用iText和XMLWorker(HTML转PDF / A过程)生成有效的PDF / A文件

花费了很长时间才找到这个解决方案,但我是通过搜索字体解决方案来显示土耳其字符而找到它的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接