【问题标题】:Scale pdf to A4 pdf with ratio - width to sides & centered按比例缩放 pdf 到 A4 pdf - 宽度到边和居中
【发布时间】:2018-01-23 22:12:41
【问题描述】:

我有一个使用图像创建的 pdf(因此它具有图像的原始尺寸)

现在,我正在尝试按比例缩放它以适合 A4 pdf(宽度与边接触并垂直居中)。

这是我试过的代码:

    $imagick = new \Imagick();
    $imagick->setResolution(576,576);
    $imagick->readImage($path);
    $imagick->resizeImage(2480,3508,\Imagick::FILTER_CUBIC,1);
    $imagick->setCompressionQuality(80);
    $imagick->setImageFormat('pdf');
    $imagick->writeImage($path);

但它会扰乱图像比例以适应整个页面(100% 宽度和 100% 高度)。

例如,原始图像 717x558:

导出的图片,

但是,我想要实现的是:


** 更新**

$imagick = new \Imagick();
$imagick->readImage($path);
$imagick->resizeImage(595,842,\Imagick::FILTER_CUBIC,1);
$imagick->setBackgroundColor(new ImagickPixel('white')); 
$imagick->setGravity ( Imagick::GRAVITY_CENTER );
$imagick->extentImage ( 595 , 843 , 0 , 0 );
$imagick->setImageFormat('pdf');
$imagick->writeImage($path);

使用这个,这是输出(它是整页但丢失了比例):

【问题讨论】:

    标签: php pdf imagemagick imagick


    【解决方案1】:

    您只提供了 PNG 图像,而不是 PDF。但这应该有助于使用 Imagemagick 命令行。抱歉,我不知道 Imagick,但你应该能够找出等效的命令。请注意,A4 尺寸为 595x842 像素。

    convert source.png -background white -resize 595x842 -gravity center -extent 595x842 -bordercolor red -border 1 result.png
    

    请注意,您可以删除 -bordercolor red -border 1,因为我添加了一个红色边框以在白色背景下显示输出的大小。

    如果使用 PDF 输入,您可以尝试相同,或者如果质量不好,您可以尝试增加密度,例如

    convert -density 300 source.pdf -background white -resize 595x842 -gravity center -extent 595x842 result.png
    

    【讨论】:

    • 是的,很抱歉我不能在这里上传pdf文件,所以我上传了一个png。但你完全明白了。我很感激任何可以将其转换为 Imagick/php 的人。不过感谢您的意见,这绝对是我想要的
    • 请注意,如果您要输出为 PDF,那么 Imagemagick 将光栅化 PDF。但是您说您的 PDF 实际上是矢量 PDF 外壳中的光栅图像。所以应该没问题。在调整大小之前,您可能希望使用 pdfimages 从 PDF 中提取光栅图像。
    • drive.google.com/open?id=1F5h-etf4E4l47CoyrDUvOAecLyfeqBWA 这是我云端硬盘上的 pdf 网址,如果您想尝试一下并包含在答案中。我将不胜感激!光栅,你的意思是像展平吗?如果您可以尝试并通知我,也许我可以使用 Imagick 轻松实现它(再次感谢)。
    【解决方案2】:

    这似乎在 Imagemagick 中对我来说很好用。

    convert birds.pdf -background white -resize 595x842 -gravity center -extent 595x842 result.pdf
    


    您可以在 Imagick 中尝试以下操作,尽管我不是这方面的专家。

    $imagick = new \Imagick();
    $imagick->readImage($path);
    $imagick->resizeImage(595,842,\Imagick::FILTER_CUBIC,1);
    $imagick->setBackgroundColor(new ImagickPixel('white')); 
    $imagick->setGravity ( Imagick::GRAVITY_CENTER );
    $imagick->extentImage ( 595 , 843 , 0 , 0 );
    $imagick->setImageFormat('pdf');
    $imagick->writeImage($path);
    

    【讨论】:

    • 我做了,它是全尺寸 A4,但失去了比例。 :/你可以看到我的OP(底部更新部分)
    • 我认为这部分是$imagick->resizeImage(595,842,\Imagick::FILTER_CUBIC,1); 使图像无比例595x842
    • @sentry。对不起,我不明白你最后的评论。
    • 让我这样说:我尝试了您的代码,并且它保持了比率,但这并不能让它适合具有比率的页面。相反,它使较小的一侧适合,并进一步扩展另一侧(因此在 pdf 之外)。 php代码对你有用吗?
    • @sentry 请发布您的结果示例。是来自我的命令行还是来自 Imagick 代码。如果是后者,正如我所提到的,我不太了解 Imagick。所以可能会出错。如果来自 Imagemagick 命令行,那么如果我之前给你的东西不起作用,那么请说明它是怎么错的以及你想要什么。
    猜你喜欢
    • 2012-10-03
    • 2018-12-23
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    相关资源
    最近更新 更多