使用Imagemagick和PHP将PDF纵向转换为图像横向

时间:2014-07-25 05:58:12

标签: php pdf ghostscript imagemagick-convert

我想将多页PDF转换为一系列png文件,而PDF是纵向的,而png文件是横向的,使用imagemagick。我已实现从PDF portrait到png protrait的转换(下面附带代码)。但不知道如何将肖像图像制作成没有失真的landsacpe(不旋转图像)。 有人可以帮助我吗?感谢。

$infile=$direcory."/Test.pdf";
$images=new Imagick();
$bodercolor=new ImagickPixel("white");

$images->setResolution(220, 220);
$images->readimage($infile);
$images->setimageformat("png");

foreach ($images as $i=>$image){    
   //set backgroud color = white
   $image->setimagebordercolor($bodercolor);
   $image->borderimage($bodercolor, 0, 0);

   $image->writeimage($direcory."/test-pg".$i.".png");  
}

$images->clear();
$images->destroy();

实际上,我想要的是将垂直页面旋转到水平,其上的对象几乎没有变化。就像将页面方向更改为横向时,我们可以使用Microsoft Word / PowerPoint执行的操作。

2 个答案:

答案 0 :(得分:1)

那么,你的任务似乎是两个步骤:从pdf中获取png(你说你已经完成)并获得png图像来改变大小。

问问自己你想做什么 - 将垂直图像旋转为水平?裁剪垂直图像的某些部分并将其放入水平空间?

您需要做的是确定上述问题的答案。之后 - 拿一支笔,一张纸,画出这个过程。绘制垂直矩形,然后填写您在该页面上的某些区域,然后旋转/变换/调整大小/适合等 - 无论您的答案是该内容区域是否为水平矩形。

之后你可以编写代码 - 处理像素宽度/高度,旋转角度,将区域拟合到水平空间等等。

答案 1 :(得分:1)

在PowerPoint中更改幻灯片的方向时,它会重新计算整个布局:中心元素根据新宽度向左或向右移动,多行文本重新包装,依此类推。这是可能的,因为PowerPoint知道元素应该如何格式化。

您不能使用PDF文件,因为它不包含那种高级格式信息; PDF基本上只是描述墨水在纸上的位置。阅读PDF文件时,您不知道特定的文本行应该居中;你只知道左上角应该定位的(X,Y)坐标。如果一行文字的下方出现另一个,没有什么可以告诉你是否在第二行的开头字应移到第一结束时的页面变得更宽(如自动换行),或者如果他们是无关的项目(如单独的要点)不应合并。

从根本上说,PDF更像是图片,而不是可编辑的文档。