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.
Ne oluşturacaksınız
“Ne oluşturacaksınız” başlıklı bölümTek 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ümProje 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:
php 01-html.phpTek satırlık bir çıktı görmelisiniz:
Wrote out/reading-report.pdfout/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.
Az önce ne oldu
“Az önce ne oldu” başlıklı bölüm@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()veaddPage(), ö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-alignvewidthgibi 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.
HTML ne zaman, akıcı API ne zaman kullanılır
“HTML ne zaman, akıcı API ne zaman kullanılır” başlıklı bölümHer 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.
Güvenlik sınırı
“Güvenlik sınırı” başlıklı bölümGerç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.
Bir şeyler ters gittiyse
“Bir şeyler ters gittiyse” başlıklı bölümFailed to open stream: No such file or directorygenellikle betiğinvendor/autoload.phpdosyası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.
Sonraki
“Sonraki” başlıklı bölümArtı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.