Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PDFbox阿拉伯语文本不显示从数据库mysql检索_Java_Mysql_Pdfbox - Fatal编程技术网

Java PDFbox阿拉伯语文本不显示从数据库mysql检索

Java PDFbox阿拉伯语文本不显示从数据库mysql检索,java,mysql,pdfbox,Java,Mysql,Pdfbox,我想用阿拉伯语显示PDF报告,它将通过mysql数据库生成。这是我的密码: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String relativeWebPath = "/font/A_Nefel_Adeti

我想用阿拉伯语显示PDF报告,它将通过mysql数据库生成。这是我的密码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub

    String relativeWebPath = "/font/A_Nefel_Adeti.ttf";
    String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
    File file = new File(absoluteDiskPath);
    
    System.out.print(file);
 ByteArrayOutputStream output=new ByteArrayOutputStream();
 PDDocument document=new PDDocument();
 PDFont font = PDTrueTypeFont.load(document, new File(absoluteDiskPath),new WinAnsiEncoding());
PDPage test=new PDPage();
document.addPage(test);
 PDPageContentStream content=new PDPageContentStream(document, test);
 
final String EXAMPLE = "نديم";

System.out.print(EXAMPLE);

try{
     con=DBUtility.getConnection();
     stmt=con.prepareStatement("select * from login");
     rs=stmt.executeQuery();
     while(rs.next()){
         
         userName=rs.getString("UserName");
         password=rs.getString("Password");
         
        content.beginText();
         content.newLineAtOffset(50, 680);
         content.setFont(font, 12);
         content.showText(rs.getString("UserName"));
        // System.out.print(rs.getString("Password"));
         content.endText();

     
     }
     
 }catch(SQLException ex){
     ex.printStackTrace();
 }
 
 content.close();
 document.close();
   response.setContentType("application/pdf;base64,BASE_64_ENCODED_PDF");
 
response.addHeader("Content-Disposition", "inline; filename=\"TestReport.pdf\"");
response.getOutputStream().write(output.toByteArray());


}
控制台上显示阿拉伯语文本,但PDF显示此错误:

类型异常报告

消息U+0646在此字体的编码中不可用:WinAnsienceODing

说明服务器遇到内部错误,无法>满足此请求

例外情况

java.lang.IllegalArgumentException: U+0646 is not available in this font's encoding: WinAnsiEncoding
org.apache.pdfbox.pdmodel.font.PDTrueTypeFont.encode(PDTrueTypeFont.java:368)
org.apache.pdfbox.pdmodel.font.PDFont.encode(PDFont.java:286)
org.apache.pdfbox.pdmodel.PDPageContentStream.showText(PDPageContentStream.java:411)
uae.org.TestReport.doGet(TestReport.java:93)
javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

如果尚未完成,请更新到2.0。javadoc有一个注释:

注意:简单字体仅支持256个字符。对于Unicode支持, 改为使用PDType0Font.load(PDDocument,File)

这样做:

PDFont font = PDType0Font.load(document, new File(absoluteDiskPath);

这不适用于1.8或更早版本。

如果尚未完成,请更新到2.0。javadoc有一个注释:

注意:简单字体仅支持256个字符。对于Unicode支持, 改为使用PDType0Font.load(PDDocument,File)

这样做:

PDFont font = PDType0Font.load(document, new File(absoluteDiskPath);

这不适用于1.8或更低版本。

感谢它的工作。但它将显示一个字符,而不是单词,从左到右,我希望从右到左的阿拉伯文字。我包括icu4j-49_1.jar,但它不起作用。这是一个不同的主题,我建议您为此提出一个新问题(很遗憾,我无能为力),删除sql内容,并添加一个类似“rtl”的标记。希望其他人能帮忙。谢谢你的作品。但它将显示一个字符,而不是单词,从左到右,我希望从右到左的阿拉伯文字。我包括icu4j-49_1.jar,但它不起作用。这是一个不同的主题,我建议您为此提出一个新问题(很遗憾,我无能为力),删除sql内容,并添加一个类似“rtl”的标记。希望其他人能帮忙。