FO.NET创建的PDF元数据中的西里尔字母

时间:2011-10-12 10:38:03

标签: pdf character-encoding internationalization metadata xsl-fo

有没有人成功地在FO.NET生成的PDF文件的元数据中显示西里尔字母?我尝试了以下代码,但生成的PDF的元数据仅显示“标题:??????”:

FonetDriver driver = FonetDriver.Make();

PdfRendererOptions options = new PdfRendererOptions();
options.FontType = FontType.Embed;
options.Title = "Title: Услуги";
driver.Options = options;

driver.Render("Input_cyrillic.fo", "Output.pdf");

2 个答案:

答案 0 :(得分:0)

Here是其论坛讨论的链接。似乎他们根本不支持Unicode,因为MapCharacter方法有这个硬编码:

ushort charIndex = CodePointMapping.GetMapping("WinAnsiEncoding").MapCharacter(c);

似乎recent version也有同样的问题。

答案 1 :(得分:0)

我不知道FO.NET的细节,但是如果你在字符串前加上十六进制FEFF(UTF字节顺序标记),PDF中的“文本字符串”类型通常可以保存UTF-16数据(不是UTF-8!) - BOM)。 在PHP中它看起来像这样:

$pdfTitle = "\xfe\xff" . mb_convert_encoding($myTitleString, "UTF-16BE", "UTF-8");

这会将标题从UTF-8转换为UTF-16,并在BOM前面加上它。

详见PDF文档:http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf
(第7.9.2.2节:“文本字符串类型”)