- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 mPDF library直接从 HTML 输出生成 PDF 文档。问题是这个 mPDF 库是按原样编写的,它会生成许多通知( undefined index 、 undefined offset 等)。我尝试了任何方法来停止输出它们,但没有任何帮助。
我试着把 error_reporting(E_ALL ^ E_NOTICE);
以及 error_reporting(E_ALL & ~E_NOTICE);
我将它插入到我的 index.php 中,插入到直接包含 mpdf.php 的类和方法中,并且也在 mpdf.php 的开头。我还尝试了与 ini_set('display_errors', 0);
的组合- 所有这些指令都适用于整个 Web 应用程序,但适用于 mpdf。因此,即使 PDF 格式正确且有效,我也无法输出它(让用户下载它)。
我的 HTML 也出现了问题(简单的表格,真的没什么特别的),而示例工作正常且没有任何通知。
所以我需要的帮助:要么摆脱通知,要么更好地帮助我找出为什么 mPDF 不适合我。
如果我使用此代码:
include_once(DIR_MPDF.'mpdf.php');
$mpdf = new mPDF();
$mpdf->useOnlyCoreFonts = true;
$mpdf->SetDisplayMode('fullpage');
$mpdf->SetAutoFont(0);
$mpdf->WriteHTML('<table><tr><td>HELLO WORLD</td></tr></table>');
$mpdf->Output();
exit;
$mpdf->WriteHTML('<table><tr><td>HELLO WORLD</td><td>HELLO WORLD</td></tr></table>');
file_put_contents()
),即使我使用复杂的 HTML,PDF 也是有效的,因此可读 - 但通知仍会打印到浏览器中。无论如何,我需要提供 PDF 以供下载,而不是保存到文件系统中。
ob_start();
和
ob_end_clean();
同时找出我输出的 $pdf 字符串而不是 mPDF。
ob_start();
include(DIR_MPDF.'mpdf.php');
$html = $this->render(TRUE);
$mpdf = new mPDF('utf-8','A4');
$mpdf->useOnlyCoreFonts = true;
$mpdf->SetDisplayMode('fullpage');
$mpdf->SetAutoFont(0);
$stylesheet = file_get_contents(DIR_APPLICATION.'view/stylesheet/declaration.css');
$mpdf->WriteHTML($stylesheet,1);
$mpdf->WriteHTML($html);
$pdf = $mpdf->Output('', 'S');
$ob = ob_get_contents();
ob_end_clean();
if (headers_sent())
die('Some data has already been output to browser, can\'t send PDF file');
header('Content-Description: File Transfer');
header('Content-Transfer-Encoding: binary');
header('Cache-Control: public, must-revalidate, max-age=0');
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Content-Type: application/force-download');
header('Content-Type: application/octet-stream', false);
header('Content-Type: application/download', false);
header('Content-Type: application/pdf', false);
if (!isset($_SERVER['HTTP_ACCEPT_ENCODING']) OR empty($_SERVER['HTTP_ACCEPT_ENCODING'])) {
header('Content-Length: '.strlen($pdf));
}
header('Content-disposition: attachment; filename="invoice.pdf"');
echo $pdf;
exit;
最佳答案
虽然没有答案,而且因为我还没有找到任何其他合适的解决方案,但这里是我到目前为止的总结(主要复制我上面的问题):
ob_start(); // <--| This is very important to start output buffering and to catch out any possible notices
include(DIR_MPDF.'mpdf.php');
$html = $this->render(TRUE);
$mpdf = new mPDF('utf-8','A4');
$mpdf->useOnlyCoreFonts = true;
$mpdf->SetDisplayMode('fullpage');
$mpdf->SetAutoFont(0);
$stylesheet = file_get_contents(DIR_APPLICATION.'view/stylesheet/declaration.css');
$mpdf->WriteHTML($stylesheet,1); // <--| By the second param we are saying to MPDF that it is icnluding only stylesheet
$mpdf->WriteHTML($html);
$pdf = $mpdf->Output('', 'S'); // <--| With the binary PDF data in $pdf we can do whatever we want - attach it to email, save to filesystem, push to browser's PDF plugin or offer it to user for download
$ob = ob_get_contents(); // <--| Here we catch out previous output from buffer (and can log it, email it, or throw it away as I do :-) )
ob_end_clean(); // <--| Finaly we clean output buffering and turn it off
// The next headers() section is copied out form mPDF Output() method that offers a PDF file to download
if (headers_sent())
die('Some data has already been output to browser, can\'t send PDF file');
header('Content-Description: File Transfer');
header('Content-Transfer-Encoding: binary');
header('Cache-Control: public, must-revalidate, max-age=0');
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Content-Type: application/force-download');
header('Content-Type: application/octet-stream', false);
header('Content-Type: application/download', false);
header('Content-Type: application/pdf', false);
if (!isset($_SERVER['HTTP_ACCEPT_ENCODING']) OR empty($_SERVER['HTTP_ACCEPT_ENCODING'])) {
header('Content-Length: '.strlen($pdf));
}
header('Content-disposition: attachment; filename="invoice.pdf"');
echo $pdf; // <--| With the headers set PDF file is ready for download after we call echo
exit;
关于php - 无法摆脱 mPDF 中的 PHP 通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9067872/
Mpdf 中的以下两个函数在所有页面中添加页眉和页脚。 设置HTMLHeader()SetHTMLFooter() 但是,有人可以帮我从 pdf 的第一页删除页眉和页脚吗? 最佳答案 mPDF 有一个
我有这个问题/想拥有这个功能 我有一个类似于 #375 的问题而是,我的表的功能主要与文档中预期的一样。唯一不能理解的是,我的表头会从一页开始,然后对于一个长表,或者如果它只是延伸到页尾,表数据将移动
我使用的是带有 yii2 的 mpdf 8.1,用于 pdf 报告下载的 php 版本是 5.6.40。它在本地环境中运行良好。但是在具有相同 php 版本的实时服务器中找不到类 mpdf。 mpdf
我正在尝试通过按 eventView.php 中的打印按钮将 html View eventView.php 导出并下载到 pdf,使用 mPDF。即使加载速度很慢,我现在也可以转换为 pdf,但现在
不幸的是,我无法自己简单地测试它。我在这里查看了文档: https://mpdf.github.io/css-stylesheets/supported-css.html 它没有列出任何关于伪类的信息
我目前使用的是 mpdf 6.1,我想切换到 7。但是我找不到没有 Composer 的方法来安装它。是否有完整的软件包可以在我的本地主机上下载、解压缩和测试? 最佳答案 好吧,我花了几天的时间寻找方
4 月份在工作服务器上开始时,我们受到了这个问题的困扰。在客户报告 PDF 不再显示图像之前,我们的应用程序一切正常。 我们的 PDF 是首先通过 HTML 渲染生成的。当显示 HTML 渲染时,图像
使用 PHP 5.6 在 WAMP 堆栈上开发,然后转移到 LAMP 7.1.5一切正常,除了 mPDF 6.1.0 提供以下内容: Warning: A non-numeric value enco
对于我通过 Composer 安装了 mpdf 6 的项目 composer require mpdf/mpdf 它工作得很好,但库本身是我整个项目的十倍。有没有我可以删除的文件?例如,我什么时候需要
$style='@page *{ margin-top: 0cm; margin-bottom: 0cm; margin-left: 0cm; margin-right: 0cm; }'; $html
我想将 mPDF 包含到我的 WordPress 插件中以启用某些导出为 PDF 的功能。然而,mPDF 文件非常大,约为 98mb。 是否只有我可以包含的特定文件才能保留导出为 HTML 并保持格式
它不会在 pdf 中显示 ite1 值。为什么?您能纠正我的错误吗? WriteHTML('Hello World'); $html1 = ' Module De
我想将 mPDF 包含到我的 WordPress 插件中以启用某些导出为 PDF 的功能。然而,mPDF 文件非常大,约为 98mb。 是否只有我可以包含的特定文件才能保留导出为 HTML 并保持格式
我正在使用 mPDF 7.x 版并尝试遵循此文档: https://mpdf.github.io/fonts-languages/fonts-in-mpdf-7-x.html 我只是无法让它工作。没有
您好,我正在使用 mpdf 生成 pdf。现在我面临 html 中表格边框的问题。我在 html 中有以下表格样式 Test header Test he
@page :last { background: rgb(167,0,51); } 我需要为 PDF 的最后一页添加背景,但它不起作用。只有第一页得到 bg 但不是最后一页。有什么解决办法吗? 引
我正在使用 mpdf在 Laravel 和 this package 版本 4.0 问题是我有一个不同高度的问题列表,其中有 4 个选项,我不知道每个 div 标签的确切和大致高度,其中有哪些问题和答
我需要使用 mPDF 生成发票,它们都有页眉、页脚和必须覆盖整个页面的相同背景图像。 我在网上看到了其他解决方案,但没有一个对我有用。 这是几次尝试,都导致失败(图像不显示、50* 错误或使用图像时图
我正在使用 mpdf 库,但是我认为在下载文件时更改下载文件的名称会相当简单,文档说明如下: WriteHTML('Hallo World'); $mpdf->Output('filename.pdf
注:mpdf 6.0 你好, 我正在尝试使用 mpdf 生成 pdf,它需要元素的精确定位以便以后打印。元素将从给定页面的最左上角开始绘制,即不应有隐式填充、边距或其他可能影响元素在正文中位置的内容。
我是一名优秀的程序员,十分优秀!