2016-08-16 166 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