Quelle API de génération de PDF (Java) prend en charge la police Gujarati?


J'ai essayé iText, PDFBox et Oracle Forms. Et j'ai également réussi dans le cas d'iText à générer un document PDF Gujarati. Mais, malheureusement, il ne génère pas la police appropriée en langue Gujarati (UTF-8).

J'ai mon projet dans jdk 1.4 et c'est obligatoire à utiliser. Donc, j'ai besoin d'une ancienne version de l'API qui prend en charge la police Gujarati.

Veuillez suggérer si une option est disponible.

Exemple de code:

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();
    }
   } 

MODIFIER 1:

Peut-être que l'image n'est pas obtenir de l'affiche. Il est téléchargé ici .

MODIFIER 2:

image des exemples de polices

Étape-1) Je tape une chaîne gujarati Google Translitterate.

Étape-2) Je le convertit en unicode à l'aide du logiciel BableMap pour l'utiliser à l'aide de Resourse Bundle.

Problème: Laissez-moi avoir une Chaîne: બિલાડી (Biladi)

C'est unicode sera: \ u0AAC \u0ABF \ u0AB2 \ u0ABE\u0AA1 \ u0AC0

Cochez le caractère Unicode en gras ci-dessus. C'est là que je suis le problème. Maintenant, si je change cet unicode en \u0ABF\u0AAC\u0AB2\u0ABE\u0AA1\u0AC0 , il imprime la sortie appropriée en PDF.

En même temps, il imprime une mauvaise sortie en HTML, c'est-à-dire: િ બલાડી

Je dois gérer entre eux.

J'ai essayé d'utiliser "gu" & "gu.UTF-8 " & "UTF-8". Mais, chaque fois que je reçois la même sortie.

Author: Sarang, 2012-05-08

1 answers

Réponse mise à jour

Après votre commentaire, j'ai réalisé que j'avais tort, c'est à dire le caractère diacritique devrait - , en deuxième position dans la séquence d'octets, même si elle devrait être rendus gauche du personnage principal.

Il s'avère donc qu'iText ne prend pas en charge ce type de rendu sur les jeux de caractères Indic. En gros, iText utilise awt Graphics2D pour rendre les caractères unicode non latins, un par un, en tant qu'images dans le PDF. (Je suppose que c'est parce approprié les polices ne sont pas nécessairement installées sur l'ordinateur de tout le monde). Cette fonctionnalité ne prend pas en compte cette commande spéciale.

IText prend en charge un comportement similaire pour l'arabe, en utilisant une classe fournie par un autre développeur. Voir com.itextpdf.texte.PDF.ArabicLigaturizer. Peut-être pourriez-vous en créer un similaire vous-même? (!)

Il semble que cela soit arrivé avant:

Réponse Originale À Cette Question

Kem chho,

Je crois qu'iText affiche les caractères corrects, mais les 2 premiers caractères de votre entrée ont été "retournés" avant de traduire la chaîne en points unicode. Ainsi, l' le problème s'est produit avant même que les données n'arrivent à iText.

Le problème sous-jacent est que le "premier" caractère est un caractère "pré-base", qui est un type de diacritique. C'est un peu comme un "accent" dans les textes européens, en ce sens qu'il ne peut pas exister seul, et que son but est d'embellir un autre personnage. Dans ce cas, il transforme un " Ba "(બ) en un "Bi".

Vous verrez int la page de code Unicode, que le premier caractère (િ) est en effet codepoint \ u0ABF, et le second (બ) est \ u0AAC: http://en.wikipedia.org/wiki/Gujar%C4%81ti_script#Unicode

Donc, quelque part entre Google Translitterate et votre représentation de point de code, ces caractères ont été inversés. Donc, vous devez revoir comment vous avez fait cette traduction.

Comment avez-vous converti ces caractères en points de code?

Apparemment, certains interprètes placent la "pré-base" après la consonne principale, plutôt qu'avant:

  • Notez que lorsque vous collez ces caractères dans une (Linux) terminal, les 2 premiers personnages sortent de dos à l'avant. Je crois quelque chose similaire qui s'est passé pour vous aussi.
  • Vous remarquerez également que, lorsque vous essayez en modifiant ce mot dans Google Translitterate, vous ne pouvez pas placer le curseur entre les 2 premiers caractères, et lorsque vous appuyez sur retour arrière, la gauche le caractère est supprimé avant la droite.

Donc, si vous pouvez déterminer où ce "retournement" s'est produit, alors j'espère que votre solution se présentera.

J'espère que cela aide

 1
Author: laher, 2012-05-14 22:59:37