php FPDF和FPDI水印以一定Angular 读取X-Y

ukdjmx9f  于 2023-08-02  发布在  PHP
关注(0)|答案(1)|浏览(129)

使用setasign/FPDFsetasign/FPDI库,我必须添加水印和自定义页脚覆盖到任何PDF文档在旅途中(每一页都必须有水印)。原始PDF文件存储在服务器上,并且该过程必须在文件请求时完成(因为它们包括请求日期时间)
我设法添加了所需的页脚,包括请求的日期和时间,感谢下面的代码。这段代码还打印了一次出现的水印,对角地在页面上,但是,我真的想要另一种行为:对角线重复字符串as it can be seen on this image(例如,我的字符串是动态生成的)。字符串是否在页面的“外部”开始或结束并不重要,只要它在几行上重复,这些行必须等距。
你知道从哪里开始吗?
今天的工作代码:

<?php

use setasign\Fpdi\Fpdi;

require_once('vendor/autoload.php');

class Watermarked_PDF extends Fpdi
{
    function Footer()
    {
        $this->SetY(-10);
        $this->SetFont('Arial', false, 8);
        $this->SetTextColor(28, 28, 28);
        $this->Cell(0, 15, 'File requested on : ' . date('r'), 0, 0, 'C');
    }
}

function addWatermark($x, $y, $watermarkText, $angle, $pdf)
{
    $angle = $angle * M_PI / 180;
    $c = cos($angle);
    $s = sin($angle);
    $cx = $x * 1;
    $cy = (300 - $y) * 1;
    $pdf->_out(sprintf('q %.5F %.5F %.5F %.5F %.2F %.2F cm 1 0 0 1 %.2F %.2F cm', $c, $s, -$s, $c, $cx, $cy, -$cx, -$cy));
    $pdf->Text($x, $y, $watermarkText);
    $pdf->_out('Q');
}

$pdf = new Watermarked_PDF();
$file_Path = 'documents/';
$file_Name = '13825_2023-07-04';
$pages_count = $pdf->setSourceFile($file_Path . $file_Name . '.pdf');
for ($i = 1; $i <= $pages_count; $i++) {
    $pdf->AddPage();
    $tplIdx = $pdf->importPage($i);
    $pdf->useTemplate($tplIdx, 0, 0);
    $pdf->SetFont('Arial', 'B', 15);
    $pdf->SetTextColor(175, 175, 175);
    $watermarkText = 'file #' . $file_Name . ' - propery of company';
    addWatermark(120, 220, $watermarkText, 45, $pdf);
    $pdf->SetXY(25, 25);
}
$pdf->Output();

字符串

用于测试的基本composer.json文件:

{
    "require": {
        "setasign/fpdf": "1.8.*",
        "setasign/fpdi": "^2.3"
    }
}


谢谢你的帮助!

lc8prwob

lc8prwob1#

实际上我找到了一个变通办法,但相当丑陋:

for ($i = 1; $i <= $pages_count; $i++) {
    $pdf->AddPage();
    $tplIdx = $pdf->importPage($i);
    $pdf->useTemplate($tplIdx, 0, 0);
    $pdf->SetFont('Arial', 'B', 15);
    $pdf->SetTextColor(175, 175, 175);
    $watermarkText = 'file #' . $file_Name . ' - propery of company';
    addWatermark(0, 0, $watermarkText, 45, $pdf);
    addWatermark(0, 50, $watermarkText, 45, $pdf);
    addWatermark(0, 100, $watermarkText, 45, $pdf);
    addWatermark(0, 150, $watermarkText, 45, $pdf);
    addWatermark(0, 200, $watermarkText, 45, $pdf);
    addWatermark(0, 250, $watermarkText, 45, $pdf);
    addWatermark(0, 300, $watermarkText, 45, $pdf);
    addWatermark(0, 350, $watermarkText, 45, $pdf);
    addWatermark(0, 400, $watermarkText, 45, $pdf);
    addWatermark(0, 450, $watermarkText, 45, $pdf);
    $pdf->SetXY(25, 25);
}

字符串
更新后的循环,即使没有优化,也能完成这项工作。我现在将按照这个方法工作并根据我的目的调整它,

相关问题