php - 给PDF添加动态水印

标签 php linux pdf watermark

所以我开发了一个 PHP 工具,它允许我们的会计部门处理 PDF。 一旦他们完成修改 PDF,他们希望能够添加水印,这将是其发票编号。 我正在使用一个名为 FPDF 的 PHP 库,但如果 PDF 出于某种原因是第 3 版,则此操作失败。

我一直无法找到通过 PHP 或使用 Linux 命令(使用 PHP 的 shell_exec 函数)执行此操作的方法。 另一个问题是有时 PDF 是加密的,需要修改我们不知道的密码。

基本流程是

  1. PDF 已下载到可供帐户处理的目录中
  2. 帐户处理 PDF
  3. 自动创建发票编号
  4. 发票号在 PDF 上加水印,PDF 被移动到处理过的目录

所有这些都有效,直到我们得到水印。

有人知道解决这个问题的方法吗?

最佳答案

您可以将 (pdf) 图像与 Imagick 结合,您可以将水印分层并设置不透明度:

    $combined = new \Imagick("background.jpg");

    $image = new \Imagick("watermark.jpg");
    $image->setImageOpacity(0.7);
    $combined->compositeImage($image, \Imagick::COMPOSITE_DEFAULT, 354, 237);

    $combined->setImageFormat("pdf");
    $combined->setResolution(300,300);
    $combined->setImageProperty('title', 'your file');
    $combined->setFilename("your file.pdf");

    header('Content-type: application/pdf');
    header('Content-Disposition: attachment; filename="your file.pdf"');
    echo $combined;
    exit;

或者设置注解:

function annotateImage($imagePath, $strokeColor, $fillColor)
{
    $imagick = new \Imagick(realpath($imagePath));

    $draw = new \ImagickDraw();
    $draw->setStrokeColor($strokeColor);
    $draw->setFillColor($fillColor);

    $draw->setStrokeWidth(1);
    $draw->setFontSize(36);

    $text = "Imagick is a native php \nextension to create and \nmodify images using the\nImageMagick API.";

    $draw->setFont("../fonts/Arial.ttf");
    $imagick->annotateimage($draw, 40, 40, 0, $text);

    header("Content-Type: image/jpg");
    echo $imagick->getImageBlob();
}

关于php - 给PDF添加动态水印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50722798/

相关文章:

php - 创建处理表单发布的 API

php - cron 如何根据日期输出到新的日志文件?

javascript - toDataURL() 很慢

php - MySQL 按记录类型限制

linux - 需要帮助编写 bash 脚本,如何将 pw 作为参数并自动输入

linux - 操作系统如何实际测量 CPU 功率?

linux - 可以使用文件大小来检测部分追加吗?

iphone - Quartz PDF API 导致内存不足崩溃

c# - 如何使用 PdfSharp 创建注释以突出显示现有 PDF 的文本

php - FFMPEG 命令在 PHP 中不起作用。 (与 MAMP 不兼容)