Impression des caractères chinois dans PDFBox

Mirko:

J'utilise l'installation suivante:

  • Java 11.0.1

  • PDFBox 2.0.15

Objectif: le rendu d'un document PDF contenant des caractères chinois

Problème: java.lang.IllegalArgumentException: U + 674E est pas disponible dans l'encodage de cette police: WinAnsiEncoding

Je l'ai déjà essayé:

Mon code ressemble à ceci (raccourci un peu):

try (InputStream pdfIn = inputStream; PDDocument pdfDocument =
             PDDocument.load(pdfIn)) {

      PDFont formFont;
      //Check if Chinese characters are present
      if (!Util.containsHanScript(queryString)) {
        formFont = PDType0Font.load(pdfDocument,
            PdfReportGenerator.class.getResourceAsStream("LiberationSans-Regular.ttf"),
            false);
      } else {
        formFont = PDType0Font.load(pdfDocument,
            PdfReportGenerator.class.getResourceAsStream("NotoSansCJKtc-Regular.ttf"),
            false);
      }

        List<PDField> fields = acroForm.getFields();

        //Load fields into Map
        Map<String, PDField> pdfFields = new HashMap<>();
        for (PDField field : fields) {
          String key = field.getPartialName();
          pdfFields.put(key, field);
        }

        PDField currentField = pdfFields.get("someFieldID");
        PDVariableText pdfield = (PDVariableText) currentField;

        PDResources res = acroForm.getDefaultResources();
        String fontName = res.add(formFont).getName();
        String defaultAppearanceString = "/" + fontName + " 10 Tf 0 g";

        pdfield.setDefaultAppearance(defaultAppearanceString);
        pdfield.setValue("李柱");

      acroForm.flatten(fields, true);

      ByteArrayOutputStream pdfOut = new ByteArrayOutputStream();
      pdfDocument.save(pdfOut);
}

Résultat attendu: les caractères chinois sur pdf.

Résultat réel: java.lang.IllegalArgumentException: U + 674E est pas disponible dans l'encodage de cette police: WinAnsiEncoding

Donc, ma question est sur la façon de mieux le rendu de support des caractères chinois avec PDFBox. Toute aide est appréciée.

Tilman Hausherr:

Le code suivant fonctionne pour moi, il utilise le fichier de PDFBox-4629 :

PDDocument doc = PDDocument.load(new URL("https://issues.apache.org/jira/secure/attachment/12977270/Report_Template_DE.pdf").openStream());
PDAcroForm acroForm = doc.getDocumentCatalog().getAcroForm();
PDVariableText field = (PDVariableText) acroForm.getField("search_query");
List<PDField> fields = acroForm.getFields();
PDFont font = PDType0Font.load(doc, new FileInputStream("c:/windows/fonts/arialuni.ttf"), false);

PDResources res = acroForm.getDefaultResources();
String fontName = res.add(font).getName();
String defaultAppearanceString = "/" + fontName + " 10 Tf 0 g";

field.setDefaultAppearance(defaultAppearanceString);
field.setValue("李柱");

acroForm.flatten(fields, true);
doc.save("saved.pdf");
doc.close();

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=230863&siteId=1
conseillé
Classement