Java 如何绘制包含€;在PDF中使用PDFBox

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">(&#8364;)</string> <string name="

我有一个文本要在pdf上绘制,类似于
500欧元/小时
。我正在使用图书馆

我试着写上面的字符串,如下所示

pageContentStream.drawString("500 " + Html.fromHtml(getString(R.string.euro)).toString() + "/hour");
其中,
euro
strings.xml
中定义为

<string name="euro">(&#8364;)</string>
<string name="pound">(&#163;)</string>
(€;)
(£)
上面的代码
PdfBox,Android正在写一些乱七八糟的字符

我找到了一个使用pdfbox编写
的解决方案,它工作得非常好

我的问题是如何在
一次性签名旁边书写文本


我是否需要先写
,然后将文本移到旁边,然后再写剩余的文本?我觉得这不是一个正确的解决方案。

您需要传递货币符号的HTML代码

Html.fromHtml((String) currency_symbol).toString()

Html.fromHtml((String) "&#8364;").toString() //for euro

Html.fromHtml((String) "&#163;").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