2017-02-14 112 views
4

当我尝试将非法字符写入PDF时,我显然会遇到异常。例如。使用PDFBox从字符串中删除非法字符

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

如何找出哪些字符不被支持,并将它们从字符串中删除?

+0

通常情况下,您可以指望字体不包含控制字符范围 mkl

回答

5

这是我的解决方案...至少它适用于我所需要的。我使用了PDFBox的WinAnsiEncoding类,并调用contains方法来检查字符是否受支持。

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

如何在将要写在PDF上的字符串之间添加一个新行? \ n和System.getProperty(“line.separator”)不起作用...请帮助 –

+1

您必须将字符串拆分为新行字符并手动逐行写入。没有其他解决方案。 – user489872

+1

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