更快速地将PDF的每个页面导出为两个图像

时间:2014-02-14 23:24:58

标签: bash pdf ghostscript imagemagick-convert

工作非常简单:我有几百个PDF文档,我需要将它们的每一页导出为两个图像:一个大,一个小。

经过几个小时的研究和优化后,我想出了一个简洁的Bash脚本来实现它:

#!/bin/bash

FILE=$1
SLUG=$(md5 -q "$FILE")

mkdir -p $SLUG

gs -sDEVICE=jpeg -r216 -g1920x2278 -q -o $SLUG/%d.jpg "$FILE"

for IMAGE in $SLUG/*.jpg; do
  convert $IMAGE -resize 171x219 ${IMAGE/jpg/png}
done

如你所见,我...

  1. 创建一个以文件的MD5命名的目录
  2. 使用GhostScript将PDF的每个页面提取为大JPEG
  3. 使用ImageMagick将较小版本的JPG创建为PNG
  4. 有效。但我担心它不够快。

    我在MacBook上获得平均每页6秒(大约1分钟,80页PDF)。但是这个脚本将在服务器上运行,这是一个非常低端的服务器 - 可能是在亚马逊上使用Ubuntu的微型EC2。

    任何人都有任何提示,技巧或导致帮助我优化此脚本?我应该使用其他工具吗?是否有更适合这种工作的图书馆?

    不幸的是我不写C或C ++,但如果你们指出一些好的库和教程,我会很乐意学习它。

    感谢。

    更新 我刚刚在AWS上的t1.micro实例上测试过它。花了10分钟处理80页的相同PDF。另外我注意到convert是最慢的人花了将近5分钟来调整图像大小。

    更新。 2 我现在在c1.medium实例上测试了它。它是t1.micro价格的7倍,但它与我的MacBook的性能非常接近:对于244页的文档,约为3.5分钟。

    我现在要尝试泥浆和其他组合。

1 个答案:

答案 0 :(得分:1)

你可以运行两次GS,一次用于大图像,再一次用于较小的图像。当然输出可能不会像转换那样好,但是在那个尺寸我估计它不会非常明显。

我不知道如何在Bash脚本中执行此操作,但您可以运行2个Ghostscript实例(每个大小一个),如果服务器达到它可能会更快。