2016-05-09 2 views
1

Ich möchte PDF-Bericht in arabisch anzeigen, die durch MySQL-Datenbank generiert werden. Hier ist mein Code:PDFbox arabic textnot show aus der Datenbank abrufen 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()); 


} 

Es arabischen Text auf der Konsole zeigt aber die PDF gibt diesen Fehler:

type Exception report

message U+0646 is not available in this font's encoding: WinAnsiEncoding

description The server encountered an internal error that prevented it from >fulfilling this request.

Exception

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) 

Antwort

0

Falls noch nicht geschehen, aktualisieren Sie bitte auf 2.0. Die javadoc hat eine Notiz:

Note: Simple fonts only support 256 characters. For Unicode support, use PDType0Font.load(PDDocument, File) instead.

dies also tun:

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

Dies funktioniert nicht für 1.8 oder früher.

+0

danke seine funktioniert. aber es wird das einzelne Zeichen nicht Wort von links nach rechts zeigen, ich will von rechts nach links als arabisches Schreiben. Ich schließe icu4j-49_1.jar ein, aber es funktioniert nicht. –

+0

Das ist ein anderes Thema, ich schlage vor, Sie öffnen eine neue Frage dafür (ich kann leider nicht helfen), und entfernen Sie die SQL-Sachen, und fügen Sie ein Tag wie "RTL". Hoffentlich kann jemand anderes helfen. –

Verwandte Themen