1
我有一組pdf文件,其中包含中歐文字,如č,Ď,Š等。我想將它們轉換爲文本,並且我通過Apache Tika嘗試了pdftotext
和PDFBox
,但總是其中一些未正確轉換。特殊字符不能正確地從PDF轉換爲文本
奇怪的是,同一文本中的同一個字符在某些地方正確轉換,而在其他地方正確轉換!一個例子是pdf。
在pdftotext的情況下,我使用這些選項:
pdftotext -nopgbrk -eol dos -enc UTF-8 070612.pdf
我提卡代碼看起來像這樣:
String newname = f.getCanonicalPath().replace(".pdf", ".txt");
OutputStreamWriter print = new OutputStreamWriter (new FileOutputStream(newname), Charset.forName("UTF-16"));
String fileString = "path\to\myfiles\"
try{
is = new FileInputStream(f);
ContentHandler contenthandler = new BodyContentHandler(10*1024*1024);
Metadata metadata = new Metadata();
PDFParser pdfparser = new PDFParser();
pdfparser.parse(is, contenthandler, metadata, new ParseContext());
String outputString = contenthandler.toString();
outputString = outputString.replace("\n", "\r\n");
System.err.println("Writing now file "+newname);
print.write(outputString);
}catch (Exception e) {
e.printStackTrace();
}
finally {
if (is != null) is.close();
print.close();
}
編輯:忘了提,我面臨着同樣的問題當從Acrobat Reader XI轉換爲文本時。
嘿喬恩。感謝你的回答。事實是,我隱藏了一些在字符串級別進行utf8轉換的代碼,即在寫入到PrintWriter之前,但您是正確的,OutputStreamWriter是最好的解決方案。儘管如此,仍然有問題。也許這是由於pdf編碼的一些問題,但我不是pdf專家 –
@YannisP:在使用作家之前你不應該做任何事情 - 如果你這樣做,你幾乎肯定會做錯事,因爲普通的'String'沒有任何編碼(或者它總是UTF-16,取決於你的POV)。如果您正在使用'getBytes'和'String'構造函數進行字符串轉換,請立即停止。 –
好,所以我改成'OutputStreamWriter print = new OutputStreamWriter(new FileOutputStream(newname),Charset.forName(「UTF-16」));'但問題仍然存在。我懷疑這是pdf格式的一個普遍問題,因爲除此之外,Adobe Reader的轉換器的行爲相同。 –