2017-02-14 2 views
4

Lorsque j'essaie d'écrire des caractères illégaux dans un fichier PDF, j'obtiens évidemment une exception. Par exemple.Supprimer des caractères illégaux d'une chaîne avec PDFBox

contentStream.showText("some illegal characters");  
... 
java.lang.IllegalArgumentException: U+000A ('controlLF') is not available in this font Helvetica (generic: ArialMT) encoding: WinAnsiEncoding... 

Comment puis-je savoir quels caractères ne sont pas pris en charge et les retirer de la chaîne?

+0

Habituellement, vous pouvez compter sur une police pour ne pas contenir de glyphes pour les caractères dans la plage de caractères de contrôle mkl

Répondre

5

Voici ma solution ... au moins cela fonctionne pour ce dont j'ai besoin. J'ai utilisé la classe WinAnsiEncoding de PDFBox et appelé la méthode contains pour vérifier si le caractère est pris en charge.

import org.apache.pdfbox.pdmodel.font.encoding.WinAnsiEncoding; 

public class Test extends WinAnsiEncoding { 

    public static String remove(String test) { 
     StringBuilder b = new StringBuilder(); 
     for (int i = 0; i < test.length(); i++) { 
      if (WinAnsiEncoding.INSTANCE.contains(test.charAt(i))) { 
       b.append(test.charAt(i)); 
      } 
     } 
     return b.toString(); 
    } 

    public static void main(String[] args) { 
     System.out.println(remove("abc\rcde")); 
     // prints abccde 
    } 

} 
+0

Comment ajouter une nouvelle ligne entre les chaînes qui vont être écrites en PDF? both \ n et System.getProperty ("line.separator") ne fonctionnent pas ... Aidez-nous –

+1

Vous devez diviser la chaîne sur les nouveaux caractères de ligne et écrire manuellement ligne par ligne. Il n'y a pas d'autre solution. – user489872

+1

https://stackoverflow.com/questions/19635275/how-to-generate-multiple-lines-in-pdf-using-apache-pdfbox – user489872