【问题标题】:How do disable TCPDF version shown in the browser after PDF generationPDF生成后如何禁用浏览器中显示的TCPDF版本
【发布时间】:2021-08-19 08:58:38
【问题描述】:

当我生成最终 PDF 时,正在显示该版本。 有什么办法可以隐藏这些信息?

我查看了包文档,但找不到任何东西。

这是我不想分享的信息。 我检查了是否有任何功能,但我找不到任何功能。

这是我用来生成 pdf 的代码

 $pdf = new \TCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
    $pdf->setPrintHeader(false);
    $pdf->setPrintFooter(false);

    $pdfParams = $this->handlePageParamsByCoverSize($coverSize);
    $fontSize = $this->calculateFontSizeByCoverSize($coverSize);

    $scissorsIconPath = $this->fileLocator->locate('scissors.png');

    $pdf->SetFont(
        'helvetica',
        '',
        $fontSize
    );

    $pdf->AddPage('L', $pdfParams['format'], true, true);

    $pdf->Image(
        $coverPath,
        $pdfParams['cover']['x'],
        $pdfParams['cover']['y'],
        $pdfParams['cover']['w'],
        $pdfParams['cover']['h'],
        '',
        '',
        '',
        false,
        300,
        '',
        false,
        false,
        0
    );

    $pdf->Image(
        $scissorsIconPath,
        $pdfParams['scissorsIcon']['x'],
        $pdfParams['scissorsIcon']['y'],
        $pdfParams['scissorsIcon']['w'],
        $pdfParams['scissorsIcon']['h'],
        '',
        '',
        '',
        false,
        300,
        '',
        false,
        false,
        0
    );

    $filePath = '/covers/' .$coverName . '.pdf';
    $absFileName = $rootPath . $filePath;

    try {
        $pdf->Output($absFileName, 'F');
    } catch (\Exception $e) {
        //Move on
    }

    if (file_exists($absFileName)) {
        $result = [
            'absPath' => $absFileName,
            'path' => $filePath,
        ];
    } else {
        $result = ['path' => 'error'];
    }

    return $result;

我正在使用以下包

"tecnickcom/tcpdf": "^6.4"

编辑:添加代码和更多信息

【问题讨论】:

  • 嘿,你是对的。我的意思是PDF。我添加了我的代码可能更清楚。

标签: php pdf tcpdf


【解决方案1】:

TCPPDF 似乎有一些可能对您有帮助的方法:

$tcpdf->SetCreator('My PDF-Generator tool');
$tcpdf->SetAuthor('Your name');

我自己没试过。我只是看了一下 TCPDF 文档的示例。

【讨论】:

  • 太棒了!我没有看到SetCreator() 方法:-)
  • 遗憾的是这不起作用。我将不得不覆盖静态方法。我的意思是该功能按照他们所说的设置创建者和作者。但我想隐藏版本及其创建内容。 (见图)
【解决方案2】:

好吧,如果您使用免费库,那么您无法更改它是很正常的。其他产品也是如此。

但是如果你在源代码中使用ripgrep之类的工具进行搜索,你会看到这个字符串是在第127行的include/tcpdf_static.php中定义的,并且在两处被tcpdf.php调用地点:

rg "getTCPDFProducer"

输出:

include\tcpdf_static.php
127:    public static function getTCPDFProducer() {

tcpdf.php
9554:           $out .= ' /Producer '.$this->_textstring(TCPDF_STATIC::getTCPDFProducer(), $oid);
9649:           $xmp .= "\t\t\t".'<pdf:Producer>'.TCPDF_STATIC::_escapeXML(TCPDF_STATIC::getTCPDFProducer()).'</pdf:Producer>'."\n";

因此,如果您真的必须隐藏它,您应该找到一种方法来覆盖该方法,最终应用自制补丁或在生成期间或之后更改生成的文件。

【讨论】:

  • 嘿,谢谢。我现在在上面提供的代码是否会改变您的答案?
  • 不,你的代码不会改变任何东西,因为这个 Producer 是硬编码在库中的。如果您自己安装了 TCPDF 库,则只需编辑 include/tcpdf_static.php 文件。最好是创建一个补丁文件,以便在更新库时可以再次应用它。我没有花时间看看如何覆盖方法。
  • 看来René提到的SetCreator()方法应该可以解决你的问题。也许 Producer 显示在 PDF 属性的其他位置。祝你好运!
  • 如果您必须修改“生产者”信息,最好的方法可能是扩展 TCPDF 类并覆盖 _putinfo 方法。然后你必须使用你的类而不是 TCPDF。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
相关资源
最近更新 更多