Java 如何绘制包含€;在PDF中使用PDFBox
我有一个文本要在pdf上绘制,类似于Java 如何绘制包含€;在PDF中使用PDFBox,java,android,pdf,pdfbox,Java,Android,Pdf,Pdfbox,我有一个文本要在pdf上绘制,类似于500欧元/小时。我正在使用图书馆 我试着写上面的字符串,如下所示 pageContentStream.drawString("500 " + Html.fromHtml(getString(R.string.euro)).toString() + "/hour"); 其中,euro在strings.xml中定义为 <string name="euro">(€)</string> <string name="
500欧元/小时
。我正在使用图书馆
我试着写上面的字符串,如下所示
pageContentStream.drawString("500 " + Html.fromHtml(getString(R.string.euro)).toString() + "/hour");
其中,euro
在strings.xml
中定义为
<string name="euro">(€)</string>
<string name="pound">(£)</string>
(€;)
(£)
上面的代码PdfBox,Android正在写一些乱七八糟的字符
我找到了一个使用pdfbox编写€
的解决方案,它工作得非常好
我的问题是如何在€
一次性签名旁边书写文本
我是否需要先写€
,然后将文本移到旁边,然后再写剩余的文本?我觉得这不是一个正确的解决方案。您需要传递货币符号的HTML代码
Html.fromHtml((String) currency_symbol).toString()
Html.fromHtml((String) "€").toString() //for euro
Html.fromHtml((String) "£").toString() //for pound
通过引用,我成功地实现了我所需要的。请参考下面的代码片段
contentStream.beginText();
/*x will act as placeholder here*/
byte[] commands = "(500 x/year**) Tj ".getBytes();
/* commands[index_of_x] = (byte)128, where 128 is decimal value of octal
* 200. (char code for '€' in WinAnsiEncoding).
* you may want to refer annex D.2, Latin Character Set and Encodings of
* PDF specification ISO 32000-1
*/
commands[5] = (byte) 128;
contentStream.appendRawCommands(commands);
contentStream.endText();
contentStream.close();
PDF规范@Rupesh:你不应该只是“接受”这个答案,还应该“投票”它!对不起我正在恢复它。。我用>
尝试了上述解决方案,效果很好。。但是它不适用于€
和其他字符…您使用的是什么代码??参考这个原因,我尝试过它的工作fine@WISHY和你的一样。。但问题是我正在pdf
上绘制文本PageContentStream
仍在使用上述方法绘制垃圾字符。@Rupesh已经注意到了这一点,如果它解决了您在您提到的答案中提到的问题,PDFBox的字符串编码还远远不够完美(版本1.8.x)。这实际上是一个很好的方式来说它坏了。。如果使用PDFBox 1.8.*(或更早版本),Unicode代码超过255的字符只能使用自定义方法显示,而不能使用PDFBox'PDPageContentStream.drawString
。