我正在使用iTextSharp 5.5.13,当我尝试使用希伯来语生成PDF时,它空了。 这是我的代码:我做错什么了?
public byte[] GenerateIvhunPdf(FinalIvhunSolution ivhun)
{
byte[] pdfBytes;
using (var mem = new MemoryStream())
{
Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(document, mem);
writer.PageEvent = new MyHeaderNFooter();
document.Open();
var font = new
Font(BaseFont.CreateFont("C:\\Downloads\\fonts\\Rubik-Light.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED), 14);
Paragraph p = new Paragraph("פסקת פתיחה")
{
Alignment = Element.ALIGN_RIGHT
};
PdfPTable table = new PdfPTable(2)
{
RunDirection = PdfWriter.RUN_DIRECTION_RTL
};
PdfPCell cell = new PdfPCell(new Phrase("מזהה", font));
cell.BackgroundColor = BaseColor.BLACK;
table.AddCell(cell);
document.Add(p);
document.Add(table);
document.Close();
pdfBytes = mem.ToArray();
}
return pdfBytes;
}
PDF变成空白
答案 0 :(得分:0)
我更改了一些代码细节,现在我明白了:
我的更改:
由于我的系统上未安装Rubik,因此必须将字体嵌入PDF中才能看到任何内容。因此,在创建BaseFont.NOT_EMBEDDED
时,我用BaseFont.EMBEDDED
替换了var font
:
var font = new Font(BaseFont.CreateFont("Rubik-Light.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED), 14);
Paragraph
类的工作您在创建Paragraph p
时未指定字体。因此,使用具有默认编码的默认字体。默认编码为 WinAnsiEncoding ,类似于Latin1,因此无法表示希伯来字符。我将您的Rubik字体实例添加到了Paragraph p
创建中:
Paragraph p = new Paragraph("פסקת פתיחה", font)
{
Alignment = Element.ALIGN_RIGHT
};
等等,出现了文字。
iText开发人员经常交流说,在iText 5.x和更早的从右至左脚本中,只有在某些情况下才能正确支持,例如在表格中,而不是在其他段落中立即添加到文档中。将您的Paragraph p
立即添加到Document document
时,其字母在输出中出现的顺序错误。
PdfPTable
工作您将PdfPTable table
定义为具有两列(new PdfPTable(2)
),但是随后仅添加了一个单元格。因此,table
甚至不包含一个完整的行。因此,iText在添加到文档中时不会绘制任何内容。
我将table
的定义更改为仅具有一列:
PdfPTable table = new PdfPTable(1)
{
RunDirection = PdfWriter.RUN_DIRECTION_RTL
};
此外,我注释掉了将单元格背景设置为黑色的行,因为通常很难用黑色读取黑色:
PdfPCell cell = new PdfPCell(new Phrase("מזהה", font));
//cell.BackgroundColor = BaseColor.BLACK;
table.AddCell(cell);
再次出现文字。
另一个可能的障碍是,当从您提供的URL中下载字体时,https://fonts.google.com/selection?selection.family=Rubik可以在选择抽屉的“定制”选项卡中看到默认情况下,下载中仅包含拉丁字符,特别是没有希伯来语:
我使用启用了所有语言选项的字体文件进行了测试: