【问题标题】:Convert PDF portrait to image landscape using Imagemagick and PHP使用 Imagemagick 和 PHP 将 PDF 纵向转换为横向图像
【发布时间】:2014-09-16 21:48:09
【问题描述】:

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

$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 执行的操作一样。

【问题讨论】:

  • 您无法在不扭曲或裁剪矩形的情况下更改矩形的纵横比(即将高矩形变为宽矩形)。
  • 感谢您的回复。我刚刚编辑了我的帖子。请看最后一段,它说明了我真正想要的。你有什么想法吗,维扎德?还是其他人?

标签: php pdf ghostscript imagemagick-convert


【解决方案1】:

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

您不能对 PDF 文件执行此操作,因为它不包含那种高级格式信息; PDF 基本上只是描述在纸上放置墨水的位置。阅读 PDF 文件,您不知道特定的文本行应该居中;您只知道其左上角应定位的 (X, Y) 坐标。如果一行文本出现在另一行下方,则没有什么可以告诉您当页面变宽时(例如自动换行)是否应该将第二行开头的单词移到第一行的末尾,或者它们是否是不相关的项目(如单独的项目符号)不应合并。

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

【讨论】:

  • 感谢您的回复。但是,如果我在 pdf 文件中只有一两张图片怎么办?我可以知道图像 4 角的 x,y 坐标吗?因此,我可以将图像抽象化并正确放置在横向空白页中。
【解决方案2】:

那么,您的任务似乎是两个步骤:从 pdf 获取 png(您说您已经完成)和获取 png 图像以更改大小。

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

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

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

【讨论】:

  • 感谢您的回复。我刚刚编辑了我的帖子。请看最后一段,它说明了我真正想要的。我确实需要做这两个步骤。但是我不介意改变2个步骤的顺序,也就是说如果改变pdf文件的方向,然后把pdf改成png也是可以的,只要能得到我想要的。
  • 复制并调整图像大小以适应水平限制。使用纸张 - 绘制垂直矩形和水平矩形。将内容放在垂直位置,看看您需要做什么才能将其转换为水平方向。对图像应用必要的计算。 PHP 有许多函数来处理图像的旋转、调整大小和变换 - 使用它们。
  • 感谢您的回复。您的意思是调整垂直图像的大小并直接将其放在横向页面的中间吗?这意味着我需要进行缩放,使垂直图像的高度等于水平图像的高度,并且我的结果图像两侧都有宽边框?
  • 画出来,伙计... 有疑问时 - 拿纸把台阶画出来。看你有什么——输入,看你想接收什么——输出,看你需要做什么——过程、功能、方法。创建算法来计算你需要做什么。考虑所有不同的情况。这就是编程。在学习如何计划和创建程序 - 算法之后,了解该语言及其所有不同的功能和命令。
猜你喜欢
  • 2023-01-30
  • 2020-02-21
  • 1970-01-01
  • 2013-07-31
  • 2014-05-11
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多