【问题标题】:How can I take a pdf, and convert any jpeg2000/jpx/jp2 images in it to jpeg images?如何获取 pdf,并将其中的任何 jpeg2000/jpx/jp2 图像转换为 jpeg 图像?
【发布时间】:2020-10-05 14:12:01
【问题描述】:

我在 Mac Mini 上使用 MacOS Mojave,而且我还在使用无法读取 jpeg2000 图像的旧 Kindle Dx。它也有太多或太大的 jpeg 图像的问题。

我不能使用触摸屏,所以新的电子阅读器和平板电脑不是解决方案。

到目前为止,我发现了一些错误的解决方案--

我可以将 Willus 的 k2pdfopt 与 -mode copy 和 -dev dx 一起使用,它可以对所有内容进行光栅化。这是扫描 pdf 的一个很好的解决方案。如果需要更多细节,不带 -dev dx 的 -mode 复制将保留更高的分辨率。这是 pdf-born-pdfs 的最后手段,因为文本可能更丑陋且难以阅读,而且文件大小可能会惊人地增加。

我还可以使用带有 -dCompatibilityLevel=1.4 的 Ghostscript,它不会对所有内容进行光栅化。它将 jpeg2000 图像转换为 jpeg 图像。但它不能处理一些过大或结构不佳的图像,它经常会创建可以遮挡文本的深色矩形,并且偶尔会失去搜索或选择文本的能力。 [附:我的意思是它需要一个具有可搜索pdf的pdf并输出一个没有的pdf。此外,如果我对图像进行任何类型的下采样或删除,有时会重新缩放所有内容或丢失页面。]

我已经尝试了在 Ghostscript 中压缩图像的选项,结果喜忧参半,并且上述错误仍然存​​在。 [附:我想我是在下采样,是的。]

无论出于何种原因,MacOS Quartz 滤镜仅在它们可以减小图像尺寸时才有效。所以他们往往不会处理有问题的图像。

现在我的理想解决方案是保留文本本身,最好是解开连字,并像 Willus 的 k2pdfopt 那样压缩图像。但我不知道这是否可能或如何。

话不多说——我想知道是否有办法使用 Ghostscript 转换 jpeg2000 图像,而不会导致灰色矩形或失去搜索或选择文本的能力。

或者,如果有办法使用 Quartz 过滤器以便它们工作。在某些旧版本的 MacOS 中,它们确实有效。

或者如果有办法将这些 pdf 文件批量打印到适当的分辨率,显然是 800x1180,在此过程中重新处理图像。

我没有太多的编程经验。我主要用 homebrew 安装命令行工具,非常草率的 bash 脚本,用 Automator 来运行。

附:有关 Ghostscript 中灰色矩形的最小示例,请使用此处的免费 pdf:https://www.peginc.com/store/test-drive-savage-worlds-the-wild-hunt/

gs -sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH -o out.pdf in.pdf

用该 pdf 替换 in.pdf。

有关丢失可搜索文本的最小示例,请使用此处的免费 pdf:http://datafortress2020.com/fileproject/details.php?image_id=498

相同的最小脚本

兼容性级别

gs -sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH -dCompatibilityLevel=1.4 -o out.pdf in.pdf

积极的下采样和灰度

gs -sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH -dCompatibilityLevel=1.4 -g800x1080 -r150 -dPDFFitPage \ -dFastWebView -sColorConversionStrategy=灰色\ -dDownsampleColorImages=true -dDownsampleGrayImages=true -dDownsampleMonoImages=true -dColorImageResolution=75 -dGrayImageResolution=75 -dMonoImageResolution=150 -dColorImageDownsampleThreshold=1.0 -dGrayImageDownsampleThreshold=1.0 -dMonoImageDownsampleThreshold=1.0 \ -o out.pdf in.pdf

附言我可以使用 k2pdfopt 进行光栅化以适合我的 Kindle。如果文件有可搜索的文本,则保留它,如果没有,我可以在 k2 中运行 tesseract 或之后运行 ocrmypdf。

但如果我想要特别好的图形,或者特别清晰的文本,并且文件有数百页,则需要数百兆。我曾将此归咎于文本光栅化,这就是为什么我的理想解决方案是保留文本并光栅化图像,但显然这是图像本身的问题。

【问题讨论】:

    标签: macos pdf pdf-generation ghostscript


    【解决方案1】:

    如果您认为自己发现了错误,那么报告它会很有帮助。如果你不这样做,它永远不会被修复。您可以在https://bugs.ghostscript.com 报告错误,请务必附上示例文件以重现问题并说明使用的命令行。

    Ghostscript pdfwrite 设备永远不会生成 JPEG2000 图像(由于专利问题)。所以你根本不需要设置 CompatibilityLEvel,我建议你不要。通过设置 CompatibilityLevel,您可以限制输出。除非您的设备无法处理更高版本,否则不要这样做。

    如果没有看到示例文件、命令行以及知道版本和操作系统,显然任何人都无法评论您的“灰色矩形”。

    您可以通过对图像进行下采样(而不是压缩)来减小图像的大小(以字节为单位),但您无法对图像数量做任何事情。

    请注意,可搜索文本取决于 PDF 文件的结构,因此无法保证。可搜索文本(在 ToUnicode CMaps 的意义上)是后来添加到 PDF 参考的,并且始终是可选的,因为可能有无法确定 Unicode 代码点的输入(不使用 OCR 软件),但可以完美读取 PDF 文件还是可以生产的。

    Ghostscript 本身可以生成一个 PDF 文件,该文件是原始文件的渲染表示,包装为 PDF。查看 pdfimage* 设备。

    Tesseract 可以拍摄图像并生成带有可搜索文本的 PDF 文件,通过对图像进行 OCR 处理。在我看来,这似乎是您的最佳选择,但显然我不知道您的设备是否可以接受单个大图像。

    编辑

    我已经同意,PDF 本身不支持搜索文本,除非作为可选附件。您指出的错误报告谈到了“损坏的文本层”。 PDF中没有文字层,文字既没有损坏也没有丢失,只是不再编码为ASCII。

    您不应该设置分辨率和像素大小的原因是因为 PDF 不是图像格式。这样做你没有任何收获。所发生的只是 pdfwrite 将“g”值除以分辨率,以获得以英寸为单位的媒体大小,并将其写入 MediaBox。设置媒体大小更简单。如果您设置分辨率,则您正在修复确实以该分辨率呈现的任何内容。选择低分辨率,你会得到糟糕的输出。如果您使用更高的分辨率,则可以缩小和平滑图像以提供更好的输出。

    您的 Kindle 确实有可能无法比 Mac 更好地处理透明度,毕竟它是一台旧设备。也有可能是为您构建 Ghostscript 的人引入了一个错误。恐怕我们无法为您提供任何帮助。

    我确实建议,在原始帖子的末尾,您将内容渲染为图像(Ghostscript 会为您完成),然后使用 Tesseract 将图像转换回 PDF,同时对文本进行时间 OCR。

    这将解决您使用 JPEG2000 的问题,在创建可搜索文本方面做得*更好,因为即使是不可搜索的文件也会变成这样,并且允许您指定分辨率。

    【讨论】:

    • 我已尝试报告大多数这些错误,但被拒绝了,因为 (a) pdf 一开始就格式错误,并且 (b) 删除可搜索的文本不被视为错误。现在因为这个网站不支持回复段落,我不能发送示例脚本。
    • 好吧,如果 PDF 文件损坏了,那么如果您尝试修改它们,那么无论发生什么都是幸运的,我确实提到能够搜索文本是一种奖励。哪些错误编号被拒绝了?我不知道您所说的“回复中的段落”是什么意思,完全有可能将段落放在 Bugzilla 线程中。另外,我认为脚本不是一个好主意,因为开发人员必须使用与您相同的操作系统才能使用脚本。只引用命令行有什么问题?
    • 我注意到您在上面使用的命令行是一个很棒的交易,比您最初指出的要广泛。不仅 htat 购买了其中的大部分内容,要么不是一个好主意,要么是多余的。我不会使用 FastWebView,它只会让文件毫无意义地变大。你不应该设置分辨率,除非你期望内容被渲染,而且你绝对应该以像素为单位设置媒体大小!
    • 一个更简单的 gs -sDEVICE=pdfwrite -o out.pdf input.pdf 生成一个小 30% 的 PDF 文件,其中没有灰色矩形(尽管你没有说哪个16 页对您有影响)并且不包含任何 JPX 图像,这就是我认为您的问题的全部内容。这是 Wild Hunt 文件的内容。
    • 这个:-sDEVICE=pdfwrite -sColorConversionStrategy=Gray -dDownsampleColorImages=true -dDownsampleGrayImages=true -dDownsampleMonoImages=true -dColorImageResolution=75 -dGrayImageResolution=75 -dMonoImageResolution=150 -dColorImageDownsampleThreshold=1.0 -dGrayImageDownsampleThres=1 -dMonoImageDownsampleThreshold=1.0 -o out.pdf SWTestDriveTheWildHunt.pdf 也适用于我,生成的文件更小,也没有任何灰色矩形。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 2013-05-28
    • 2020-09-02
    • 2019-09-10
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多