Wie der Titel schon sagt Ich habe versucht, ein PDF mit den Bibliotheken ** TCPDF ** und ** FPDI ** auszugeben. Dieses Mal werde ich es über die Kommandozeile ausführen.
Bitte bereiten Sie eine Umgebung vor, in der PHP und Composer nach Belieben verwendet werden können.
Docker Die Docker-Umgebung, die ich dieses Mal verwendet habe, ist wie folgt (teilweise weggelassen).
yml:./docker-compose.yml
version: '3'
services:
php:
build: ./php
volumes:
- ./work:/home/work
./php/dockerfile
FROM php:7.3-fpm
COPY php.ini /usr/local/etc/php/
# Composer
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
&& php -r "if (hash_file('sha384', 'composer-setup.php') === '795f976fe0ebd8b75f26a6dd68f78fd3453ce79f32ecb33e7fd087d39bfeb978342fb73ac986cd4f54edd0dc902601dc') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
&& php composer-setup.php \
&& php -r "unlink('composer-setup.php');" \
&& mv composer.phar /usr/local/bin/composer
ini:./php/php.ini
date.timezone = "Asia/Tokyo"
Composer Wenn der Start abgeschlossen ist, geben Sie den PHP-Container und ein Installieren Sie die Bibliothek in Composer.
Zusätzlich zur Bibliothek wird auch die Beschreibung des automatischen Ladens hinzugefügt.
/home/work/src/composer.json
{
"require": {
"setasign/fpdi": "^2.3",
"tecnickcom/tcpdf": "^6.3"
},
"autoload": {
"psr-4": {
"Classes\\" : "classes/"
}
}
}
Sobald die Installation abgeschlossen ist, sind Sie fertig.
# cd /home/work/src
# composer install
# cd /home/work/
# ls /home/work/output/pdf/fileYYYYmmdd-HHiiss #PDF-Ausgabedatei
# ls /home/work/src/resources/font/ipam.ttf #Speicherort für Schriftarten
# ls /home/work/src/resources/pdf/templete.pdf #Speicherort der PDF-Vorlage
# ls /home/work/bin/make-pdf.php #Quelle, die in der Befehlszeile ausgeführt werden soll
# ls /home/work/src/bootstrap.php #Startdatei(Ausgelassen)
# ls /home/work/src/classes/MyTcpdf.php #TCPDF-Verwendungsklasse
# ls /home/work/src/classes/common/DynamicProperty.php #Dynamische Klasse(Ausgelassen)
# ls /home/work/src/classes/MyTcpdf/FontColor.php #Schriftfarbklasse(Ausgelassen)
Es ist eine sehr einfache PDF-Vorlagendatei.
/home/work/bin/make-pdf.php
<?php
require_once __DIR__ . '/../src/bootstrap.php';
use Classes\MyTcpdf;
use Classes\MyTcpdf\FontColor;
//Ausgabe ohne Verwendung von Vorlagen
$myTcpdf = new MyTcpdf();
$myTcpdf->addPage();
$myTcpdf->setText('Ausgabe ohne Verwendung von Vorlagen', 10, 20, new FontColor(0, 255, 0));
$myTcpdf->outputPdfFile();
//Ausgabe mit Vorlage
$myTcpdfTmp = new MyTcpdf();
$myTcpdfTmp->addPageWithTemplete(1);
$myTcpdfTmp->setText('Ausgabe mit Vorlage', 10, 20, new FontColor(255, 0, 0));
$myTcpdfTmp->outputPdfFile();
/home/work/src/classes/MyTcpdf.php
<?php
namespace Classes;
use TCPDF_FONTS;
use setasign\Fpdi\Tcpdf\Fpdi;
use Classes\MyTcpdf\FontColor;
class MyTcpdf
{
//Ausgabedatei
const OUTPUT_FORMAT_CHAR = 'F';
const OUTPUT_FILE_DIR = __DIR__.'/../../output/pdf/';
const OUTPUT_FILE_NAME = 'file';
// PDF
const PDF_ORIENTATION = 'P';
const PDF_UNIT = 'mm';
const PDF_SIZE = 'A4';
const PDF_TEMPLETE = __DIR__.'/../resources/pdf/templete.pdf';
//Schriftdatei
const FONT_FILE_NAME = __DIR__.'/../resources/font/ipam.ttf';
/**
*Konstrukteur
*/
public function __construct()
{
$this->fpdi = new Fpdi(self::PDF_ORIENTATION, self::PDF_UNIT, self::PDF_SIZE);
$this->fpdi->SetMargins(0, 0, 0);
$this->fpdi->SetFont($this->getFont(), '', 32);
}
/**
*Stellen Sie das Ausgabezeichen ein
* @param _Textzeichenfolge
* @param _x X Koordinaten
* @param _y Y Koordinaten
* @param _h Höhe
*/
public function setText(string $_text, int $_x, int $_y, FontColor $_fontColor, int $_h = 0)
{
$this->fpdi->SetTextColor($_fontColor->R, $_fontColor->G, $_fontColor->B);
$this->fpdi->SetXY($_x, $_y);
$this->fpdi->Write($_h, $_text);
}
/**
*Holen Sie sich die Schriftart zum Hinzufügen
*/
private function getFont()
{
return TCPDF_FONTS::addTTFfont(self::FONT_FILE_NAME);
}
/**
*Rufen Sie den Namen der Ausgabedatei ab
* @Name der Zeichenfolgendatei zurückgeben
*/
private function getOutputFilename()
{
return self::OUTPUT_FILE_DIR . self::OUTPUT_FILE_NAME . date("Ymd-His"). '.pdf';
}
/**
*Seite hinzufügen
*/
public function addPage()
{
$this->fpdi->AddPage();
}
/**
*Fügen Sie eine vorlagenbasierte Seite hinzu
*/
public function addPageWithTemplete($_pageNum)
{
$this->fpdi->SetSourceFile(self::PDF_TEMPLETE);
$page = $this->fpdi->importPage($_pageNum);
$this->fpdi->AddPage();
$this->fpdi->useTemplate($page, null, null, null, null, true);
}
/**
*Ausgabe der PDF-Datei
*/
public function outputPdfFile()
{
$this->fpdi->Output(
$this->getOutputFilename(),
self::OUTPUT_FORMAT_CHAR
);
}
}
php /home/work/bin/make-pdf.php
Die Datei wurde wie folgt ausgegeben.
Keine Vorlage | Mit Vorlage |
---|---|
Da Sie Zeichen in der PDF-Vorlage ausgeben können, können Sie nur die erforderlichen Informationen ausgeben, ohne das Format zu ändern. Es kann für Dateien wie Arbeitspläne, Rechnungen und Quittungen verwendet werden, bei denen sich nur bestimmte Teile ändern.
Recommended Posts