用PHP编写的HTML到PDF转换器
Laravel - 将使用 TailwindCSS 样式的视图输出为 PDF
我正在尝试从视图生成pdf,但样式就是不出来。我尝试过使用 3 个不同的库,但结果并没有太大不同。我错过了什么吗? 看法 我正在尝试从视图生成 pdf,但样式就是不出来。我尝试过使用 3 个不同的库,但结果并没有太大不同。我是不是错过了什么? view <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Test View</title> <link rel="stylesheet" type="text/css" media="screen" href="{{ asset('css/app.css') }}"> <script src="{{ asset('js/app.js') }}" defer></script> </head> <body class="font-sans antialiased"> <div class="grid grid-cols-3"> <div class="bg-red-200 col-span-2 h-screen"></div> <div class="bg-blue-200 h-screen"> <div class="grid grid-cols-8"> <div class="col-span-7"> <div class="rounded-t-full w-full h-screen flex items-center justify-center bg-green-600"> <div class="h-60 w-60 rounded-full bg-blue-500">TEST</div> </div> </div> </div> </div> </div> </body> </html> appearance dompdf export method protected function dompdfImplementation() { $dompdf = new Dompdf; $dompdf->getOptions()->setChroot(public_path()); $dompdf->loadHtml(view('view')->render()); $dompdf->stream('view.pdf', ['Attachment' => false]); } dompdf export result mpdf export method protected function mpdfImplementation() { $mpdf = new Mpdf; $mpdf->WriteHTML(view('view')->render()); $mpdf->output(); } mpdf export result tcpdf export method protected function tcpdfImplementation() { $tcpdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false); $tcpdf->AddPage(); $tcpdf->writeHTML(view('view')->render()); $tcpdf->Output('view.pdf', 'I'); } tcpdf export result 如果没有 css 内联,是否无法将视图导出为 pdf? 我是否最好手动截取整页屏幕截图,将其粘贴到文本文档中并将其另存为 pdf 文件? 这个包的作用就像一个魅力(就像通常的 spatie 一样): https://github.com/spatie/browsershot 根据医生的说法: 该软件包可以将网页转换为图像或 pdf。转换 是由 Puppeteer 在幕后完成的,它控制着一个无头的 谷歌浏览器版本。 如果您需要支持现代CSS功能,例如flexbox(我想您的Tailwind示例使用了flexbox),那么最好使用headless chrome(或有点旧的wkhtmltopdf)来生成PDF。 使用 chrome-php/chrome 的示例: <?php use HeadlessChromium\BrowserFactory; use HeadlessChromium\Page; require_once __DIR__ . '/vendor/autoload.php'; $browserFactory = new BrowserFactory(); $browser = $browserFactory->createBrowser([ 'noSandbox' => true, 'customFlags' => [ '--proxy-server="direct://"', '--proxy-bypass-list=*', '--font-render-hinting=none', ], ]); $page = $browser->createPage(); $tempname = '//<path to your HTML over HTTP>'; $page->navigate('file://' . $tempname) ->waitForNavigation(Page::NETWORK_IDLE); $outputPath = __DIR__ . '/output.pdf'; $page->pdf([ 'printBackground' => true, 'preferCSSPageSize' => true, 'marginTop' => 0.4, 'marginBottom' => 0.2, 'marginLeft' => 0.2, 'marginRight' => 0.2, ])->saveToFile($outputPath); 使用 PHP PDF 库可以利用其相对于浏览器方法的一些优势 - 颜色处理、预打印、条形码支持、页眉和页脚、页码、目录等,但考虑到它们对 HTML 和 CSS 的支持,需要定制模板和很可能需要样式表。 当然,当您无法通过托管提供商运行除 PHP 之外的其他软件时,上一段也适用。 这个答案可能会解决问题: https://stackoverflow.com/a/36695827/5540654 基本上,您需要在文档的 base 中添加 head 标签。 <html> <head> ... <base href="http://www.example.com/"> <link href="/assets/css/style.css" rel="stylesheet"> ... </head> 使用 wkhtmltopdf 为我工作。可能是类似的问题。 之后 尝试barryvdh/laravel-dompdf而不是dompdf/dompdf 在我的样式表上使用media="print" 使用 TailwindCSS 的 print:* 类 试图让chrome-php工作却无济于事 尝试 barryvdh/excel 的 pdf 导出。 没有任何效果,所以我达到的解决方案是一个糟糕的解决方案。 在 Firefox 中打开视图。 截取整个页面(不仅仅是可见内容)。 使用我找到的第一个在线 PNG 到 PDF 转换器。 我希望有一种不那么痛苦的方法来做到这一点,但它看起来不像。这个糟糕的解决方案实际上有效。
如何下载 Laravel 中 ajax 调用请求的控制器生成的 PDF
我无法直接下载 PDF 文件。 本质上,用户在他们填写/选择的页面上有一些输入和选项,然后这些数据通过 A...
我在本地主机上安装了 DOMpdf(WAMP 和 dompdf 从 git 下载)并且工作正常。安装是使用 Composer 完成的。当我安装在本地主机上时,有一个子目录
以下代码是pdf的左标题div。 虽然东京都江东区潮见2-9-15内田洋行幕潮见オフィス市区町村名市区町村名市区町村是一行字符串,但没想到在东京都江东区潮见2-9-之后就断成了两行当它是...
我想在pdf的每页上每隔第三个项目分页。为了打破页面,我使用了 page-break-before 属性。但问题是设计从第二页开始就被破坏了......
(已解决)PDF 在 adobe acrobat 中显示空白页
你好,我在codeigniter 3中使用dompdf将html转换为pdf,当我下载pdf并在pdf阅读器浏览器中打开时,会显示pdf。 pdf 在浏览器中 但是当我在 adobe acrobat 中打开 pdf 时,pdf 就...
你好,我在codeigniter 3中使用dompdf将html转换为pdf,当我下载pdf并在pdf阅读器浏览器中打开时,会显示pdf。 pdf 在浏览器中 但是当我在 adobe acrobat 中打开 pdf 时,pdf 就...
我是 PHP 新手,正在尝试为我的作业构建一个小项目。 我正在尝试使用 PHP(DOMPDF 包)将一些 HTML 转换为 PDF。 HTML 确实包含一些标签来输出一些图像......
你好我想使用dompdf将html转换为pdf,我的HTML有中文文本。在 HTML 视图中,中文文本显示得很好,但当我转换为 pdf 时,中文文本仅显示正方形。 这是我的代码 $
如何在带有 dompdf 的 PDF 中使用 bootstrap?
我正在尝试生成一个包含数据库信息的报告,并且我可以使用 HTML 和 boostrap 正确显示它,但是当我尝试渲染我的 html 文件时,引导程序停止工作。 我正在尝试生成一个包含来自数据库的信息的报告,并且我可以使用 HTML 和 boostrap 正确显示它,但是当我尝试渲染我的 html 文件时,引导程序停止工作。 <?php //this is my html: ob_start(); ?> <!-- All my file goes here, including the <link></link> to the boostrap --> <?php $html = ob_get_clean() ?> 然后,在另一个文件(我用来创建 PDF)中我这样做了: <?php require_once 'route/to/dompdf/autoload.inc.php'; use Dompdf\Dompdf; $dompdf = new Dompdf(); include "firstFileWithHtml.php"; $options = $dompdf->getOptions(); $options->set(array('isRemoteEnabled' => true)); $dompdf->setOptions($options); $dompdf->loadHtml($html); $dompdf->setPaper("letter"); $dompdf->render(); $dompdf->stream("file_pdf", array("Attachment" =>false)); ?> 它会生成 PDF 预览,只是没有 boostrap。 我缺少一个选项吗? 我尝试下载 bootstrap,尝试使用其他版本(4.3.1、5.0.2、5.3.0),我尝试使用 CDN,但没有任何效果。 我也尝试了这个答案中的解决方案,但是将CSS放在同一个文件中不起作用,并且方法set_base_path已被弃用。 我找到了解决方案,感谢@ceejayoz 的提示。 如果我这样放置 href: <link rel="stylesheet" href=""../user/bootstrap-5.0.2-dist/css/bootstrap.min.css"> 没成功。 但如果我用这个代替: <link rel="stylesheet" href="http://<?php echo $_SERVER['HTTP_HOST']; ?>/PROJECT/user/bootstrap-5.0.2-dist/css/bootstrap.min.css"> 它就像一个魅力。 我能够使 bootstrap 5 工作。我正在做一个 Laravel 项目,需要 dompdf。 首先,获取Bootstrap 5缩小版的内容 $bootstrap5 = file_get_contents(public_path() . '/css/bootstrap.min.css'); 然后将“$bootstrap5”传递到$data变量中 $data = [ 'professions' => $professions, 'logo' => $imageLogo, 'css' => $bootstrap5, ]; 然后用$data加载PDF $pdf = Pdf::setPaper('letter', 'portrait')->setOptions(['dpi' => 100, 'defaultFont' => 'Nunito, sans-serif', 'isHtml5ParserEnabled' => true, 'isRemoteEnabled' => true, 'isJavascriptEnabled' => true]) ->loadView('reports.staffing-report', $data); 在我的staffing-report.php中,我在内部添加了一个样式标签,并从$data中呼应了“css”: <style> {{ $css }} </style>
如何在 @page 中垂直居中 div 并打印(DomPDF 和 Laravel)
美好的一天!我目前正在使用 Laravel 8 的 DomPDF 库,使用本机 CSS 生成可打印的 PDF(因为 Bootstrap 和其他导入不能很好地与该库配合使用)。 我找到了...
我需要在 PHP 中以编程方式生成一个完全可访问的 PDF。 我尝试将 DOMPDF 与 Adobe 自动标记 REST API 结合使用。然而,这样一来,图像就会缺少“alt”文本和 PDF 我...
我尝试更改默认字体时遇到问题。 生成的 PDF 中的符号被 ??? 更改符号,所以我尝试更改默认字体。 但是当我尝试更改默认字体时...
如何使用 Dompdf 将 MySQL 数据库中的图像显示为 pdf
我尝试使用DomPDF在PDF中显示数据库中的图像后,它没有出现,并且加载速度很慢。 我的看法: 我尝试使用DomPDF以PDF格式显示数据库中的图像后,它没有出现,并且加载速度很慢。 我的看法: <div class="image"> <img src="{{ $logo }}" alt="Sample Image" style="height: 50px;"> </div> 我正在开发一个 Laravel 项目并使用 DomPDF 生成 PDF 证书。下面的代码来自我的CertificateController,它处理这些证书的生成: namespace App\Http\Controllers; use App\Models\Certificate; use App\Models\Term; use Illuminate\Http\Request; use PDF; use Auth; // Import the Auth facade use Barryvdh\DomPDF\PDF as DomPDFPDF; use Illuminate\Support\Facades\Auth as FacadesAuth; use Illuminate\Support\Facades\Storage; class CertificateController extends Controller { public function generateCertificate($termId) { // Fetch the term and relevant data $term = Term::find($termId); // Check if the term and necessary data are available // Get the authenticated user's name $userName = FacadesAuth::user()->name; $userLastName = FacadesAuth::user()->last_name; // Fetch the certificate data, including the logo URL $certificate = Certificate::first(); // Prepare data for the certificate template $data = [ 'username' => $userName, // Use the authenticated user's name 'userlastname' => $userLastName, 'course' => $term->course->title, // Assuming that 'course' is a property of the Term model 'term' => $term->title, // Assuming that 'title' is a property of the Term model 'date' => $term->finish_date, // Assuming that 'title' is a property of the Term model 'logo' => asset('storage/' . $certificate->logo), 'position_1' => $certificate->position_1, 'position_2' => $certificate->position_2, 'name_1' => $certificate->name_1, 'name_2' => $certificate->name_2, ]; // Load the certificate template HTML $html = view('certificate.certificate', $data)->render(); // Generate the PDF from the HTML $pdf = PDF::loadHTML($html); // Set the paper size to certificate size (e.g., A4) and landscape orientation $pdf->setPaper('Letter', 'landscape');; // Set the file name for the PDF $fileName = 'certificate_' . $term->id . '.pdf'; // Optionally, you can store the PDF on the server or force download // Example: $pdf->save(storage_path('certificates/' . $fileName)); // Example: return $pdf->download($fileName); // Display the PDF in the browser return $pdf->stream($fileName); } // Method to handle the form submission public function index() { $certificate = Certificate::first(); // Retrieve a single certificate return view('contents.admin.badges.index', compact('certificate')); } } 要在 Laravel 中使用 DomPDF 以 PDF 形式显示 MySQL 数据库中的图像,您可以按照以下步骤操作: 确保您已安装所需的软件包: DomPDF:作曲家需要 barryvdh/laravel-dompdf Laravel Collective HTML 包:composer require laravelcollective/html 确保您的数据库表包含用于存储图像数据的列。您可以使用 BLOB(二进制大对象)数据类型来存储图像。 在你的 Laravel Blade 视图(例如,certificate.blade.php)中,你可以使用 Laravel Collective HTML 包的 image 方法来显示图像。 这是您的证书控制器的更新代码: namespace App\Http\Controllers; use App\Models\Certificate; use App\Models\Term; use Illuminate\Http\Request; use PDF; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Storage; class CertificateController extends Controller { public function generateCertificate($termId) { // Fetch the term and relevant data $term = Term::find($termId); // Check if the term and necessary data are available // Get the authenticated user's name $userName = Auth::user()->name; $userLastName = Auth::user()->last_name; // Fetch the certificate data, including the logo $certificate = Certificate::first(); // Prepare data for the certificate template $data = [ 'username' => $userName, 'userlastname' => $userLastName, 'course' => $term->course->title, 'term' => $term->title, 'date' => $term->finish_date, 'logo' => Storage::disk('public')->url($certificate->logo), // Use the Storage facade to get the URL 'position_1' => $certificate->position_1, 'position_2' => $certificate->position_2, 'name_1' => $certificate->name_1, 'name_2' => $certificate->name_2, ]; // Load the certificate template HTML $html = view('certificate.certificate', $data)->render(); // Generate the PDF from the HTML $pdf = PDF::loadHTML($html); // Set the paper size to certificate size (e.g., A4) and landscape orientation $pdf->setPaper('Letter', 'landscape'); // Set the file name for the PDF $fileName = 'certificate_' . $term->id . '.pdf'; // Optionally, you can store the PDF on the server or force download // Example: $pdf->save(storage_path('certificates/' . $fileName)); // Example: return $pdf->download($fileName); // Display the PDF in the browser return $pdf->stream($fileName); } // Method to handle the form submission public function index() { $certificate = Certificate::first(); // Retrieve a single certificate return view('contents.admin.badges.index', compact('certificate')); } }
使用 DOMpdf 在 Laravel 中生成包含图表的 PDF
我已成功创建图表,但我不知道如何在 pdf 中呈现此图表。我已经尝试了很多东西,但它不起作用。我使用“Laravel 图表”库创建了图表并使用...
使用 DOMPDF 和 WordPress 生成的 PDF 中不显示图像
我正在开发一个 WordPress 插件,我可以使用 DOMPDF 生成 PDF。生成过程有效,但我遇到了图像未显示在生成的 PDF 中的问题。 这里...
我正在使用 DOMPDF 库生成 PDF,到目前为止一切顺利,但我收集的已完成表单字段未在 PDF 中收集和显示。我想知道我做错了什么,我会......
使用Dompdf将数据存储在pdf文件中: 这个功能工作正常: $pdf = \App::make('dompdf.wrapper'); $pdf->loadHTML('Test '); 返回 $pdf->stream(); 现在,当尝试 $p...
我有一个非常简单的 Livewire 组件: 我有一个非常简单的 Livewire 组件: <?php namespace App\Http\Livewire; use PDF; use Livewire\Component; use App\Models\Employee; class Employees extends Component{ public $employees; public function mount() { $this->employees = Employee::all()->toArray(); } public function createPDF() { $this->employees = Employee::all()->toArray(); // dd($this->employees); $pdf = PDF::loadView('livewire.employees', $this->employees); return $pdf->download('pdf_file.pdf'); } public function render() { return view('livewire.employees'); } } 还有一个非常简单的刀片文件,我在其中呈现单击按钮时要打印的员工姓名。 <div class="container mx-auto"> @foreach ($employees as $e) <h2>{{ $e['name'] }}</h2> @endforeach <button wire:click="createPDF" class="mt-8 bg-black text-white px-4 py-2 rounded">PDF</button> </div> 问题是我得到了 foreach 循环内的变量“未定义的变量 $employees”。 您没有在 PDF 调用中设置变量,因此该变量不存在。 简单改变 $pdf = PDF::loadView('livewire.employees', $this->employees); 到 $pdf = PDF::loadView('livewire.employees', ['employees' => $this->employees]); 附注我不太明白为什么每次单击 PDF 生成按钮时都会获取员工。您已经将其设置在安装中,因此它应该已经设置。每次重新获取都相当慢。
我正在 PDFGeneratorService 中制作 PDF,除了图像未渲染外,一切正常。我已将图像更改为jpeg格式,我已添加chroot,我已添加 'dompdf' =>[ ...