【问题标题】:FPDF/FPDI Error: Fatal error: Class 'setasign\Fpdi\FpdfTpl' not found inFPDF/FPDI 错误:致命错误:类 'setasign\Fpdi\FpdfTpl' 未在
【发布时间】:2018-04-27 19:30:38
【问题描述】:

我正在尝试为现有的 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 相当称职,但这个错误确实让我陷入了困境。如果需要更多信息,请告诉我,我会提供。

【问题讨论】:

    标签: php pdf fpdf


    【解决方案1】:

    以这种方式要求类:

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

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

    【讨论】:

    • 澄清:在您的主 php 文件中需要 autoload.php 文件后使用 use \setasign\Fpdi\Fpdi;。
    【解决方案2】:

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

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

    【讨论】:

    • 它给了我这个:致命错误:在第 40 行的 C:\xampp\htdocs\watermark.php 中找不到类 'FPDI' 并添加 FpdiTrait.php 但不包括 autoload.php 会引发原始错误(它也与添加的那一行有关)。
    • 添加到 watermark.php 的顶部 use \setasign\Fpdi;
    • 奇怪的是......当尝试使用 TCPDF 做同样的事情时,我收到此错误:致命错误:在 [文件路径].tcpdf 中找不到 Class 'Com\Tecnick\Pdf\ClassObjects' .php。也许有一个更大的潜在问题?我正在使用 XAMPP,香草设置。
    • 当我按照您在之前评论中的建议执行操作时(使用 autoload.php),我收到此错误:致命错误:在 C:\xampp\htdocs\ 中找不到类 'setasign\Fpdi' watermark.php 第 48 行
    • 将use \setasign\Fpdi\Fpdi; 添加到您的水印中,而不仅仅是use \setasign\Fpdi,或者在您的类声明中使用正确的类名。一般你应该尽量了解namespaces的用法。
    【解决方案3】:

    不管怎样,我只是将导致问题的所有功能从“受保护”更改为“公共”。为我工作!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多