2016-08-16 222 views
0

我正在使用生成'.ps'文件的Postscript打印機,並且正在使用我的Linux機器中的'ps2pdf'命令將該.ps文件轉換爲.pdf。這是在這裏生成的文件,它的內容是不可選擇和可複製的。當我嘗試使用apache Tika從同一pdf文件中提取內容時,它返回一個空字符串(表示無法提取)。我認爲這可能是問題一些字體,所以我也安裝了一些新的字體,但仍然沒有爲我工作。無法使用tika從pdf文件中提取文本內容

我無法找出問題所在。無論是打印機驅動程序還是ghostscript(用於將'.ps'轉換爲'.pdf')的問題,還是字體問題-其他。

使用tika檢索內容時,它會打印一些警告(不是錯誤),如下所示。

WARN No Unicode mapping for CID+1 (1) in font WKQJKU+ArialNarrow-Identity-H 
WARN No Unicode mapping for CID+2 (2) in font WKQJKU+ArialNarrow-Identity-H 
WARN No Unicode mapping for CID+3 (3) in font WKQJKU+ArialNarrow-Identity-H 
WARN No Unicode mapping for CID+4 (4) in font WKQJKU+ArialNarrow-Identity-H 
WARN No Unicode mapping for CID+5 (5) in font WKQJKU+ArialNarrow-Identity-H 

....

任何幫助預先感謝.Thanks。

回答

2

沒有看到原始的PostScript文件和PDF,它不能真正說出問題是什麼,或者它是否可以修復。您需要將文件公佈在某個地方。

您也不會說'ps2pdf'命令是什麼,有幾個不同的實用程序使用相同的名稱。如果使用Ghostscript,那麼它在運行時會這樣說。如果是這樣,你會更好地直接運行Ghostscript以避免混淆。你還應該引用你正在使用的Ghostscript版本。

現在PostScript程序通常打算髮送給打印機進行打印。因此,使用什麼字符代碼來表示字形並不重要,只要字體編碼和字符代碼組合在輸出上產生預期的字符形狀即可。因此,絕對不能保證原始應用程序中的'A',在紙上打印爲'A',實際上以字符代碼0x41表示。一個應用程序創建一個子集字體的情況並不少見,它只包含實際打印的字形,並且它的排列使得要打印的第一個字符被賦予代碼1,第二個被賦予代碼2等。因此'你好'將是0x01 0x02 0x03 0x03 0x04

Windows PostScript打印機驅動程序添加一個非標準的G2U表,它將字形名稱映射到Unicode代碼點,並且使用它可以構造一個ToUnicode CMap並將其嵌入到PDF文件。這允許將複雜的編碼轉換爲Unicode值,這意味着搜索和複製/粘貼將起作用。

但是您還沒有說過您使用哪種系統來創建PostScript程序,並且由於您沒有提供示例,我們只是不知道您的PostScript是如何生成的。

看起來您的PDF文件正在使用CIDFont,並且不包含ToUnicode CMap。這是不太可能的,這將產生一個PDF文件,您可以複製/粘貼東西。當然,這不是PDF的原始目標,這就是爲什麼它不能保證是可能的。

很可能沒有辦法將PostScript文件轉換爲可編輯的PDF文件,但是您沒有提供足夠的信息來說明。

[稍後]

後記由開羅PDF文件生成,有可能,但是這並不完全清楚,它可能僅僅是開羅的工作方式。在任何情況下....PostScript包含CIDFontType 2(TrueType輪廓)的嵌入子集CIDFont。由於PostScript沒有提供Unicode信息的定義機制,因此沒有提供。如上所述,'encoding'是在遇到字符時創建的,因此第一個glyph編碼爲0x01等。

這樣做的結果是沒有簡單的方法從此PostScript文件中提取有意義的文本,除了打印它和使用OCR當然。

可以想象,CIDFont的sfnts包含一個3,0 CMAP子表,它可以將字形ID映射到Unicode值,但這需要我一些時間來檢查。但是,即使是這種情況,Ghostscript的pdfwrite代碼目前也不會嘗試這一壯舉(Acrobat Distiller也不是我知道的任何其他PostScript to PDF創建者)。

因此,基本上,你不能做你想做的事情。爲什麼不讓開羅生成PDF文件而不是PostScript文件?它更可能以我想象的那種方式工作。當然,這可能意味着你必須看看你的虛擬打印機是如何工作的,如果你使用的是CUPS,我應該可以這樣想,因爲PDF是現代版本的CUPS所使用的常用格式。

+0

您好@KenS,非常感謝您的快速響應,在我的問題'ps2pdf'是ghostscript實用程序和打印機是在linux機器上。我不知道如何上傳文件以供參考。如果您分享您的郵件ID我也可以給你發送文件。 – prasad

+0

你不能在這裏發佈文件,最好把它放在DropBox或其他東西,並在這裏發佈的URL,然後除了我以外的人可以看。你使用的是什麼版本的Ghostscript,你從哪裏得到它(包,自己從源頭構建等)?如果你絕對必須使用電子郵件,你可以發送到垃圾郵件點網(肯定不想在這裏明顯的電子郵件地址) – KenS

+0

嗨@KenS,我的ghostscript版本是9.16。在這裏,我分享了收件箱鏈接到postscript和pdf文件。 https://www.dropbox.com/s/jq5m4dkz175o0nk/VirtualPrinter_16_08_2016_16_09_20_865.ps?dl=0,https://www.dropbox.com/s/y8jo3whu2kw12sr/VirtualPrinter_16_08_2016_16_09_24_896.pdf?dl=0 – prasad