2012-04-12 11 views
3

Ich verwende ITextpdf auf Java, um gestempelte PDFs zu generieren, manchmal ist das generierte PDF auf Arabisch und ich stehe vor einem komischen Problem. Um die arabische Seite von Right To Left (RTL) erstellen zu lassen, verwende ich Tabellen und Zellen, die die Eigenschaft PdfPCell.setRunDirection (PdfWriter.RUN_DIRECTION_RTL) haben. Wenn ich diese Eigenschaft verwende, zeigt Arabisch überhaupt nicht, wenn ich den Aufruf dieser Eigenschaft verbiete, werden arabische Zeichenfolgen richtig angezeigt, das heißt, ich sollte keine Probleme mit Schriftarten haben und ich weiß nicht wirklich, ob dies ein Problem mit IText oder I ist fehle nur etwas.ITextPdf: Drucken arabischer Strings von rechts nach links (RTL)

Hier ein kleiner Frieden von Code, der richtig eine arabische Zeichenfolge zeigt:

BaseFont bf = BaseFont.createFont(Application.getBASEPATH() + "fonts/arabic.ttf",BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
Font trebuchetSmaller = new Font(bf, 10, 0); 

PdfPTable tbl = new PdfPTable(1); 
PdfPCell cell = new PdfPCell(); 
Paragraph paragraph = new Paragraph(); 
paragraph.add(new Phrase("ربط صفحة على شبكة الإنترنت"), trebuchetSmaller)); 
cell.addElement(paragraph); 
tbl.addCell(cell); 

Hier ist die notwendige Veränderung, die die arabische Zeichenfolge verschwinden läßt:

BaseFont bf = BaseFont.createFont(Application.getBASEPATH() + "fonts/arabic.ttf",BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
Font trebuchetSmaller = new Font(bf, 10, 0); 

PdfPTable tbl = new PdfPTable(1); 
PdfPCell cell = new PdfPCell(); 
cell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL); 
Paragraph paragraph = new Paragraph(); 
paragraph.add(new Phrase("ربط صفحة على شبكة الإنترنت"), trebuchetSmaller)); 
cell.addElement(paragraph); 
tbl.addCell(cell); 

Wenn ich PdfWriter.RUN_DIRECTION_RTL mit einem verwenden Englisch string zeigt es richtig in dem Format, das es sein soll. Wenn ich eine Zeichenfolge mit gemischten englischen und arabischen Zeichen verwende, werden nur die englischen angezeigt.

+0

Sie können Spannabe verwenden. [Es gibt mehr Informationen über sie] [1] [1]: http://stackoverflow.com/a/11612380/1278748 –

+0

Schiftpakete ARIAL_FONT – shareef

Antwort

3

Ändern Sie den Code der registrierten Schrift enthalten:

new Phrase("آزمايش", font) 

Auch können Sie die Phrase direkt hinzufügen:

PdfPCell pdfCell = new PdfPCell(new Phrase("آزمايش", font)); 
pdfCell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL); 
+0

Dies ist itext 5 Probe. Was ist mit itext 7. Wie können wir die Richtung in itext 7 ändern? –

+1

https://developers.itextpdf.com/examples/font-examples/clone-language-specific-examples – VahidN

+0

Ich habe es getestet, keine Änderungen, ich sehe meinen Text von links nach rechts mit getrennten Wörtern! –

1

Vielen Dank. Eigentlich war das Problem die verwendete Schriftart, die sich bei RTL in schlechtem Verhalten befand. Unter dieser Adresse habe ich viele sehr interessante arabische Unicode-Fonts gefunden: http://cooltext.com/Fonts-Unicode-Arabic für Interessierte.

+0

Hallo, können Sie mir helfen ?! Ich möchte ein pdf in arabischer Sprache erstellen und möchte nicht, dass der Text von rechts nach links beginnt, wobei der Code über dem arabischen Zeichen getrennt ist und umgekehrt auch von LTR –