将长图像转换为分页pdf

时间:2015-07-01 13:56:51

标签: image pdf imagemagick

我使用imagick将png转换为pdf:

#include <string>

void func(std::string str)
{
}

void my_func()
{
    func(false);
}

现在我得到一个只有一页的pdf,并且打印那个pdf有问题。

是否可以自动拆分png以创建包含A4格式页面的pdf?

2 个答案:

答案 0 :(得分:2)

不是100%确定你想要分割大型PNG图像的方式/位置,但这应该会给你一些想法。首先,让我们确定一张A4的非常近似的尺寸 - 有些打印机没有边框,有些打印机无法靠近纸张的边缘,所以如果我们说,为了论证,A4是8英寸乘11,然后是144 dpi(也是猜测)你将在A4的页面上获得大约1,152像素×1,584像素。

因此,我们将您的图像分成不大于它的块,并重新它们,以便它们忘记它们来自原始图像的位置。然后,我们将生成的A4大小的块保存为page000.pngpage0001.png等。

convert image.png -crop 1152x1584 +repage page%03d.png

现在我们可以将它们全部重新组合成PDF

convert -density 144 page*png result.pdf

显然,这个简单的方法没有概念,在哪里是一个合理的地方砍你的图像,所以它可以在不幸的地方切割!

正如@Danack评论的那样,您可以避免使用中间文件,并直接转到输出PDF,如下所示:

convert image.png -crop 1152x1584 +repage output.pdf

我们来试试吧。首先创建一个大的渐变PNG

convert -size 3000x4000 gradient:black-white image.png

enter image description here

现在把那只小狗砍掉......

convert image.png -crop 1152x1584 +repage page%03d.png

这样可以提供9页:

identify page*
page000.png PNG 1152x1584 1152x1584+0+0 16-bit sRGB 9.68KB 0.000u 0:00.000
page001.png[1] PNG 1152x1584 1152x1584+0+0 16-bit sRGB 9.68KB 0.000u 0:00.000
page002.png[2] PNG 696x1584 696x1584+0+0 16-bit sRGB 8.3KB 0.000u 0:00.000
page003.png[3] PNG 1152x1584 1152x1584+0+0 16-bit sRGB 9.71KB 0.000u 0:00.000
page004.png[4] PNG 1152x1584 1152x1584+0+0 16-bit sRGB 9.71KB 0.000u 0:00.000
page005.png[5] PNG 696x1584 696x1584+0+0 16-bit sRGB 8.32KB 0.000u 0:00.000
page006.png[6] PNG 1152x832 1152x832+0+0 16-bit sRGB 5.21KB 0.000u 0:00.000
page007.png[7] PNG 1152x832 1152x832+0+0 16-bit sRGB 5.21KB 0.000u 0:00.000
page008.png[8] PNG 696x832 696x832+0+0 16-bit sRGB 4.48KB 0.000u 0:00.000

然后将它们重新组合在一起作为PNG显示在这里,但Pdf并没有什么不同: enter image description here

答案 1 :(得分:1)

另一种方法是告诉ImageMagick对tileset进行裁剪

convert -crop 1x16@  AHw1w.png -page 200x100 tile.pdf

将输入图像分为16个高,1个跨,然后将它们渲染到pdf上,其页面的大小为200×100。