我正在尝试使用 IText7 创建 Pdf 文档。尽管表格看起来符合预期,但发现了一个大问题,这不显示阿拉伯字母。
我尝试添加新字体并更改编码。 我以错误的方向显示阿拉伯字母,并且它们被分开,将基本方向从右向左更改没有帮助。
这是代码的一部分:
string font = "naskh.ttf";
PdfFontFactory.Register(font);
FontProgram fontProgram = FontProgramFactory.CreateFont(font, true);
PdfFont f = PdfFontFactory.CreateFont(font,true);
Cell cell = new Cell(1, 3)
.Add(new Paragraph(" English عربي "))
.SetFont(f).SetFontScript(UnicodeScript.ARABIC)
.SetFontSize(33).SetBaseDirection(BaseDirection.RIGHT_TO_LEFT)
.SetFontColor(DeviceGray.WHITE)
.SetBackgroundColor(new DeviceRgb(80, 140, 80))
.SetTextAlignment(TextAlignment.CENTER);
结果是这样的:
我已经尝试了网上能找到的所有内容,其中很多都是java或旧版本,我尝试将它们更改为在c# Itext7上工作,但仍然没有结果 我最近的床是和
PdfFont f = PdfFontFactory.CreateFont(alaw, "Identity-H", true);
我有 3 个字母顺序错误
我什至尝试使用
\u0644\u0648\u0631\u0627\u0646\u0633 \u0627\u0644\u0639\u0631\u0628
(从答案中复制为字符串,但仍然没有显示。
我无法使用付费附加组件 有什么办法可以写阿拉伯语吗?
添加语言处理器:
LanguageProcessor languageProcessor = new ArabicLigaturizer();
并像这样修改单元格或 PdfDocument:
com.itextpdf.kernel.pdf.PdfDocument tempPdfDoc = new com.itextpdf.kernel.pdf.PdfDocument(new PdfReader(pdfFile.getPath()), TempWriter);
com.itextpdf.layout.Document TempDoc = new com.itextpdf.layout.Document(tempPdfDoc);
com.itextpdf.layout.element.Paragraph paragraph0 = new com.itextpdf.layout.element.Paragraph(languageProcessor.process("الاستماره الالكترونية--الاستماره الالكترونية--الاستماره الالكترونية--الاستماره الالكترونية"))
.setFont(f).setBaseDirection(BaseDirection.RIGHT_TO_LEFT)
.setFontSize(15);
最终结果会是这样的:
String font = "your Arabic font";
PdfFontFactory.register(font);
FontProgram fontProgram = FontProgramFactory.createFont(font, true);
PdfFont f = PdfFontFactory.createFont(fontProgram, PdfEncodings.IDENTITY_H);
LanguageProcessor languageProcessor = new ArabicLigaturizer();
com.itextpdf.kernel.pdf.PdfDocument tempPdfDoc = new
com.itextpdf.kernel.pdf.PdfDocument(new PdfReader(pdfFile.getPath()), TempWriter);
com.itextpdf.layout.Document TempDoc = new
com.itextpdf.layout.Document(tempPdfDoc);
com.itextpdf.layout.element.Paragraph paragraph0 = new
com.itextpdf.layout.element.Paragraph(languageProcessor.process("الاستماره الالكترونية--الاستماره الالكترونية--الاستماره الالكترونية--الاستماره الالكترونية"))
.setFont(f).setBaseDirection(BaseDirection.RIGHT_TO_LEFT)
.setFontSize(15);
//看看我如何使用 setBaseDirection & 并且不使用 TextAlignment ,没有它它也能工作
对于 C# 这对我有用(字体类型非常重要,我使用了 arial 阿拉伯语)
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
using iText.Kernel.Geom;
using iText.IO.Font;
using iText.Kernel.Font;
using iTextSharp.text.pdf; // used iTextSharp for ArabicLigaturizer class and you have to use it unless you gonna get reversed words
using PdfWriter = iText.Kernel.Pdf.PdfWriter;
using PdfDocument = iText.Kernel.Pdf.PdfDocument;
using PdfEncodings = iText.IO.Font.PdfEncodings;
using PdfFont = iText.Kernel.Font.PdfFont;
string arabicFontPath = @"Full path to your font\alfont_com_arial-1.ttf";
FontProgram fontProgram = FontProgramFactory.CreateFont(arabicFontPath, true);
PdfFont f = PdfFontFactory.CreateFont(fontProgram, PdfEncodings.IDENTITY_H);
var arabicLanguageProcessor = new ArabicLigaturizer();
table.AddCell(new Paragraph(arabicLanguageProcessor.Process(item.NameAr ?? DefaultValue))
.SetFont(f)
.SetBaseDirection(BaseDirection.RIGHT_TO_LEFT)
.SetFontSize(14));