2012-05-08 21 views
14

He intentado iText, PDFBox & Oracle Forms. Y también tuve éxito en caso de iText para generar el documento PDF de Gujarati. Pero, desafortunadamente, no está generando la Fuente adecuada en el idioma Gujarati (UTF-8).¿Qué PDF Generation API (Java) admite la fuente Gujarati?

Tengo mi proyecto en jdk 1.4 & que es obligatorio. Por lo tanto, necesito una versión anterior de API que admita Gujarati Font.

Por favor, sugiera si alguna opción está disponible.

Código de ejemplo:

public void GeneratePDFusingiText(String lStrGujaratidata) 
    { 
    try 
    { 

     BaseFont bf = BaseFont.createFont("C:\\Windows\\Fonts\\Shruti.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 
     Font font = new Font(bf, 12); 
     Document document = new Document(); 
     PdfWriter.getInstance(document, new FileOutputStream("D:/GeneratePDFusingiText.pdf")); 
     document.open(); 
     document.add(new Paragraph(lStrGujaratidata, font)); 
     document.close(); 
    } 
    catch(Exception e) 
    { 
     System.out.println("Exception while generating PDF"); 
     e.printStackTrace(); 
    } 
    } 

EDIT 1:

Tal vez no está siendo representada la imagen. Se carga here.

EDIT 2:

image of font examples

Paso-1) I escriba una cadena gujarati Google Transliterate.

Paso-2) Lo convierto en Unicode usando el software BableMap para usarlo con Resourse Bundle.

Edición: Déjame tener una cadena: બિલાડી (Biladi)

Es Unicode será: \ u0AAC \ u0ABF \ u0AB2 \ u0ABE \ u0AA1 \ u0AC0

Compruebe el Bold Carácter Unicode arriba. Ahí es donde estoy obteniendo el problema. Ahora si cambio este Unicode a \ u0ABF \ u0AAC \ u0AB2 \ u0ABE \ u0AA1 \ u0AC0, imprime el resultado correcto en PDF.

Al mismo tiempo que se imprime la salida equivocada en HTML es decir: િબલાડી

tengo que manejar entre ellos.

He intentado usar "gu" & "gu.UTF-8" & "UTF-8". Pero, cada vez que obtengo el mismo resultado.

+0

No soy un experto aquí, pero yo diría que lo más importante sería las fuentes - cuáles estás usando, y qué formato son ellos (TrueType, etc.)? ¿Le daría un ejemplo de captura de pantalla de la producción que obtiene actualmente? – halfer

+0

Uso la fuente Shruti.ttf (Gujarati). Estoy editando la pregunta para obtener más información. – Sarang

+0

Hola, Sarang, ¿estás restringido para usar una herramienta de informes en particular? Si no es así, he usado fuentes gujarati con informes de jaspe en caso de que pueda usar informes de jaspe y necesite ayuda para hacerlo saber. –

Respuesta

1

respuesta Actualizado

Después de que su comentario me di cuenta de que estaba equivocado, es decir, el carácter diacrítico debe aparecen en segundo lugar en la secuencia de bytes, a pesar de que debería ser rendido izquierda del personaje principal.

Por lo tanto, resulta que iText no es compatible con este tipo de representación en los juegos de caracteres Índico. A grandes rasgos, iText usa awt's Graphics2D para representar caracteres unicode no latinos, uno por uno, como imágenes en el PDF. (Supongo que esto se debe a que las fuentes apropiadas no se instalan necesariamente en la computadora de todos).Esta función no tiene en cuenta este orden especial.

iText admite un comportamiento similar para árabe, utilizando una clase aportada por otro desarrollador. Ver com.itextpdf.text.pdf.ArabicLigaturizer. ¿Tal vez podrías crear uno similar?

Parece que este ha subido delante (!):

respuesta original

Kem chho,

Creo que iText muestra los caracteres correctos, pero los primeros 2 caracteres de tu entrada han sido 'volteados' antes de traducir la cadena a puntos Unicode. Entonces, el problema ocurrió antes de que los datos llegaran a iText.

El problema subyacente es que el 'primer' carácter es un carácter 'prebase', que es un tipo de Diacritic. Es un poco como un "acento" en los textos europeos, en el sentido de que no puede existir por sí mismo, y su propósito es embellecer a otro personaje. En este caso, convierte un 'Ba' (બ) en un 'Bi'.

Verás int la página de códigos Unicode, que el primer carácter (િ) es de hecho punto de código \ u0ABF, y el segundo u0AAC (બ) es \: http://en.wikipedia.org/wiki/Gujar%C4%81ti_script#Unicode

Por lo tanto, en algún lugar entre Google y su transliteración representación del punto de código, estos personajes se voltearon. Entonces, necesita revisar cómo hizo esa traducción.

¿Cómo convirtió estos caracteres en puntos de código?

Al parecer, algunos intérpretes coloque el 'pre-base' después de que el principal consonante, en lugar de antes:

  • Tenga en cuenta que al pegar esos caracteres en un terminal (Linux), los primeros 2 los personajes salen al frente. Creo que algo similar pasó también para ti.
  • También se dará cuenta de que cuando intenta edición de esta palabra en Google Transliterate, no se puede colocar el cursor entre los 2 primeros caracteres, y cuando se pulse la tecla de retroceso, la izquierda carácter es eliminado antes de la derecha.

Por lo tanto, si puede averiguar dónde ocurrió este "volteo", entonces con suerte su solución se presentará.

Esperanza esto ayuda

+0

Usando BableMap según la edición en la Pregunta. – Sarang

+0

Este personaje está volteado por supuesto ... Pero están bien con HTML y no están bien con PDF. Es por eso que tengo que administrar entre :) – Sarang

+0

OK, ahora entiendo. Ver mi edición ¡¡Buena suerte!! – laher