FPDF/FPDI Error: Fatal error: Class 'setasign\Fpdi\FpdfTpl' not found in

FPDF/FPDI Error: Fatal error: Class 'setasign\Fpdi\FpdfTpl' not found in

我正在尝试为现有的 PDF 文档添加水印,这个错误在过去两天一直困扰着我...

我在 fpdi/src/ 中有 FPDI 库,在 /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 方面还算可以,但这个错误真的让我陷入了困境。如果需要更多信息,请告诉我,我会提供。

如果你改变这个会发生什么:

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');

这样要求 classes:

require_once('fpdf/fpdf.php');
require_once('fpdi/src/autoload.php');

然后将 use \setasign\Fpdi\Fpdi; 添加到您的水印中而不仅仅是 use \setasign\Fpdi; 或在您的 class 声明中使用正确的 class 名称(包括完整的命名空间)。

为了它的价值,我只是将导致问题的所有功能从 "protected" 更改为 "public"。对我有用!