我使用imagick将png转换为pdf:
#include <string>
void func(std::string str)
{
}
void my_func()
{
func(false);
}
现在我得到一个只有一页的pdf,并且打印那个pdf有问题。
是否可以自动拆分png以创建包含A4格式页面的pdf?
答案 0 :(得分:2)
不是100%确定你想要分割大型PNG图像的方式/位置,但这应该会给你一些想法。首先,让我们确定一张A4的非常近似的尺寸 - 有些打印机没有边框,有些打印机无法靠近纸张的边缘,所以如果我们说,为了论证,A4是8英寸乘11,然后是144 dpi(也是猜测)你将在A4的页面上获得大约1,152像素×1,584像素。
因此,我们将您的图像分成不大于它的块,并重新它们,以便它们忘记它们来自原始图像的位置。然后,我们将生成的A4大小的块保存为page000.png
,page0001.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
现在把那只小狗砍掉......
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并没有什么不同:
答案 1 :(得分:1)
另一种方法是告诉ImageMagick对tileset进行裁剪
convert -crop 1x16@ AHw1w.png -page 200x100 tile.pdf
将输入图像分为16个高,1个跨,然后将它们渲染到pdf上,其页面的大小为200×100。