【问题标题】:PDF created with FPDF cannot be opened by Adobe ReaderAdobe Reader 无法打开使用 FPDF 创建的 PDF
【发布时间】:2014-04-02 16:11:49
【问题描述】:

我的 PDF 文件无法用 Adob​​e Reader 打开。奇怪的是,PDF前几天在Adobe Reader可以用,现在不行了,当然我没有修改代码,不然很容易修复。

我验证了我的 PDF 并得知它是 PDF/A-3,它可能不是 PDF/A-1?如果是这样,为什么它工作了一段时间突然停止工作?

编辑

问题在于,不知何故,在 PDF 文件中输出了一些 HTML 代码,从而使 PDF 文件对 Adob​​e Reader 无效,但对 Firefox 无效,这使得这一切变得更加混乱。

因此,如果遇到 PDF 问题,请使用文本编辑器(例如 Windows 的 Notepad++ 或 Linux 的 GEdit)打开它,然后与另一个可以正常工作的 PDF 文件进行比较。您应该很快就能找到问题所在。

【问题讨论】:

  • 您有一个 PDF 文件,几天前可以在 Acrobat 阅读器中运行,但现在不行了吗?如果 PDF 文件没有更改,那么罪魁祸首可能是 Acrobat。 Adobe 在过去几天是否推送了更新?
  • 这不是同一个 PDF 文件,它是由相同代码生成的新 PDF 文件。旧的 PDF 文件仍然有效。
  • 是同一个数据吗?这里的关键是确保您将苹果与苹果进行比较:从与旧 PDF 完全相同的数据生成 PDF。如果新 PDF 不起作用并且它包含与旧 PDF 相同的数据,那么您可以开始检查两个文件之间的差异。如果它们不是相同的数据,那么您将无法知道问题是由于文件格式中的某些问题,还是 FPDF 生成了格式错误的 PDF 文件,因为数据中的某些问题。
  • 这正是我所做的,它确实有相同的数据,但它也有一些 HTML 代码,应该在那里。如果它是问题的根源,我手动删除了 HTML 代码(即使它是一个问题,它也不能是我的问题的根源)并且它修复了它。所以我只是在不应该的地方有一些回显的 HTML。
  • 有趣...听起来可能是 FPDF 中的错误。

标签: php pdf adobe fpdf


【解决方案1】:

我阅读了很多关于此的问题,我明白问题出在:

ob_start();

如果没有这一行,我的 FPDF 无法处理消息,说明首先有另一个缓冲区。 有了这一行,PDF 只能用浏览器读取。

我将这一行改为:

ob_clean();

现在我可以用任何阅读器打开 PDF。

【讨论】:

    【解决方案2】:

    这也发生在我身上。对我来说,它在 Firefox 中确实有效,但在 Chrome 中无效,并且无法在 Adob​​e 中打开。

    问题是我试图在函数中运行脚本并从按钮调用函数。我只是通过将脚本添加到它自己的 PHP 文件中来修复它,然后直接链接到 php 文件。

    注意:我确实尝试了ob_start()(或者ob_clean(),如另一个答案中所述)和ob_end_flush(),但它对功能没有影响。当它在自己的文件中时,它无论如何都不需要它。

    // file.php
    <?php
    require $_SERVER['DOCUMENT_ROOT'].'/wp-content/plugins/eri-webtools-plugin/libraries/fpdf/fpdf.php'; // <-- File path for WordPress plugin
    $pdf = new FPDF();
    $pdf->AddPage();
    $pdf->SetFont('Arial','B',16);
    $pdf->Cell(40,10,'Hello World!');
    $pdf->Output(); // To Download, use $pdf->Output('D', 'test.pdf', true);
    ?>
    
    // html
    <a href="file.php">View PDF</a>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 2016-05-18
      • 2011-03-29
      • 1970-01-01
      • 2018-05-10
      相关资源
      最近更新 更多