![]() |
1
0
尝试使用此结构:
|
![]() |
2
5
长话短说——为了从TrueType字体以PDF格式进行Unicode输出,输出必须包含大量详细且看似多余的信息。归根结底是这样的-在TrueType字体中,字形存储为字形ID。这些glyph id与特定的unicode字符相关联(而iirc,unicode glyph内部可能指几个代码点,如_指e和一个尖锐的重音,我的记忆是模糊的)。除了说明字符串中的utf16be值与TrueType字体中的字形ID之间存在映射,以及utf16be值与Unicode之间的映射(即使是标识),PDF实际上不支持Unicode。
我自己工具上的一个单元测试的输出如下所示:
endstream%注意流的格式错误
这是同一个测试中的一个-这是DescendantFonts数组中的对象:
我为什么要告诉你这个?它与pdfbox有什么关系?就这样:PDF格式的Unicode输出,坦率地说,是一个巨大的麻烦。Acrobat是在Unicode出现之前开发出来的,没有Unicode的CJK编码从一开始就很痛苦(我知道-那时我在Acrobat上工作)。后来又添加了Unicode支持,但它真的让人觉得它被利用了。我们希望您只需要说/encoding/unicode,并使用以thorn和y-dieresis字符开头的字符串,然后就可以了。没有这样的运气。如果你不把每一个细节都放进去(真的,还有Acrobat,嵌入一个PostScript程序来翻译成Unicode?WTH?)你在Acrobat上得到一个空白页。我发誓,我不是在编这个。 在这一点上,我为一个单独的公司编写了PDF生成工具(现在是.NET,所以它对您没有帮助),我把隐藏所有这些胡言乱语作为设计目标。所有文本都是Unicode的-如果您只使用那些与WinAnsi相同的字符代码,那么这就是您所得到的。用其他的东西,你就可以得到其他的东西。如果PDFBox能为你工作,我会很惊讶的-这是一个严重的麻烦。 |
![]() |
3
1
解决方案非常简单。
1)必须找到与要显示的字符兼容的字体。
例如,如果要使用希腊字符,则必须执行以下操作:
|
![]() |
4
0
可能需要编写俄语编码类,它应该像
WinAnsiEncoding
一个,我想。
或者,如果这不是您已经做的,也许您应该用UTF-8编码源文件并使用默认编码。
|
![]() |
5
0
测试这是否是一个编码问题应该非常容易(只需切换到UTF16编码)。 我假设您已经尝试使用编辑器或其他具有vremacci字体的工具,并确认它显示了您期望的方式? 您可能想尝试在IText中执行相同的操作,只是为了了解问题是否与pdfbox库本身相关…如果您的主要目标是生成PDF文件,IText无论如何可能是更好的解决方案。 编辑-对评论的长答复: 好的-抱歉在编码问题上来回…您的核心问题(您可能已经知道)是,写入内容流的字节的编码与用于查找glyph的编码不同。现在我会尽力帮助你: 我看了一下pdfbox中的字典编码类,它看起来很不直观…“字典”是一个PDF字典。所以您基本上需要做的是创建一个PDF字典对象(我认为pdfbox将其称为cosObject类型),然后向它添加条目。 字体的编码在PDF中定义为词典(见上述规范第266页)。字典包含基本编码名称,以及可选的差异数组。从技术上讲,差异数组不应该与真正的字体一起使用(尽管我已经看到它在某些情况下使用过——但是不要使用它)。 然后,您将为CMAP指定一个用于编码的条目。这个CMAP将是您字体的编码。 我的建议是取一个现有的PDF文件来做你想做的,然后得到一个字体的字典结构的转储,这样你就可以看到它是什么样子的。 这绝对不适合胆小的人。我可以提供一些帮助-如果你需要一个字典转储,给我一个带PDF样本的超链接,我将运行它通过我在IText开发中使用的一些算法(我是IText文本提取子系统的维护者)。 编辑- 11/17 / 09 好的-这是来自russian.pdf文件的字典转储(子字典以缩进方式列出,并按它们在包含字典中出现的顺序排列):
这里有很多活动部件。您可能希望将字体中只有3或4个字符的测试文档放在一起…这里使用了很多类型1字体(除了TT字体),因此很难知道您的特定问题涉及到什么。 (你确定你不想至少用IText试试这个吗?;-)我不是说它会奏效,只是说它可能值得一试)。 作为参考,以上字典转储是使用com.lowagie.text.pdf.parser.pdfContentReaderTool类获取的。 |
![]() |
6
-1
试试这个: phrase lefttitle=新短语(“____)、-__、____”,fontfactory.getfont(“Tahoma”,“CP1251”,true,25)); 这至少适用于最新的(5.0.1)IText |
|
user29759326 · 如何返回递归函数中的最后一个值? 3 月前 |
|
malife89 · 将java中的字符串读取为正确的日期格式 3 月前 |
![]() |
Tim · 在java中,有没有更快的方法将字节数组写入文件? 3 月前 |
![]() |
rudraraj · java中未声明最终变量 4 月前 |
![]() |
Bala Ji · 以下BFS的实施效率如何? 4 月前 |