descargar arial java pdf fonts itext

java - descargar - ¿Por qué el texto Gujarati-India no se procesa correctamente utilizando Arial Unicode MS?



arial unicode ms bold (1)

Este es un seguimiento de esta pregunta ¿Cómo exportar fuentes en idioma gujarati-indio a pdf? , @ amedee-van-gasse , QA Engineer en iText me pidió que publicara una pregunta específica para itext con mcve relevante.

¿Por qué esta secuencia de Unicode /u0ab9/u0abf/u0aaa/u0acd/u0ab8 no se procesa correctamente?

Debería renderizarse así:

હિપ્સ, también probado con unicode-converter

Sin embargo, este código (ejemplo adaptado de iText: Capítulo 11: Elegir la fuente correcta )

public class FontTest { /** The resulting PDF file. */ public static final String RESULT = "fontTest.pdf"; /** the text to render. */ public static final String TEST = "/u0ab9/u0abf/u0aaa/u0acd/u0ab8"; public void createPdf(String filename) throws IOException, DocumentException { Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename)); document.open(); BaseFont bf = BaseFont.createFont( "ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); Font font = new Font(bf, 20); ColumnText column = new ColumnText(writer.getDirectContent()); column.setSimpleColumn(36, 730, 569, 36); column.addElement(new Paragraph(TEST, font)); column.go(); document.close(); System.out.println("DONE"); } public static void main(String[] args) throws IOException, DocumentException { new FontTest().createPdf(RESULT); } }

Genera este resultado :

Eso se ve diferente de

હિપ્સ

Tengo prueba con itextpdf-5.5.4.jar , itextpdf-5.5.9.jar y también itext-2.1.7.js3.jar (distribuido con jasper-reports)

La fuente utilizada la distribuye con MS Office ARIALUNI.TTF y se puede descargar desde Arial Unicode MS * Tal vez haya problemas legales descargando ver comentario de Mike ''Pomax'' Kamermans


Ni iText5 ni iText2 (que es una versión muy desactualizada por cierto) admiten la representación de scripts de Indic, sin importar qué fuente seleccione.

La representación de scripts Indic no es similar a ninguna secuencia de comandos latina, ya que se deben realizar una serie larga de acciones adicionales para obtener el resultado correcto, por ejemplo, algunos caracteres deben reordenarse primero de acuerdo con las reglas de idioma.

Este es un problema conocido para la compañía iText.

Hay una implementación de stub para Gujaranti en iText5 llamada GujaratiLigaturizer, pero la implementación es realmente pobre y no se puede esperar obtener resultados correctos con ella.

Puede tratar de procesar su cadena con este ligadurizador y luego generar la cadena resultante de la siguiente manera:

IndicLigaturizer g = new GujaratiLigaturizer(); String processed = g.process(inputString); // proceed with the processed string