tri*_*ole 1 php dompdf laravel laravel-5
我在 Laravel 5.8 应用程序中使用barryvdh/laravel- dompdf
我的页眉和页脚有问题。
预览 PDF
我有这个功能来生成PDF:
public function getProductPdf(Request $request, int $id)
{
$product = $this->cmsRepository->getProduct($id);
$data = [
'title' => 'First PDF for Medium',
'heading' => 'Hello from 99Points.info',
'content' => 'Od kilku dni w szeregach Platformy Obywatelskiej trwa czas powyborczych rozlicze?. Kolejni politycy krytykuj? dzia?ania partii pod kierunkiem Grzegorza Schetyny, którego kadencja na stanowisku przewodnicz?cego ko?czy si? za kilka miesi?cy. Walki o przywództwo nie wyklucza Borys Budka. - Jestem sk?onny startowa? w tych wyborach, bo musi by? jaki? wybór - powiedzia? polityk w rozmowie z "Gazet? Wyborcz?".'
];
$pdf = \PDF::setOptions(['dpi' => 150, 'defaultFont' => 'sans-serif', 'defaultPaperSize' => 'a3'])->loadView('psCMS.prints.product-view', $data);
return $pdf->download('product-' . $product->id . '-' . now()->toDateString() . '.pdf');
}
Run Code Online (Sandbox Code Playgroud)
这是我要打印的模板:
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{{ $title }}</title>
<style type="text/css">
.page-break {
page-break-after: always;
}
/*@page {*/
/* margin: 0px 0px 0px 0px !important;*/
/* padding: 0px 0px 0px 0px !important;*/
/*}*/
th,
td,
p,
div,
b {
margin: 0;
padding: 0
}
html {
margin: 40px 50px
}
body {
font-family: DejaVu Sans;
font-style: normal;
font-weight: 400;
/*margin: 0px;*/
font-size: 18px;
}
* {
font-family: DejaVu Sans, Verdana, Arial, sans-serif;
}
a {
color: black;
text-decoration: none;
}
table {
font-size: x-small;
}
tfoot tr td {
font-weight: bold;
font-size: 18px;
}
.gray {
background-color: lightgray
}
.information {
color: black;
font-size: 18px;
}
.information .logo {
margin: 5px;
}
.information table {
padding: 10px;
font-size: 18px;
}
.document {
padding-bottom: 50px;
}
</style>
</head>
<body>
<div class="information">
<table width="100%">
<tr>
<td align="left" style="width: 40%;">
<h3>John Doe</h3>
<pre>
Street 15
123456 City
United Kingdom
<br/><br/>
Date: 2018-01-01
Identifier: #uniquehash
Status: Paid
</pre>
</td>
<td align="center">
<img src="/path/to/logo.png" alt="Logo" width="64" class="logo" />
</td>
<td align="right" style="width: 40%;">
<h3>CompanyName</h3>
<pre>
https://company.com
Street 26
123456 City
United Kingdom
</pre>
</td>
</tr>
</table>
</div>
<br />
<h1>{{ $heading}}</h1>
<div class="document">
<p>{{$content}}</p>
<table width="100%">
<tr>
<td valign="top"><img src="{{asset('images/meteor-logo.png')}}" alt="" width="150" /></td>
<td align="right">
<h3>Shinra Electric power company</h3>
<pre>
Company representative name
Company address
Tax ID
phone
fax
</pre>
</td>
</tr>
</table>
<table width="100%">
<tr>
<td><strong>From:</strong> Linblum - Barrio teatral</td>
<td><strong>To:</strong> Linblum - Barrio Comercial</td>
</tr>
</table>
<br />
<table width="100%">
<thead style="background-color: lightgray;">
<tr>
<th>#</th>
<th>Description</th>
<th>Quantity</th>
<th>Unit Price $</th>
<th>Total $</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Playstation IV - Black</td>
<td align="right">1</td>
<td align="right">1400.00</td>
<td align="right">1400.00</td>
</tr>
<tr>
<th scope="row">1</th>
<td>Metal Gear Solid - Phantom</td>
<td align="right">1</td>
<td align="right">105.00</td>
<td align="right">105.00</td>
</tr>
<tr>
<th scope="row">1</th>
<td>Final Fantasy XV - Game</td>
<td align="right">1</td>
<td align="right">130.00</td>
<td align="right">130.00</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="3"></td>
<td align="right">Subtotal $</td>
<td align="right">1635.00</td>
</tr>
<tr>
<td colspan="3"></td>
<td align="right">Tax $</td>
<td align="right">294.3</td>
</tr>
<tr>
<td colspan="3"></td>
<td align="right">Total $</td>
<td align="right" class="gray">$ 1929.3</td>
</tr>
</tfoot>
</table>
Pence poinformowa? po trwaj?cych ponad cztery godziny negocjacjach, ?e Turcja na 120 godzin zawiesi wszystkie
operacje militarne, by pozwoli? kurdyjskim bojownikom na opuszczenie przygranicznego pasa w pó?nocno-wschodniej
Syrii, a gdy Kurdowie wycofaj? si?, nast?pi rozejm.
Turcja nie b?dzie jednak zobligowana do wycofania swoich wojsk z Syrii. Jak pisze AP, cytuj?c przedstawiciela
ameryka?skich w?adz, oznacza to de facto, ?e Ankara otrzyma?a pozwolenie USA na okupowanie bezpiecznej strefy.
Negocjatorzy obu stron wydali komunikat, w którym napisano, ?e stworzenie bezpiecznej strefy "b?dzie egzekwowane
przede wszystkim przez si?y zbrojne Turcji".
Wiceprezydent podkre?li? te?, ?e prezydent Donald Trump zagrozi?, ?e je?li Ankara nie zawiesi operacji
wojskowych, to on nie wycofa obecnych sankcji na?o?onych na Turcj? i pozwoli na wdro?enie nast?pnych.
Doda?, ?e Ankara i Waszyngton "zobowi?za?y si? do wypracowania pokojowego rozwi?zania i przysz?o?ci dla
bezpiecznej strefy" na pó?nocnym wschodzie Syrii. Oznajmi?, ?e ameryka?skie si?y w Syrii zacz??y ju? u?atwia?
Kurdom bezpieczne wycofanie si? z przygranicznych terenów.
Pence powiedzia? równie? dziennikarzom, ?e Ankara obieca?a, ?e jej wojska nie zajm? miasta Kobane (Ajn al-Arab),
nazywanego ogniskiem zapalnym tego konfliktu. Minister spraw zagranicznych Turcji Mevlut Cavusoglu oznajmi?
jednak, ?e Ankara nie udzieli?a gwarancji dotycz?cych Kobane, a jej armia jedynie "przerwa?a operacje". Doda?,
?e status miasta Manbid? "i innych regionów" na pó?nocnym wschodzie Syrii, zostanie przedyskutowany z Rosj?.
Kurdyjski polityk Aldar Chalil, komentuj?c warunki rozejmu, powiedzia? telewizji Al-Arabija, ?e Erdogan chce
wedrze? si? na terytorium Syrii na g??boko?? 32 km, a Kurdowie ju? wcze?niej odrzucili takie rozwi?zanie. Doda?,
?e aprobuj? zawieszenie broni, ale b?d? si? broni?, je?li zostan? zaatakowani.
Ameryka?scy senatorowie, w tym wp?ywy sojusznik prezydenta Lindsey Graham, poinformowali, ?e niezale?nie od
zapowiedzi rozejmu, b?d? "pe?n? par?" pracowali nad ustaw? w sprawie nowych sankcji na Ankar?.
"Wspania?e wiadomo?ci z Turcji"
Trump podzi?kowa? na Twitterze Erodganowi i napisa?, ?e otrzyma? "wspania?e wiadomo?ci z Turcji". "Miliony
istnie? ludzkich b?d? uratowane!" - doda?. Oznajmi?, ?e w tej sytuacji mo?liwa jest wizyta Erdogana w USA w
przysz?ym miesi?cu.
Nazwa? te? prezydenta Turcji "twardym facetem", który "zrobi? to, co trzeba". Doda?: "Teraz Kurdowie b?d?
bardziej sk?onni robi? to, co trzeba".
Przedstawiciel strony tureckiej po negocjacjach powiedzia? agencji Reutera, ?e Turcja "dosta?a dok?adnie to,
czego chcia?a". Porozumienie pozwala Turcji uwolni? si? od na?o?onych ju? sankcji i unikn?? kolejnych, a to
oznacza, ?e w ?aden sposób nie zostanie ukarana za inwazj? w pó?nocno-wschodniej Syrii - komentuje AP.
Reuters przypomina, ?e ekspedycja si? tureckich zmusi?a do ucieczki 200 tys. cywilów. Wzbudzi?a te? niepokój
wspólnoty mi?dzynarodowej o odrodzenie si? Pa?stwa Islamskiego (IS), którego bojownicy s? zamkni?ci w
kurdyjskich wi?zieniach.
Turecka ofensywa wywo?a?a te? polityczn? burz? w Waszyngtonie, gdzie politycy ró?nych afiliacji krytykowali
prezydenta za decyzj? o wycofaniu ameryka?skich ?o?nierzy z Syrii, co Ankara uzna?a za przyzwolenie na podj?cie
operacji wojennych - komentuje Reuters.
W ?rod? Trump broni? swojej decyzji, nazywaj?c j? "strategicznie b?yskotliw?", ale Izba Reprezentantów tego
samego dnia przyj??a rezolucj? pot?piaj?c? decyzj? prezydenta o wycofaniu ameryka?skich ?o?nierzy z Syrii.
Za rezolucj?, w licz?cej 435 miejsc ni?szej izbie Kongresu, g?osowa?o 354 kongresmenów, czyli wszyscy Demokraci
i du?a grupa Republikanów. W czwartek g?osowanie nad analogiczn? rezolucj? zapowiedzia? Senat.
</div>
<footer>
<div class="footer" style="position: absolute; bottom: 0;">
<table width="100%">
<tr>
<td align="left" style="width: 50%;">
© {{ date('Y') }} {{ config('app.url') }} - All rights reserved.
</td>
<td align="right" style="width: 50%;">
Company Slogan
</td>
</tr>
</table>
</div>
</footer>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我需要在 PDF 的每个页面上都可以看到页眉和页脚。
模板看起来没问题,但是页眉和页脚有问题。
Header = John Doe、公司名称等。Footer = 公司口号,@2019-10-17
如何添加页脚:[页码] 来自 [页数]?
为页眉和页脚页面添加样式。
<style>
@page { margin: 180px 50px; }
#header { position: fixed; left: 0px; top: -180px; right: 0px; height: 150px; background-color: orange; text-align: center; }
#footer { position: fixed; left: 0px; bottom: -180px; right: 0px; height: 150px; background-color: lightblue; }
#footer .page:after { content: counter(page, upper-roman); }
</style>
Run Code Online (Sandbox Code Playgroud)
添加header此 div 内的部分。
<div id="header">
</div>
Run Code Online (Sandbox Code Playgroud)
Footer在以下 div 中添加部分。
<div id="header">
</div>
Run Code Online (Sandbox Code Playgroud)
DOMPDF_ENABLE_PHP自/config/dompdf.phpphp artisan vendor:publish命令发布供应商文件$pdf从控制器传递对象:您应该在view文件中添加以下脚本。
<script type="text/php">
if ( isset($pdf) ) {
// OLD
// $font = Font_Metrics::get_font("helvetica", "bold");
// $pdf->page_text(72, 18, "{PAGE_NUM} of {PAGE_COUNT}", $font, 6, array(255,0,0));
// v.0.7.0 and greater
$x = 72;
$y = 18;
$text = "{PAGE_NUM} of {PAGE_COUNT}";
$font = $fontMetrics->get_font("helvetica", "bold");
$size = 6;
$color = array(255,0,0);
$word_space = 0.0; // default
$char_space = 0.0; // default
$angle = 0.0; // default
$pdf->page_text($x, $y, $text, $font, $size, $color, $word_space, $char_space, $angle);
}
</script>
Run Code Online (Sandbox Code Playgroud)