İçeriğe geç
getnextpdf.com

HTML'den PDF'ye, kolay yol

Bu izlekte şimdiye kadar sayfaları her seferinde bir çağrıyla oluşturdunuz. Birçok belgeyi, web sayfaları için kullanılan etiket tabanlı metin biçimi olan işaretleme olarak tanımlamak daha hızlıdır. Bu öğreticide NextPDF’ye biraz Hypertext Markup Language (HTML) verirsiniz ve motor sayfayı sizin için çizer.

Tek bir HTML dizesinden işlenen tek sayfalık bir rapor. Renkli bir başlık, kısa bir paragraf ve toplam satırı içeren bir tablo içerir. Bunu, işaretlemenin nasıl göründüğünü belirleyen kural dili olan Cascading Style Sheets (CSS) ile biçimlendirirsiniz. Önceki öğreticilerde, zincirlenmiş yöntem çağrıları olan akıcı Application Programming Interface (API)‘yi kullandınız. Burada ise düzeni işaretlemeyle tanımlarsınız ve aynı motor onu işler.

Adım 1: HTML’den biçimlendirilmiş bir rapor işleyin

“Adım 1: HTML’den biçimlendirilmiş bir rapor işleyin” başlıklı bölüm

Proje klasörünüzde, vendor klasörünün yanında 01-html.php adında bir dosya oluşturun. Bu eksiksiz betiği yapıştırın:

<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
@mkdir(__DIR__ . '/out');
$document = Document::createStandalone();
$document->setTitle('Monthly reading report');
$document->addPage();
$html = <<<'HTML'
<h1 style="color: #1E3A8A;">Monthly reading report</h1>
<p>This report was rendered from <strong>HTML</strong> with inline
<em>CSS</em>. The table below lists two books and their page counts.</p>
<table border="1" cellpadding="5" cellspacing="0" style="width: 100%;">
<thead>
<tr style="background-color: #1E3A8A; color: #FFFFFF;">
<th style="width: 55%;">Title</th>
<th style="width: 20%; text-align: center;">Format</th>
<th style="width: 25%; text-align: right;">Pages</th>
</tr>
</thead>
<tbody>
<tr>
<td>The Paper Trail</td>
<td style="text-align: center;">Hardcover</td>
<td style="text-align: right;">312</td>
</tr>
<tr style="background-color: #F8FAFC;">
<td>Ink and Bytes</td>
<td style="text-align: center;">Paperback</td>
<td style="text-align: right;">248</td>
</tr>
</tbody>
<tfoot>
<tr style="font-weight: bold;">
<td colspan="2" style="text-align: right;">Total pages:</td>
<td style="text-align: right;">560</td>
</tr>
</tfoot>
</table>
HTML;
$document->writeHtml($html);
$document->save(__DIR__ . '/out/reading-report.pdf');
echo "Wrote out/reading-report.pdf\n";

Betiği proje klasöründen çalıştırın:

Terminal window
php 01-html.php

Tek satırlık bir çıktı görmelisiniz:

Wrote out/reading-report.pdf

out/reading-report.pdf dosyasını herhangi bir Portable Document Format (PDF) görüntüleyicisinde açın. Başlık koyu mavidir ve tablo başlık satırı aynı renkle doldurulmuştur.

  • @mkdir(__DIR__ . '/out'); çıktı klasörünü oluşturur. @ işareti, klasör zaten varken uyarıyı gizler; böylece yinelenen çalıştırmalar sessiz kalır.
  • Document::createStandalone(), setTitle() ve addPage(), önceki öğreticilerdekiyle tam olarak aynı şekilde çalışır. İşaretlemeye geçmek, belge kurulumuyla ilgili hiçbir şeyi değiştirmez.
  • writeHtml() dizenizi bir kez, yukarıdan aşağıya okur ve her öğeyi geçerli konumda çizer. Başlıklar ve paragraflar biçimlendirilmiş metne dönüşür. Tablo, kenarlıklı hücrelerden oluşan ölçülmüş satırlara dönüşür.
  • Satır içi style öznitelikleri CSS’yi taşır. Motor; color, background-color, text-align ve width gibi yaygın özellikleri anlar.
  • Hiçbir tarayıcı ve ek yazılım gerekmez. İşlem hattı, motorun içinde düz PHP’dir; bu nedenle betik, Composer kurulumunuzun çalıştığı her yerde çalışır.

Motor, bir tarayıcının kabul ettiği her şeyi değil, HTML ve CSS’nin pratik bir alt kümesini destekler. Bu alt kümenin dışında kalan her şey, hata oluşturmak yerine sessizce atlanır. CSS destek matrisi tam olarak neyin kapsandığını kaydeder. Bu işlem hattını daha derinlemesine incelemek için bkz. HTML’yi bir PDF sayfasına işleme.

Her iki yol da aynı motorda çalışır; bu nedenle belgeye uygun olanı seçin.

  • Belge bir web sayfası gibi okunuyorsa writeHtml() seçin: başlıklar, paragraflar, listeler ve tablolar. İşaretlemeyi yazmak daha hızlıdır ve takım arkadaşlarının düzenlemesi daha kolaydır.
  • Sabit konumlar veya tam olarak ölçülmüş hücreler gibi kesin yerleşime ihtiyacınız olduğunda akıcı API’yi seçin. İşaretleme size akış sağlar; akıcı çağrılar ise denetim sağlar.
  • Bir özelliğe güvenmeden önce CSS destek matrisini inceleyin. Bir stil kapsanmadığında, o kısmı bunun yerine akıcı çağrılarla oluşturun.

Gerçek HTML çoğunlukla kodunuzun dışından gelir; örneğin bir formdan veya bir veritabanından. Onu güvenilmeyen girdi olarak değerlendirin ve işlemeden önce doğrulayın ya da temizleyin. Varsayılan olarak yerleşik işlem hattı hiçbir betik çalıştırmaz ve hiçbir uzak kaynak getirmez. Bu varsayılan, işaretleme öyle olmasa bile işleyiciyi ihtiyatlı tutar. Tarayıcı düzeyinde işleme seçeneklerine ihtiyacınız varsa bkz. Yolunuzu seçin.

  • Failed to open stream: No such file or directory genellikle betiğin vendor/autoload.php dosyasını bulamadığı anlamına gelir. Betiği, Composer’ı çalıştırdığınız klasörden çalıştırın.
  • Eksik bir stil genellikle desteklenen alt kümenin dışında bir özelliktir. Motor, başarısız olmak yerine desteklemediği şeyi atlar. İşaretlemenizi CSS destek matrisiyle karşılaştırın.
  • İşleme sırasında oluşan bir özel durum, sorunun tam olarak ne olduğunu belirtir. Bunu işleme ve giriş/çıkış hataları başvurusunda arayın.

Diğer her şey için sorun giderme kılavuzuyla başlayın.

Artık belgeleri hem çağrı çağrı hem de işaretlemeden oluşturabilirsiniz. İzleği Bundan sonra nereye gidilir sayfasıyla tamamlayın. Bu sayfa, bu izlekten sonra kullanacağınız yemek kitabını, başvuruyu ve kılavuzları tanıtır.