我正在尝试给一个现有的PDF文档添加水印,这个错误在过去的两天里一直困扰着我……
FPDI库在fpdi/src/中,fpdf库在/fpdf/中
抛出错误的文件是Fpdi.php (第27行)。下面是前30行代码:
<?php
/**
* This file is part of FPDI
*
* @package setasign\Fpdi
* @copyright Copyright (c) 2017 Setasign - Jan Slabon (https://www.setasign.com)
* @license http://opensource.org/licenses/mit-license The MIT License
* @version 2.0.0
*/
namespace setasign\Fpdi;
use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
use setasign\Fpdi\PdfParser\Type\PdfIndirectObject;
use setasign\Fpdi\PdfParser\Type\PdfNull;
//use setasign\Fpdi\FpdfTpl;
/**
* Class Fpdi
*
* This class let you import pages of existing PDF documents into a reusable structure for FPDF.
*
* @package setasign\Fpdi
*/
class Fpdi extends FpdfTpl
{
use FpdiTrait;
下面是我用来动态为.pdf文档添加水印的文件:
<?php
$fullPathToFile = $_GET['fileToWaterMark'];
require('rotation.php');
require_once('fpdf/fpdf.php');
require_once 'fpdi/src/fpdi.php';
require_once('fpdi/src/FpdfTpl.php');
class PDF_Rotate extends FPDI {
var $angle = 0;
function Rotate($angle, $x = -1, $y = -1) {
if ($x == -1)
$x = $this->x;
if ($y == -1)
$y = $this->y;
if ($this->angle != 0)
$this->_out('Q');
$this->angle = $angle;
if ($angle != 0) {
$angle*=M_PI / 180;
$c = cos($angle);
$s = sin($angle);
$cx = $x * $this->k;
$cy = ($this->h - $y) * $this->k;
$this->_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));
}
}
function _endpage() {
if ($this->angle != 0) {
$this->angle = 0;
$this->_out('Q');
}
parent::_endpage();
}
}
//$fullPathToFile = "chinmay235.pdf";
class PDF extends PDF_Rotate {
var $_tplIdx;
function Header() {
global $fullPathToFile;
//Put the watermark
$this->Image('http://chart.googleapis.com/chart?cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World', 40, 100, 100, 0, 'PNG');
$this->SetFont('Arial', 'B', 50);
$this->SetTextColor(255, 192, 203);
$this->RotatedText(20, 230, 'Raddyx Technologies Pvt. Ltd.', 45);
if (is_null($this->_tplIdx)) {
// THIS IS WHERE YOU GET THE NUMBER OF PAGES
$this->numPages = $this->setSourceFile($fullPathToFile);
$this->_tplIdx = $this->importPage(1);
}
$this->useTemplate($this->_tplIdx, 0, 0, 200);
}
function RotatedText($x, $y, $txt, $angle) {
//Text rotated around its origin
$this->Rotate($angle, $x, $y);
$this->Text($x, $y, $txt);
$this->Rotate(0);
}
}
$pdf = new PDF();
$pdf->AddPage();
$pdf->SetFont('Arial', '', 12);
$pdf->Output();
?>
我对PHP很在行,但是这个错误真的把我搞糊涂了。如果需要更多的信息,请让我知道,我会提供它。
发布于 2017-11-16 00:37:53
以这种方式请求类:
require_once('fpdf/fpdf.php');
require_once('fpdi/src/autoload.php');
然后将use \setasign\Fpdi\Fpdi;
添加到您的水印,而不仅仅是use \setasign\Fpdi;
,或者在您的类声明中使用正确的类名(包括完整的命名空间)。
发布于 2017-11-15 02:52:44
如果更改此设置,会发生什么情况:
require_once('fpdf/fpdf.php');
require_once 'fpdi/src/fpdi.php';
require_once('fpdi/src/FpdfTpl.php');
对这个吗?
require_once('fpdf/fpdf.php');
require_once('fpdi/src/autoload.php');
或者,如果您没有自动加载,那么您可能需要添加:
require_once('fpdi/src/FpdiTrait.php');
发布于 2020-03-20 13:11:55
为了它的价值,我刚刚将所有引起问题的函数从“受保护的”改为“公共的”。对我很管用!
https://stackoverflow.com/questions/47292751
复制相似问题