xpdf4.0的使用(詳細)

kevin-onepiece發表於2018-04-11

1.下載xpdf tools 和Chinese simplified,(剛開始下載了原始碼但是沒有找到pdftotxt.exe,結果發現在tools裡)

2.新建xpdf資料夾,解壓tools到xpdf裡,將bin64裡的所有檔案複製到xpdf下,再將doc裡的sample-xpdfrc複製到xpdf下,並重新命名為xpdfrc,將xpdf-chinese-simplified複製到xpdf下。

3.修改xpdfrc檔案,

(1)修改檔案 xpdfrc 第73行,將 textEncoding UTF-8 註釋開啟,指定編碼為UTF-8,

(2)並在下面增加 textPageBreaks no 引數,意思是在pdf文件的兩頁間不加入分行符。

(3)在最後加入這些程式碼:其中的路徑換成自己的路徑

#-----?begin?Chinese?Simplified?support?package?(2011-sep-02)??

cidToUnicode?Adobe-GB1?E:/xpdf/xpdf-chinese-simplified/Adobe-GB1.cidToUnicode??

unicodeMap?ISO-2022-CN?E:/xpdf/xpdf-chinese-simplified/ISO-2022-CN.unicodeMap??

unicodeMap?EUC-CN?E:/xpdf/xpdf-chinese-simplified/EUC-CN.unicodeMap??

unicodeMap?GBK?E:/xpdf/xpdf-chinese-simplified/GBK.unicodeMap??

cMapDir?Adobe-GB1?E:/xpdf/xpdf-chinese-simplified/CMap??

toUnicodeDir?E:/xpdf/xpdf-chinese-simplified/CMap??

#displayCIDFontTT?Adobe-GB1?E:/xpdf/xpdf-chinese-simplified/CMap/gkai00mp.ttf???

#fontFileCC?Adobe-GB1?/usr/..../gkai00mp.ttf??

#-----?end?Chinese?Simplified?support?package??

4.接下來貼程式碼:

import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author Angela
*/
public class Pdf4Text {

/**
* 讀取pdf文字
* @param file pdf檔案路徑
* @param isLayout 是否維持原來佈局
*/
public static void extractTXT(String file,boolean isLayout){
// XPDF存放路徑
String PATH_TO_XPDF=
"E:\\xpdf\\pdftotext.exe";
File pdffile=new File(file);
// PDF檔案的絕對路徑
String source_absolutePath = pdffile.getAbsolutePath();
// -表示不儲存文字
String target_absolutePath = "-";

//-layout表示保持原有的layout,-enc指定字符集,
//-q設定不列印任何訊息和錯誤,-nopgbrk指定不分頁

// 保持原來的layout
String layout = "-layout";
// 如果isLayout為false,則設定不保持原來的layout
if(!isLayout) layout = "";
// 設定編碼方式
String encoding = "-enc";
String character = "UTF-8";
// 設定不列印任何訊息和錯誤
String mistake = "-q";
// 頁面之間不加入分頁
String nopagebrk = "-nopgbrk";

//命令列
String[] cmd = new String[] { PATH_TO_XPDF, layout, encoding, character,
mistake, nopagebrk, source_absolutePath, target_absolutePath };

try {
Process p = Runtime.getRuntime().exec(cmd);
//獲取控制檯的輸入流
BufferedInputStream bis = new BufferedInputStream(p.getInputStream());
InputStreamReader reader = new InputStreamReader(bis, character);
StringBuilder sb=new StringBuilder();
char [] buf = new char[10000];
int len;
while((len = reader.read(buf))>= 0) {
sb.append(buf);
}
System.out.println(sb.toString());
reader.close();
} catch (IOException ex) {
Logger.getLogger(Pdf4Text.class.getName()).log(Level.SEVERE, null, ex);
}
}

/**
* 儲存pdf文字內容
* @param file pdf檔案路徑
* @param savePath 文字儲存路徑
* @param isLayout 是否維持原來佈局
*/
public static void extractTXT(String file,String savePath,boolean isLayout){
// XPDF存放路徑
String PATH_TO_XPDF=
"E:\\xpdf\\pdftotext.exe";
File pdffile=new File(file);
// PDF檔案的絕對路徑
String source_absolutePath = pdffile.getAbsolutePath();
File targetfile=new File(savePath);
// 輸出文字檔案的絕對路徑
String target_absolutePath = targetfile.getAbsolutePath();
// 保持原來的layout
String layout = "-layout";
// 如果isLayout為false,則設定不保持原來的layout
if(!isLayout) layout = "";
// 設定編碼方式
String encoding = "-enc";
String character = "UTF-8";
// 設定不列印任何訊息和錯誤
String mistake = "-q";
// 頁面之間不加入分頁
String nopagebrk = "-nopgbrk";

//命令列
String[] cmd = new String[] { PATH_TO_XPDF, layout, encoding, character,
mistake, nopagebrk, source_absolutePath, target_absolutePath };

try {
Runtime.getRuntime().exec(cmd);
} catch (IOException ex) {
Logger.getLogger(Pdf4Text.class.getName()).log(Level.SEVERE, null, ex);
}
}

public static void main(String args[]){
String file="E:\\three body.pdf";
String savePath="E:\\three body.txt";
long startTime=System.currentTimeMillis();
extractTXT(file,savePath,true);
long endTime=System.currentTimeMillis();
System.out.println("讀寫所用時間為:"+(endTime-startTime)+"ms");
}

}

當然你還可以利用pdftohtml.exe,pdftopng.exe,pdftoppm.exe,pdftops.exe等EXE轉化成其他格式的檔案。

有什麼問題就在下面評論,我看到了就會及時的回覆。

相關文章