用PHP编写的HTML到PDF转换器
调用未定义的方法 Dompdf\FrameDecorator\Page::add_line()
我正在尝试发送一封包含 2 个 pdf 附件的电子邮件,但是当在控制器中调用 getRejectedReport 方法时,它返回错误,指出 Call to undefined method Dompdf\FrameDecorator\Page::add_...
我正在使用 Dompdf 从 PHP 应用程序中的 HTML 模板生成 PDF 发票。 HTML/CSS 模板包含 display: flex 用于布局目的,但是当使用 Dompdf 渲染为 PDF 时,
嗯,正如标题所说。我正在使用 codeigniter 4,并且一直在尝试添加 Arial 字体以在 Dompdf 中使用它。我尝试将 Airal.ttf、Arial.afm 和 Arial.php 文件添加到“lib/
我想从我的html内容创建pdf,其中包含dompdf的codeigniter 3控制器方法中的内容表; 考虑 TOC 示例中描述的如此简单的一个; 我将使用它作为内联 PHP
require_once(“function/dompdf/dompdf_config.inc.php”); $dompdf = 新 DOMPDF(); foreach($modules 作为 $module){ $output = "你好" .$module['name']; $dompdf->load_html($output); $dompdf->
类“Barryvdh\DomPDF\Facade\”未找到”
在本地主机上这个包工作正常,但是当我将它部署在实时服务器上并尝试生成 pdf 时,我收到了此错误 类“Barryvdh\DomPDF\Facade\”未找到” 原因是什么
我想在使用DomPDF生成PDF时以单独的行显示文本。 我尝试过: {{ nl2br($text) }} 和 {{ nl2br(e($text)) }},但不起作用。 {{$文本}} 目前结果: 这是...
我正在尝试使用 DomPDF 2.2 创建 PDF,但无法识别 base64 图像,但当我返回 HTML 时,图像会显示。我在 HTML 中纯粹传递了所有的 base64 代码。我如何实现这个...
我正在使用 barryvdh/laravel-dompdf 生成文档。我想在我的文档中使用 Nunito 字体。 我的控制器方法: 公共函数generateSocialBanner(EditionUser $editionUser){ $做...
我正在使用 dompdf 来使用 dompdf 转换 html 页面,但它以相反的顺序显示阿拉伯文本 例如,如果文本是 巴恩斯尼亚拉姆斯 然后它显示为 PDF 版本 知道为什么吗?
我正在使用 Alpine 构建 docker 容器。最近更新后,我收到错误消息: 此图像格式“JPEG”没有解码委托 当我列出支持的格式时,JPEG 似乎遗漏了: $
我想在我的 php 网站中使用 dompdf,我尝试在没有 Composer 的情况下包含该库,但无法让它工作。 我尝试测试的代码是: 我想在我的 php 网站中使用 dompdf,我尝试在没有 Composer 的情况下包含该库,但我无法让它工作。 我尝试测试的代码是: <?php include "../../plugins/dompdf/Autoloader.php"; $dompdf = new Dompdf(); $dompdf->loadHtml('hello world'); // (Optional) Setup the paper size and orientation $dompdf->setPaper('A4', 'landscape'); // Render the HTML as PDF $dompdf->render(); ?> 但我收到错误: Fatal error: Class 'Dompdf' not found ... 谁能解释一下如何在服务器中不安装composer的情况下包含该库? 谢谢你。 正确的包含就像魅力一样,正如 Samrap 所说,我包含了错误的文件。 现在代码是: <?php //Configure the directory where you have the dompdf require_once "../../plugins/dompdf/autoload.inc.php"; use Dompdf\Dompdf; //$dompdf = new dompdf(); //$dompdf = new DOMPDF(); $dompdf = new Dompdf(); $dompdf->loadHtml('hello world'); // (Optional) Setup the paper size and orientation $dompdf->setPaper('A4', 'landscape'); // Render the HTML as PDF $dompdf->render(); // Output the generated PDF to Browser $dompdf->stream(); ?> 谢谢 Samrap 的帮助。 您需要错误的自动加载文件。文档明确指出要包含此文件以进行自动加载: require_once 'dompdf/autoload.inc.php'; 如果您查看该文件,您会发现它确实需要 Autoloader.php,但也执行一些其他引导任务。 我意识到这是一个非常古老的问题,但我遇到了同样的问题,找到了此页面,并且必须为我的具体情况找到不同的解决方案。我将其发布在这里是因为我的解决方案不仅与 DOMPDF 相关,而且更多的是在没有 Composer 的情况下自动加载 .php 库文件的通用解决方案。 所以,要明确的是,我的情况如下: 我想在我的项目中的特定位置加载和使用 DOMPDF(但就像我说的,它可能是 DOMPDF 之外的其他任何东西); 我的项目相当大,而且相当丑陋,因为他是由多个程序员开发了多年的,总体来说一团糟; 我的项目包含多个 vendor 目录和多个 autoload*.php 文件,但是我无法准确确定哪个使用了,哪个没用; DOMPDF 的 autoload 对我不起作用; 我最终想要最简单的解决方案。 所以我制作了自己的简单自动加载,这是整个解决方案: 解决方案 将以下源代码写入文件中,比方说autoloaderbypasscomposer.php class CQAutoloaderBypassComposer { private static $hInstance = NULL; private $strRootDir; private $arrComposerMappings; private $arrPHPFileList; private $arrErrors; function __construct() { $this->arrComposerMappings = array(); $this->arrPHPFileList = array(); $this->arrErrors = array(); // TODO: set here the directory path where the 'vendor' big directory is. // the idea is that this class cannot find this automatically // DO NOT add a slash or backslash at the end ! $this->strRootDir = realpath(APPPATH . '../vendor'); // ... and now the class will start to search all subfolders and parse // 'composer.json' files to get informations. // On top of that, we will also get a list of all PHP files, // just in case some .json files are missing and we still need to load // some file/class $this->ScanDirs($this->strRootDir); } private function ScanDirs($strDir) { $arrFileList = glob($strDir . DIRECTORY_SEPARATOR . '*'); if (is_array($arrFileList)){ foreach ($arrFileList as $strFileName){ if ($strFileName != '.' && $strFileName != '..'){ if (is_dir($strFileName)) $this->ScanDirs($strFileName); else{ $nPointPos = strrpos($strFileName, '.'); $strExt = ($nPointPos === false ? '' : strtolower(substr($strFileName, $nPointPos + 1))); switch ($strExt) { case 'json':{ if (basename($strFileName) == 'composer.json'){ try { $arrJSONComposer = json_decode(file_get_contents($strFileName), true); }catch(Exception $kEx){ $arrJSONComposer = array(); } if (isset($arrJSONComposer['name']) && isset($arrJSONComposer['autoload']['psr-4'])){ foreach ($arrJSONComposer['autoload']['psr-4'] as $strNamespace => $strDir) $this->arrComposerMappings[$strNamespace] = $arrJSONComposer['name'] . '/' . $strDir; } } }break; case 'php':{ $this->arrPHPFileList[] = $strFileName; }break; } } } } } } static function GetInstance() { if (self::$hInstance === NULL) self::$hInstance = new CQAutoloaderBypassComposer(); return self::$hInstance; } function SimpleQuickAutoloader($strClass) { // step 1: search according to composer info foreach ($this->arrComposerMappings as $strNamespace => $strDir){ if (strpos($strClass, $strNamespace) === 0){ // yep, found. Now we need to unpack to see what to actually load $strFileToLoad = $this->strRootDir . '/' . $strDir . '/' . substr($strClass, strlen($strNamespace)) . '.php'; if (file_exists($strFileToLoad)){ require_once $strFileToLoad; return; // end here }else{ // file is missing for some reason. Add to error list so we can debug later $this->arrErrors[] = 'ERROR (1): file is missing: ' . $strFileToLoad; } } } // step 2: we either don't have composer.json informations or the class // we want to load is not found in a dir/file with the same name. // We need to try to figure which file we need to load $arrClassPath = explode('\\', $strClass); $strFileToSearch = $arrClassPath[count($arrClassPath) - 1] . '.php'; foreach ($this->arrPHPFileList as $strFilename){ if (strtolower(basename($strFilename)) == strtolower($strFileToSearch) && is_int(strpos(strtolower($strFilename), strtolower($arrClassPath[0])))) { require_once $strFilename; return; // end here } } // if we are here, we failed to find the necessary file $this->arrErrors[] = 'ERROR (2): cannot load: ' . $strClass; // there are more methods to search (read each file contents and search // for that specific class definition), however i'll stop here for now } function GetErrors() { return $this->arrErrors; } } 修改一行代码以指定放置库的vendor目录(或任何其他目录)的位置(服务器上的本地目录路径)。只需搜索 TODO: set here the directory 注释,您就会找到 $this->strRootDir 变量;将项目中的任何路径放在那里; 包含该文件,然后调用 spl_autoload_register 以便在需要加载某个新类时调用该类的函数: require_once 'autoloaderbypasscomposer.php'; spl_autoload_register(array(CQAutoloaderBypassComposer::GetInstance(), 'SimpleQuickAutoloader')); 就这样,您就可以开始使用这些库了,在本例中: use Dompdf\Dompdf; $kDOMPDF = new Dompdf(); ... etc etc ... 请记住,我的解决方案并非万无一失,您使用她的风险由您自己承担。然而,我想说她在 99% 的情况下都有效,而且很容易改进。 进一步说明 我的班级所做的是首先在所有子目录中搜索: composer.json 文件并解析它们以提取有用的信息; .php 文件并列出它们,因为大多数情况下类是在同名文件中定义的。 composer.json 文件似乎包含在所有库中(至少在下载 DOMPDF 时),即使您手动下载它们。 一旦我的班级有了这些信息,她将能够根据类名和类路径确定需要加载哪些文件。唯一不可能的情况是 .php 文件名与其中包含的类名不同。但为此也可以编写一些额外的代码来解决这个问题。 享受:)
我使用dompdf为参与者创建数字证书。 PDF创建成功,但是出现了问题,生成的PDF第一页显示空白页,这不应该...
DOMPDF - Laravel PDF 发票生成中的动态布局调整
在我的 Laravel 项目中使用 Dompdf 处理 PDF 发票面临挑战。我想要底部的最终金额表,但是当产品较少时,产品选项卡之间有空白...
我正在使用 DOMPDF 生成 pdf 文件。我的 pdf 文件是准考证,其中包含有关特定学生的信息。 在这张准考证中,我有两张图片要展示。所以在我的树枝文件中, 简介
我正在尝试使用 Dompdf 从 html 文件生成漂亮的 pdf,但我无法画线 在每一页上。这是 php 文件的示例。 我正在尝试使用 Dompdf 从 html 文件生成漂亮的 pdf,但我无法画线 在每一页上。这是 php 文件的示例。 <?php require_once("dompdf/dompdf_config.inc.php"); $html = file_get_contents("test.txt"); $html = utf8_decode($html); $dompdf = new DOMPDF(); $dompdf->load_html($html); $dompdf->render(); $font = Font_Metrics::get_font("helvetica", "bold"); $canvas = $dompdf->get_canvas(); $footer = $canvas->open_object(); $canvas->line(10,730,800,730,array(0,0,0),1); $canvas->page_text(555, 750, "{PAGE_NUM}/{PAGE_COUNT}", $font, 10, array(0,0,0)); $canvas->close_object(); $canvas->add_object($footer, "all"); $dompdf->stream("dompdf_out.pdf", array("Attachment" => false)); ?> 这会生成一个 pdf,其中每页都包含页码,但只有最后一页有一行。 那么我如何使用 Dompdf 在每个页面上绘制线条/图像? 当然,我们建议尽可能使用 HTML+CSS,您上面的答案就是这样做的。你错过了一件事,那就是页码。您可以使用 CSS 计数器获取每个页面的页码。例如 <style> #header { position: fixed; border-bottom:1px solid gray;} #footer { position: fixed; border-top:1px solid gray;} .pagenum:before { content: counter(page); } </style> <div id="header"> <img src="logo.gif" style="margin-top:10px;"/> </div> <div id="footer"> Page <span class="pagenum"></span> </div> 您还无法通过 CSS 访问的一个值是页面总数。因此,您仍然需要使用脚本生成的文本。 首先,稍微解释一下。大多数直接访问方法仅将内容添加到当前页面(实际上,当前活动对象......通常是页面)。因此,使用 text() 方法绘制线条或形状、添加图像或添加文本都会绘制到单个页面上。您可以通过渲染一个独立的对象来绕过该限制,然后将其添加到每个页面 (open_object()/close_object()/add_object())。需要注意的是,分离的对象是从当前页面开始生成的(即之前的所有页面都不会看到该对象),这就是为什么您通常希望通过内联脚本处理对象。 page_text()方法不同。它专门设计用于在 PDF 渲染后向所有页面添加内容。它在外部工作并与分离的对象容器分开。 page_script() 方法具有类似的功能,该方法处理脚本的方式与 page_text() 处理文本的方式类似。 所有这些都是说,根据您问题中的示例,您的代码可能没有按照您的想法进行操作。 第二,警告。除非您打算仅使用 iso-8859-1 从头到尾对文本进行编码,否则不应使用 utf8_decode()。 utf8_decode() 导致 utf8 到 iso-8859-1 的有损转换。 dompdf 完全能够处理 utf8 编码的文本(从 v0.6.0 开始),并将处理任何必要的转换。您应该熟悉 Unicode How-To 中的信息,因为有一些与您的 PHP/dompdf 配置相关的要求。 考虑到所有这些信息,您可以使用原始代码进行一些小的修改: <?php require_once("dompdf/dompdf_config.inc.php"); $html = file_get_contents("test.txt"); $dompdf = new DOMPDF(); $dompdf->load_html($html); $dompdf->render(); $font = Font_Metrics::get_font("helvetica", "bold"); $canvas = $dompdf->get_canvas(); $canvas->page_text(555, 750, "{PAGE_NUM}/{PAGE_COUNT}", $font, 10, array(0,0,0)); $canvas->page_script(' // $pdf is the variable containing a reference to the canvas object provided by dompdf $pdf->line(10,730,800,730,array(0,0,0),1); '); $dompdf->stream("dompdf_out.pdf", array("Attachment" => false)); ?> 使用 html/css 解决。不是最佳的,但至少它有效。 <div id="header"> <img src="logo.gif" style="margin-top:10px;"/> </div> <div id="footer"> Footer </div> #header { position: fixed; border-bottom:1px solid gray;} #footer { position: fixed; border-top:1px solid gray;} 使用 page_script if (isset($pdf)) { pdf->page_script(' $pdf->line(10, 730, 800, 730, array(0,0,0), 1); '); }
laravel domPdf 可在本地主机上运行,但不能在服务器上运行
我正在使用 DomPDF 在我的 laravel 应用程序上生成 pdf,它在本地主机上运行良好,但是当我将其上传到我的服务器时,它显示: 未找到“Barryvdh\DomPDF\Facade\Pdf”类 这是
我在生成带有 SVG 内容的设计的 pdf 时遇到问题。 SVG链接在html内部,并使用html生成pdf。但无法正常工作。 这是代码: $dompdf = 新 DOMPDF(); //
这是调用 $dompdf->render() 和 $dompdf->output() 之前的 HTML: 所有其他发票在查看时都可以正常显示图像...
我实现了 laraveldaily 发票包,但最近我在生成 PDF 时遇到了问题,并收到以下错误: [2021-07-16 21:46:31] .错误:file_put_contents(/tmp/log.htm):失败...