2014-08-27 77 views
2

我想使用itext讀取包含波斯語字符的pdf文件。我從中讀到,但話語是相反的。例如「ره」而不是「هر」。 我把它與「\ n」分開,並從每一行中讀取每一個文本,但我認爲也許有更好的解決方案來閱讀本PDF文件。 這是我的代碼:如何從java中的波斯語pdf文件中讀取

public class Main extends JFrame { 
    private static final int WIDTH = 600; 
    private static final int HEIGHT = 600; 
    /** 
    * by Shomeis 
    */ 
    private static final long serialVersionUID = 1L; 

    public Main() { 
     Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
     int x = dim.width/2 - WIDTH/2; 
     int y = dim.height/2 - HEIGHT/2; 
     setBounds(x, y, WIDTH, HEIGHT); 
     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     setMinimumSize(new Dimension(600, 600)); 
     // 
     File pdf = new File("E:\\guide1.pdf"); 
     if (!pdf.canRead() || !pdf.isFile()) { 
      System.err.println("cannot read input file " + pdf.getAbsolutePath()); 
      return; 
     } 
     try { 
      PdfReader reader = new PdfReader(pdf.getAbsolutePath()); 
      String page; 
      String areaText = ""; 
      System.out.println(reader.getNumberOfPages()); 
      for (int k = 1; k <= reader.getNumberOfPages(); k++) { 
       System.out.println(k); 
       page = PdfTextExtractor.getTextFromPage(reader, k); 

       String[] b = page.split("\n"); 

       for (int i = 0; i < b.length; i++) { 
        for (int j = (b[i].length() - 1); j >= 0; j--) { 
         areaText += b[i].charAt(j); 
        } 
        areaText += "\n"; 
       } 
      } 
      JTextArea text = new JTextArea(areaText); 
      JScrollPane sc = new JScrollPane(text); 
      text.setWrapStyleWord(true); 
      text.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 
      this.setContentPane(sc); 
      this.setVisible(true); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    public static void main(String[] args) throws IOException { 
     // TODO Auto-generated method stub 
     new Main().setVisible(true); 
    } 
} 
+0

什麼這是你的PdfReader?它有沒有設置字符集的方法? – 2014-08-27 10:53:39

+0

「單詞是反向的」 - 有些軟件不能與波斯語和其他RTL腳本一起工作,所以他們使用一個技巧:(1)使用鏡像字體,(2)繪製所有鏡像的文本。你會看到(2)的效果;例如,使用Acrobat Pro,您可以檢查字體並查看(1)。相關:[紅寶石從PDF提取阿拉伯語文本](http://stackoverflow.com/questions/21032994/ruby-extract-arabic-text-from-pdf/21042960#21042960) – usr2564301 2014-08-27 11:36:40

+0

如果您的PDF被標記(它可能不是' t),那麼你可能可以使用標記信息進行提取。在Acrobat中,轉至「文件」,「屬性」。在「描述」選項卡上,查看左下角的標記。我遇到的大多數PDF都不幸被標記。此外,請參閱[在此帖子中編輯#2](http://stackoverflow.com/a/10191879/231316)爲什麼事情是倒退 – 2014-08-27 13:17:19

回答

0

可以逆轉的話:

String res = strategy.getResultantText(); 
res = new StringBuilder(res).reverse().toString();