Heim  >  Artikel  >  Backend-Entwicklung  >  So generieren Sie PDF-Dateien in PHP

So generieren Sie PDF-Dateien in PHP

PHPz
PHPzOriginal
2023-08-27 09:25:042327Durchsuche

In diesem Artikel besprechen wir, wie man PDF-Dateien mit PHP generiert. Wir erstellen PDF-Dokumente programmgesteuert mithilfe der TCPDF-Bibliothek.

Wenn Sie eine Website entwickeln, die es Benutzern ermöglicht, Dokumente wie Bestellbelege, Rechnungen oder Rechnungen herunterzuladen oder auszudrucken, haben Sie mehrere Möglichkeiten. Sie können das Dokument inline im Browser anzeigen oder zum Download bereitstellen. PDF ist eines der besten Formate zum Herunterladen von Dokumenten und eignet sich hervorragend zur Beibehaltung der Textformatierung.

Wenn Sie also lernen möchten, wie Sie PDF-Dateien auf Ihrer PHP-Website generieren, sind Sie hier genau richtig!

So installieren Sie die TCPDF-Bibliothek

In diesem Abschnitt erfahren Sie, wie Sie die TCPDF-Bibliothek installieren.

Es gibt mehrere Möglichkeiten, die TCPDF-Bibliothek auf dem Server zu installieren. Die TCPDF-Bibliothek ist auf Packagist und GitHub verfügbar, sodass Sie Composer verwenden oder von GitHub aus klonen können. In unserem Fall installieren wir es mit Composer.

Fahren Sie fort und führen Sie den folgenden Befehl aus, um die TCPDF-Bibliothek mit Composer zu installieren.

$composer require tecnickcom/tcpdf
Using version ^6.3 for tecnickcom/tcpdf
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing tecnickcom/tcpdf (6.3.5): Downloading (100%)         
Writing lock file
Generating autoload files

Nach erfolgreicher Installation müssen Sie die Datei autoload.php in Ihr PHP-Skript einbinden, wie im folgenden Codeausschnitt gezeigt.

<?php
require "./vendor/autoload.php";
...
?>

Auf diese Weise können Sie alle praktischen Methoden der TCPDF-Bibliothek nutzen.

So verwenden Sie die TCPDF-Bibliothek

In diesem Abschnitt erstellen wir ein praktisches Beispiel, das zeigt, wie eine PDF-Rechnung erstellt wird. Die TCPDF-Bibliothek stellt viele vorgefertigte Vorlagen bereit, die Sie als Referenz für die Generierung von PDF-Dokumenten verwenden können. Allerdings erstellen wir die Rechnung komplett neu.

Wie ich bereits im vorherigen Abschnitt erwähnt habe, bietet die TCPDF-Bibliothek viele vorgefertigte Vorlagen, mit denen Sie universelle PDF-Dateien mit Kopf- und Fußzeilen erstellen können. Dies ist nützlich, wenn Sie mit dem Standardformat und den Standardeinstellungen zufrieden sind. Wenn Sie jedoch die Kopf- und Fußzeile sowie den Inhalt anpassen möchten, müssen Sie die TCPDF-Klasse erweitern und die entsprechenden Methoden überschreiben.

In unserem Beispiel erstellen wir zwei Dateien: customPdfGenerator.php und example.php. In der Datei customPdfGenerator.php erstellen wir die CustomPdfGenerator 类,它将扩展核心 TCPDF 类并重写几个方法。在 example.php 文件中,我们将了解如何使用 CustomPdfGenerator-Klasse, die die Kernklasse

erweitert und einige Methoden überschreibt. In der Datei

example.phpCustomPdfGenerator sehen wir, wie man die Klasse

verwendet.

Klasse

Fahren Sie mit der Erstellung der Datei CustomPdfGenerator 类扩展了 TCPDF 类,因此我们可以使用 TCPDFcustomPdfGenerator.php

mit dem folgenden Inhalt fort.

<?php
class CustomPdfGenerator extends TCPDF 
{
    public function Header() 
    {
        $image_file = '/web/logo.png';
        $this->Image($image_file, 10, 3, 25, '', 'PNG', '', 'T', false, 300, '', false, false, 0, false, false, false);
        $this->SetFont('helvetica', 'B', 20);
        $this->Cell(0, 15, '', 0, false, 'C', 0, '', 0, false, 'M', 'M');
        $this->Ln();
        $this->Cell(0, 15, 'Katie A Falk', 0, false, 'R', 0, '', 0, false, 'M', 'M');
    }

    public function Footer() 
    {
        $this->SetY(-15);
        $this->SetFont('helvetica', 'I', 15);
        $this->Cell(0, 10, 'Thank you for your business!', 0, false, 'C', 0, '', 0, false, 'T', 'M');
    }

    public function printTable($header, $data)
    {
        $this->SetFillColor(0, 0, 0);
        $this->SetTextColor(255);
        $this->SetDrawColor(128, 0, 0);
        $this->SetLineWidth(0.3);
        $this->SetFont('', 'B', 12);

        $w = array(110, 17, 25, 30);
        $num_headers = count($header);
        for($i = 0; $i < $num_headers; ++$i) {
            $this->Cell($w[$i], 7, $header[$i], 1, 0, 'C', 1);
        }
        $this->Ln();

        // Color and font restoration
        $this->SetFillColor(224, 235, 255);
        $this->SetTextColor(0);
        $this->SetFont('');

        // table data
        $fill = 0;
        $total = 0;

        foreach($data as $row) {
            $this->Cell($w[0], 6, $row[0], 'LR', 0, 'L', $fill);
            $this->Cell($w[1], 6, $row[1], 'LR', 0, 'R', $fill);
            $this->Cell($w[2], 6, number_format($row[2]), 'LR', 0, 'R', $fill);
            $this->Cell($w[3], 6, number_format($row[3]), 'LR', 0, 'R', $fill);
            $this->Ln();
            $fill=!$fill;
            $total+=$row[3];
        }

        $this->Cell($w[0], 6, '', 'LR', 0, 'L', $fill);
        $this->Cell($w[1], 6, '', 'LR', 0, 'R', $fill);
        $this->Cell($w[2], 6, '', 'LR', 0, 'L', $fill);
        $this->Cell($w[3], 6, '', 'LR', 0, 'R', $fill);
        $this->Ln();

        $this->Cell($w[0], 6, '', 'LR', 0, 'L', $fill);
        $this->Cell($w[1], 6, '', 'LR', 0, 'R', $fill);
        $this->Cell($w[2], 6, 'TOTAL:', 'LR', 0, 'L', $fill);
        $this->Cell($w[3], 6, $total, 'LR', 0, 'R', $fill);
        $this->Ln();

        $this->Cell(array_sum($w), 0, '', 'T');
    }
}
TCPDF 类的唯一目的是我们不想使用内置的页眉和页脚组件。因此,我们重写了类中的 headerfooterEs ist zu beachten, dass die

-Klasse die

-Klasse erweitert, sodass wir alle von der 标头-Klasse bereitgestellten Hilfsmethoden zum Formatieren und Generieren von PDF-Dokumenten verwenden können.

Der einzige Zweck, unsere eigenen Klassen zu erstellen, anstatt

Klassen direkt zu verwenden, besteht darin, dass wir die integrierten Kopf- und Fußzeilenkomponenten nicht verwenden möchten. Daher überschreiben wir die Methoden header und footer in der Klasse.

Image 方法。接下来,我们使用 SetFont 方法设置文本的字体系列和字体大小,这些文本将添加到标题中。最后,我们使用 Cell

Methode

Im Titel möchten wir das Firmenlogo sowie den Namen des Eigentümers anzeigen. Lassen Sie uns die Header-Methode durchgehen, um zu verstehen, wie sie funktioniert.

public function Header() 
{
    $image_file = '/web/logo.png';
    $this->Image($image_file, 10, 3, 25, '', 'PNG', '', 'T', false, 300, '', false, false, 0, false, false, false);
    $this->SetFont('helvetica', 'B', 20);
    $this->Cell(0, 15, '', 0, false, 'C', 0, '', 0, false, 'M', 'M');
    $this->Ln();
    $this->Cell(0, 15, 'Katie A Falk', 0, false, 'R', 0, '', 0, false, 'M', 'M');
}

Zuerst zeichnen wir links das Firmenlogo mit der Bildmethode. Wichtig ist, dass Sie den absoluten Pfad des Logobildes an die

-Methode übergeben, um den Eigentümernamen rechts zu drucken. So generieren Sie PDF-Dateien in PHP

Sie werden feststellen, dass Sie in diesen Methoden viele Parameter übergeben können, und ich empfehle Ihnen, sie im Detail zu untersuchen, da es unmöglich ist, jeden Parameter in diesem Artikel zu besprechen.

Mit den oben genannten Einstellungen sieht der Titel so aus:

Footer

Footer-Methode

So generieren Sie PDF-Dateien in PHPIn der Fußzeile möchten wir statischen Text anzeigen, daher ist die

-Methode sehr einfach, wie im folgenden Codeausschnitt gezeigt.

public function Footer() 
{
    $this->SetY(-15);
    $this->SetFont('helvetica', 'I', 15);
    $this->Cell(0, 10, 'Thank you for your business!', 0, false, 'C', 0, '', 0, false, 'T', 'M');
}
printTable 方法,我们稍后再讨论这个方法。 printTable 方法与 TCPDFDer Fußzeilenbereich sieht so aus:

CustomPdfGenerator

Schließlich gibt es noch die Methode printTable, wir werden diese Methode später besprechen. Die Methode printTable hat nichts mit der Klasse

zu tun. Stattdessen verwenden wir unsere benutzerdefinierte Dienstprogrammmethode, um eine Tabelle zur Anzeige von Projektinformationen zu zeichnen.

CustomPdfGeneratorDies ist der

-Kurs. Im nächsten Abschnitt erfahren Sie, wie Sie es verwenden und welche anderen Möglichkeiten es gibt, eine vollständige PDF-Rechnung zu erstellen!

example.php-Datei

Im vorherigen Abschnitt haben wir die Wrapper-Klasse

erstellt, mit der wir PDF-Dateien mit benutzerdefinierten Kopf- und Fußzeilen generieren können. In diesem Abschnitt zeigen wir, wie man es benutzt.

Erstellen Sie die Datei example.php mit folgendem Inhalt. TCPDF

<?php
require "./vendor/autoload.php";
require "./customPdfGenerator.php";

$pdf = new CustomPdfGenerator(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
$pdf->setFontSubsetting(true);
$pdf->SetFont('dejavusans', '', 12, '', true);

// start a new page
$pdf->AddPage();

// date and invoice no
$pdf->Write(0, "\n", '', 0, 'C', true, 0, false, false, 0);
$pdf->writeHTML("<b>DATE:</b> 01/01/2021");
$pdf->writeHTML("<b>INVOICE#</b>12");
$pdf->Write(0, "\n", '', 0, 'C', true, 0, false, false, 0);

// address
$pdf->writeHTML("84 Norton Street,");
$pdf->writeHTML("NORMANHURST,");
$pdf->writeHTML("New South Wales, 2076");
$pdf->Write(0, "\n", '', 0, 'C', true, 0, false, false, 0);

// bill to
$pdf->writeHTML("<b>BILL TO:</b>", true, false, false, false, 'R');
$pdf->writeHTML("22 South Molle Boulevard,", true, false, false, false, 'R');
$pdf->writeHTML("KOOROOMOOL,", true, false, false, false, 'R');
$pdf->writeHTML("Queensland, 4854", true, false, false, false, 'R');
$pdf->Write(0, "\n", '', 0, 'C', true, 0, false, false, 0);

// invoice table starts here
$header = array('DESCRIPTION', 'UNITS', 'RATE $', 'AMOUNT');
$data = array(
   array('Item #1','1','100','100'),
   array('Item #2','2','200','400')
);
$pdf->printTable($header, $data);
$pdf->Ln();

// comments
$pdf->SetFont('', '', 12);
$pdf->writeHTML("<b>OTHER COMMENTS:</b>");
$pdf->writeHTML("Method of payment: <i>PAYPAL</i>");
$pdf->writeHTML("PayPal ID: <i>katie@paypal.com");
$pdf->Write(0, "\n\n\n", '', 0, 'C', true, 0, false, false, 0);
$pdf->writeHTML("If you have any questions about this invoice, please contact:", true, false, false, false, 'C');
$pdf->writeHTML("Katie A Falk, (07) 4050 2235, katie@sks.com", true, false, false, false, 'C');

// save pdf file
$pdf->Output(__DIR__ . '/invoice#12.pdf', 'F');
Werfen wir einen Blick auf die wichtigen Ausschnitte aus der Datei oben.

Zuerst haben wir die Datei 🎜autoload.php🎜 hinzugefügt, um sicherzustellen, dass die 🎜 Klassen automatisch geladen werden. Als nächstes haben wir die Datei 🎜customPdfGenerator.php🎜 hinzugefügt, um unsere benutzerdefinierte Klasse zu laden. 🎜

接下来,我们实例化了 CustomPdfGenerator 类以及默认设置。在实际开始写入 PDF 文件之前,我们还调用了一些方法来进行默认设置。

$pdf = new CustomPdfGenerator(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
$pdf->setFontSubsetting(true);
$pdf->SetFont('dejavusans', '', 12, '', true);

我们在上面代码片段中使用的常量已在 tcpdf_autoconfig.php 文件中定义。要覆盖这些常量之一,您只需在脚本中定义它,TCPDF 库将使用您的值。例如,PDF_PAGE_ORIENTATION 常量的默认值为 P(纵向),如果要将其更改为 L(横向),则只需包含 define ('PDF_PAGE_ORIENTATION', 'L ');脚本中的

接下来,有一个重要的片段,它调用 AddPage 方法,该方法实际上在 PDF 文档中添加一个新页面。

// start a new page
$pdf->AddPage();

现在我们已经添加了一个页面,我们可以开始在此页面上书写。

接下来,我们使用 WritewriteHTML 方法在左侧打印日期和发票号码。

// date and invoice no
$pdf->Write(0, "\n", '', 0, 'C', true, 0, false, false, 0);
$pdf->writeHTML("<b>DATE:</b> 01/01/2021");
$pdf->writeHTML("<b>INVOICE#</b>12");
$pdf->Write(0, "\n", '', 0, 'C', true, 0, false, false, 0);

Write 方法从当前位置开始打印文本,您可以使用它来打印纯文本。另一方面, writeHTML 方法允许您保留文本中的 HTML 格式。虽然 writeHTML 方法提供了有限的 HTML 格式支持,但它涵盖了日常开发中经常使用的所有 HTML 标签。

同样,我们在 writeHTML 方法的帮助下打印了地址和收单地址。

// address
$pdf->writeHTML("84 Norton Street,");
$pdf->writeHTML("NORMANHURST,");
$pdf->writeHTML("New South Wales, 2076");
$pdf->Write(0, "\n", '', 0, 'C', true, 0, false, false, 0);

// bill to
$pdf->writeHTML("<b>BILL TO:</b>", true, false, false, false, 'R');
$pdf->writeHTML("22 South Molle Boulevard,", true, false, false, false, 'R');
$pdf->writeHTML("KOOROOMOOL,", true, false, false, false, 'R');
$pdf->writeHTML("Queensland, 4854", true, false, false, false, 'R');
$pdf->Write(0, "\n", '', 0, 'C', true, 0, false, false, 0);

默认情况下,writeHTML 方法在左侧打印文本。如果要打印右对齐文本,可以传递 R 作为 writeHTML 方法的最后一个参数,如上面的代码片段所示。在我们的例子中,我们希望显示右对齐的收单地址。

让我们快速浏览一下到目前为止我们已经构建的内容。

So generieren Sie PDF-Dateien in PHP

接下来,我们有一个代码片段,它负责打印项目信息表的繁重工作。

// invoice table starts here
$header = array('DESCRIPTION', 'UNITS', 'RATE $', 'AMOUNT');
$data = array(
   array('Item #1','1','100','100'),
   array('Item #2','2','200','400')
);
$pdf->printTable($header, $data);
$pdf->Ln();

还记得我们在customPdfGenerator.php类中定义的printTable方法吗?现在是时候详细探讨它了。让我们拉入 printTable 方法的代码。

public function printTable($header, $data)
{
    $this->SetFillColor(0, 0, 0);
    $this->SetTextColor(255);
    $this->SetDrawColor(128, 0, 0);
    $this->SetLineWidth(0.3);
    $this->SetFont('', 'B', 12);

    $w = array(110, 17, 25, 30);
    $num_headers = count($header);
    for($i = 0; $i < $num_headers; ++$i) {
        $this->Cell($w[$i], 7, $header[$i], 1, 0, 'C', 1);
    }
    $this->Ln();

    // Color and font restoration
    $this->SetFillColor(224, 235, 255);
    $this->SetTextColor(0);
    $this->SetFont('');

    // table data
    $fill = 0;
    $total = 0;

    foreach($data as $row) {
        $this->Cell($w[0], 6, $row[0], 'LR', 0, 'L', $fill);
        $this->Cell($w[1], 6, $row[1], 'LR', 0, 'R', $fill);
        $this->Cell($w[2], 6, number_format($row[2]), 'LR', 0, 'R', $fill);
        $this->Cell($w[3], 6, number_format($row[3]), 'LR', 0, 'R', $fill);
        $this->Ln();
        $fill=!$fill;
        $total+=$row[3];
    }

    $this->Cell($w[0], 6, '', 'LR', 0, 'L', $fill);
    $this->Cell($w[1], 6, '', 'LR', 0, 'R', $fill);
    $this->Cell($w[2], 6, '', 'LR', 0, 'L', $fill);
    $this->Cell($w[3], 6, '', 'LR', 0, 'R', $fill);
    $this->Ln();

    $this->Cell($w[0], 6, '', 'LR', 0, 'L', $fill);
    $this->Cell($w[1], 6, '', 'LR', 0, 'R', $fill);
    $this->Cell($w[2], 6, 'TOTAL:', 'LR', 0, 'L', $fill);
    $this->Cell($w[3], 6, $total, 'LR', 0, 'R', $fill);
    $this->Ln();

    $this->Cell(array_sum($w), 0, '', 'T');
}

首先,在实际开始打印发票表的标题行之前,我们调用了几个方法来设置字体大小、填充颜色、线宽和文本颜色。接下来,我们在 Cell 方法的帮助下循环遍历 $header 数组并打印表头标题。

Cell 方法允许您打印具有可选边框、背景颜色和字符串的单元格(矩形区域)。您还可以指定在单元格中打印的文本的对齐方式。因此,Cell 方法是构建表的完美候选方法。

打印表格标题标题后,我们循环遍历 $data 数组并打印它以完成整个表格。最后,我们多次调用 Cell 方法来打印总金额。

表格的快速预览应如下所示:

So generieren Sie PDF-Dateien in PHP

现在,让我们回到 example.php 文件来查看最后几行代码。

在发票末尾,我们将打印一些评论和联系信息,如以下代码片段所示。

// comments
$pdf->SetFont('', '', 12);
$pdf->writeHTML("<b>OTHER COMMENTS:</b>");
$pdf->writeHTML("Method of payment: <i>PAYPAL</i>");
$pdf->writeHTML("PayPal ID: <i>katie@paypal.com");
$pdf->Write(0, "\n\n\n", '', 0, 'C', true, 0, false, false, 0);
$pdf->writeHTML("If you have any questions about this invoice, please contact:", true, false, false, false, 'C');
$pdf->writeHTML("Katie A Falk, (07) 4050 2235, katie@sks.com", true, false, false, false, 'C');

最后,我们使用 Output 方法将 PDF 文件保存到磁盘。如果您不想将 PDF 文件保存在磁盘上,而只想将其发送到浏览器,则需要在 Output 方法的第二个参数中使用 I

继续运行 example.php 文件,它应该生成如下屏幕截图所示的 PDF 文件。

So generieren Sie PDF-Dateien in PHP

结论

这就是如何使用 TCPDF 库在 PHP 中创建 PDF 文档。我们创建了一个真实示例来演示 TCPDF 库提供的一些不同的 API。

TCPDF 官方文档提供了许多现成的模板,您可以探索它们以了解内置 API,我鼓励您探索它!

如果您想了解有关在网站中包含 PDF 的更多信息,请查看以下链接:

  • So generieren Sie PDF-Dateien in PHPSo generieren Sie PDF-Dateien in PHP So erstellen Sie einen JavaScript-PDF-Viewer So generieren Sie PDF-Dateien in PHPSo generieren Sie PDF-Dateien in PHP Ashraf Hatibelagar 16. August 2021
  • So generieren Sie PDF-Dateien in PHPSo generieren Sie PDF-Dateien in PHP So betten und schützen Sie PDF-Dateien mithilfe von WordPress-Plugins So generieren Sie PDF-Dateien in PHPSo generieren Sie PDF-Dateien in PHP Esther blieb hartnäckig 17. Oktober 2022
  • So generieren Sie PDF-Dateien in PHPSo generieren Sie PDF-Dateien in PHP So betten Sie PDF-Dateien mit einem kostenlosen Plugin in Ihre WordPress-Website ein So generieren Sie PDF-Dateien in PHPSo generieren Sie PDF-Dateien in PHP hundert Söhne 29. Juli 2019
  • So generieren Sie PDF-Dateien in PHPSo generieren Sie PDF-Dateien in PHP So verwenden Sie das WowBook ​​​​jQuery Flipbook-Plug-in So generieren Sie PDF-Dateien in PHPSo generieren Sie PDF-Dateien in PHP Ashraf Hatibelagar 16. Januar 2019

Das obige ist der detaillierte Inhalt vonSo generieren Sie PDF-Dateien in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn