質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

9162閲覧

Laravelのdompdfで作成したPDFをhtml/cssの状態でデバッグしたい

AIUeno

総合スコア15

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/07/28 10:13

Laravelのdompdfで、PDFファイルを出力する処理を作っています。
デザインが思ったように当たらないので、GoogleChromeの解析ツールでstyleのコントロールをしているcssを調査したいです。
dompdfの中でどのようになっているかわかりませんが、一度htmlファイルとしてレンダリングしたものをPDFに変換する処理が行われているのだと思います。なので、このhtmlの状態のファイルを出力させて、デバッグしたいのですが、このようなことができるものでしょうか?

Controllerの出力部分

php

1 public function pdf( Request $request ) { 2 3 $quotation = Quotation::findOrFail( $request->id ); 4 5 $pdf = \PDF::loadView('pdf.quotation', compact('quotation'))->setPaper('a4'); 6 return $pdf->stream(); 7 }

帳票のquotation.blade.php

html

1<html> 2<head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 4 <title>帳票</title> 5 <style> 6 @font-face { 7 font-family: ipam; 8 font-style: normal; 9 font-weight: normal; 10 src: url('{{ storage_path('fonts/ipam.ttf')}}'); 11 } 12 13 @page { 14 margin: 10mm; 15 } 16 17 body { 18 font-family: ipam; 19 font-size: 10pt; 20 color: #000000; 21 background-color: #FFFFFF; 22 counter-reset: page-number; 23 } 24 25 img { 26 border: 0; 27 } 28 29 table { 30 border-collapse: collapse; 31 width: 100%; 32 } 33 34 .center { 35 text-align: center; 36 } 37 38 .right { 39 text-align: right; 40 } 41 42 43 header { 44 margin-bottom: 5mm; 45 } 46 47 footer { 48 font-family: ipam; 49 text-align: left; 50 padding-top: 3mm; 51 } 52 53 a:link, 54 a:visited { 55 text-decoration: underline; 56 color: #000000; 57 } 58 59 .title { 60 margin: auto; 61 font-size: 24pt; 62 letter-spacing: 56pt; 63 text-align: center; 64 width: 100%; 65 } 66 67 </style> 68</head> 69<body> 70<div class="title">{{ $quotation->title }}</div> 71</body> 72</html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

このサイトを参考にblade.phpを修正したら、意図したhtmlを出力することができました。
https://kyokasuigetsu25.wordpress.com/2011/07/14/how-to-use-dompdf-with-css/

php

1// bladeの先頭に 2@php 3 ob_start(); 4@endphp 5<!doctype html> 6…略 7</html> 8// bladeの最後部に 9@php 10 $out = ob_get_contents(); 11 ob_end_flush(); 12 file_put_contents('styled.html', $out); 13@endphp

これでpublic直下に生成されたstyled.htmlが出力されるので、GoogleChromeでデバッグできたのはいいのですが。ブラウザで見ると意図した表示になっており、問題はhtml→PDFに生成されるときにstyleが適用されなくなってしまうことが判明。
使えるcssはこちらのよると、css2.1のほとんどのようです。
https://github.com/dompdf/dompdf

適用されなかったのは、divに指定したmin-widthでしたが、css2.1の資料をよく読んでみることにします。タイトルのことは実現できたので、とりあえずこちらはクローズとします。

投稿2020/07/29 01:24

AIUeno

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問