2014-07-16 110 views
2

我一直在尝试使用Itext PDF编写器创建PDF文件。我发现Superscript(0,4,5,6,7,8,9)和下标(0,1,2,3,4,5,6,7,8,9)在默认字体中是不允许的。在默认设置下,PDF文本只允许上标1,2,3。Itext PDF作家,有没有什么办法可以让pdf中的unicode下标符号? (没有setTextRise)

我的PDF中的字符串包含下标和上标字符,有没有一种方法可以在PDF中显示它们?

我搜查,发现:

  1. setTextRise()用于相对于改变文本的位移到当前行的方法,我不能使用它,因为我不知道哪些字符超/子脚本。
  2. 是否有将文本的编码/字体更改为UTF-8的设置,以便它允许所有的Unicode符号?

或者一些其他的方式,因为我要证明像H₂SO⁴2,O 2等

化学符号这将会是很大的帮助,谢谢!

+2

您声明iText不支持UNICODE上标字符。该指控是错误的。 iText支持许多不同的字体,如果字体包含UNICODE和特定的字形,iText允许您使用它。你应该改述你的问题,并问:我在哪里可以找到一个包含上标和下标字符的*字体*,以便我可以将它们与iText结合使用? –

+0

是的,谢谢。我编辑了这个问题。我很抱歉,我没有声称IText不支持UNICODE,我的意思是,我无法在默认设置中找到几个支持。 是的,正如你所建议的,我会检查出不同的字体。 – nexus

回答

5

请看看SubSuperScript的例子,我写回答你的问题。我这样写H₂SO⁴:

BaseFont bf = BaseFont.createFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
Font f = new Font(bf, 10); 
Paragraph p = new Paragraph("H\u2082SO\u2074", f); 
document.add(p); 

我发现在维基百科上的特定字符的值:http://en.wikipedia.org/wiki/Unicode_subscripts_and_superscripts

正如你所看到的,iText的是完全有能力展现写在标特殊字符或上标:​​

我写这个例子时遇到的主要问题是找到一个支持特定字形的字体。这是我在之前的评论中解释的。我最终使用了一种名为“Carbo Regular”的字体。

+0

嗨,我尝试了一些你建议的字体。这已经解决了我的问题。我会把它作为答案。谢谢。 – nexus

3

我能得到利用这段代码来解决这个问题:

我不得不注册一个新字体“宋体的Unicode MS”

FontFactory.register("Path/to/font/arial unicode ms.ttf","Arial Unicode MS"); 

然后同时在PDF我不得不写与我的字符串一起使用此字体:

FontFactory.getFont("Arial Unicode MS",BaseFont.IDENTITY_H,BaseFont.EMBEDDED); 
相关问题