让 Ghostscript 单独保留 JBIG2 文件

问题描述 投票:0回答:2

我正在使用

gs
从 PDF 中删除一些错误的 OCR,这些 PDF 本质上是具有不可见文本层的书页图像。其中一些页面图像被编码为 JBIG2。当我通过 gs 运行它们时,它将图像格式更改为 CCIT,这通常不错,但可能比 JBIG2 版本大 10 到 20 倍。

我一直在寻找一种方法,要么让 gs 不理会它们——比如 PassThroughJPEGImages——要么用 MonoImageEncoder 重新编码它们,但我没有成功。我没有找到任何类似的直通选项,并且在将编码器设置为 JBIG2Encode 时出现错误。根据我的发现,我认为后者不是标准选项,而是需要 Luratech 库。

任何人都可以确认或 - 最好 - 解释我的错误吗?

TIA。

ghostscript jbig2
2个回答
0
投票

这不是关于

gs
问题的答案,而是关于删除不良 OCR 同时保留 jbig2 的解决方法。我使用的是 Linux,但我认为这些工具大部分也可以在 Windows 上使用。

1) 命令行解决方案

深受这个回复的启发,但避免了最后的ghostscript步骤:

  1. 备份您的 pdf。

  2. 使用

    qpdf
    (或
    pdftk
    )解压缩 pdf

     qpdf --qdf --object-streams=disable input.pdf editable.pdf
    

    这会在 qdf 模式下创建一个 pdf 文件,可以在文本编辑器中读取(可以处理大文件)。

  3. 在文本编辑器中或通过

    Tj
    :
     删除所有以 
    TJ
    sed

    结尾的行
     sed 'T[Jj]$/d' ./editable.pdf > editable-no-text.pdf
    

    这些是渲染文本字符串的 pdf 命令。

    这将留下进一步的放置命令,例如与页面上的定位相关的

    Tm
    Td
    以及确定文本显示样式的
    Tr
    。它们本身不包含任何文本,也不会占用太多空间。您也可以通过以下方式删除它们:

     sed 'T[Jjdmr]$/d' ./editable.pdf > editable-no-text.pdf
    

    我没有任何副作用,但在继续之前请检查结果。

  4. 检查 editable-no-text.pdf 看起来是否符合预期。

  5. 重新压缩您的 pdf:

    qpdf --compress-streams=y --object-streams=generate editable-no-text.pdf final.pdf
    

2) GUI 解决方案(仅限 Linux)

我在发现上述内容之前就使用过这个。它更简单,但处理更长的 pdf 文件需要更多工作。我也认为它更安全,但无论如何你都应该有备份。

使用Master PDF Editor(使用该页面末尾的版本4,因为当前版本5有很多锁定的功能)。

您可以将其设置为仅选择文本对象,然后使用

Ctrl+A
选择所有内容并使用
Del
删除。不幸的是,你必须对每个页面都执行此操作,所以我只会循环浏览
Ctrl+A
Del
Page down

虽然这不能正确编写脚本,但您可能可以使用 xdotool bodge


-1
投票

当前没有办法让 Ghostscript 不改变地传递 JBIG2 图像。

pdfwrite 设备不允许 JBIG2Encode 作为可能的编码方法,因此您不能使用它。

这样做的结果是你只能使用CCITTFaxEncode作为MonoImageEncode参数。

一般来说,JBIG2 比 CCITTFax 好一点,但文本是个例外,如果文本的内容已知,则可以通过重用段来实现显着的节省(这也是 JBIG2 解码错误的根源) 2013年的新闻)。听起来你的图像是这样编码的,所以是的,你会得到更大的图像。

© www.soinside.com 2019 - 2024. All rights reserved.