Comme le dit le titre J'ai essayé de produire un PDF en utilisant les bibliothèques ** TCPDF ** et ** FPDI **. Cette fois, je vais l'exécuter à partir de la ligne de commande.
Veuillez préparer un environnement dans lequel vous pouvez utiliser PHP et Composer comme vous le souhaitez.
Docker L'environnement Docker que j'ai utilisé cette fois est le suivant (partiellement omis).
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 Lorsque le lancement est terminé, entrez dans le conteneur php et Installez la bibliothèque dans Composer.
En plus de la bibliothèque, la description du chargement automatique est également ajoutée.
/home/work/src/composer.json
{
"require": {
"setasign/fpdi": "^2.3",
"tecnickcom/tcpdf": "^6.3"
},
"autoload": {
"psr-4": {
"Classes\\" : "classes/"
}
}
}
Une fois l'installation terminée, vous avez terminé.
# cd /home/work/src
# composer install
# cd /home/work/
# ls /home/work/output/pdf/fileYYYYmmdd-HHiiss #Fichier de sortie PDF
# ls /home/work/src/resources/font/ipam.ttf #Emplacement de stockage des polices
# ls /home/work/src/resources/pdf/templete.pdf #Emplacement de stockage des modèles PDF
# ls /home/work/bin/make-pdf.php #Source à exécuter sur la ligne de commande
# ls /home/work/src/bootstrap.php #Fichier de démarrage(Omis)
# ls /home/work/src/classes/MyTcpdf.php #Classe d'utilisation TCPDF
# ls /home/work/src/classes/common/DynamicProperty.php #Classe dynamique(Omis)
# ls /home/work/src/classes/MyTcpdf/FontColor.php #Classe de couleur de police(Omis)
C'est un fichier de modèle PDF très simple.
/home/work/bin/make-pdf.php
<?php
require_once __DIR__ . '/../src/bootstrap.php';
use Classes\MyTcpdf;
use Classes\MyTcpdf\FontColor;
//Sortie sans utiliser de modèles
$myTcpdf = new MyTcpdf();
$myTcpdf->addPage();
$myTcpdf->setText('Sortie sans utiliser de modèles', 10, 20, new FontColor(0, 255, 0));
$myTcpdf->outputPdfFile();
//Sortie à l'aide d'un modèle
$myTcpdfTmp = new MyTcpdf();
$myTcpdfTmp->addPageWithTemplete(1);
$myTcpdfTmp->setText('Sortie à l'aide d'un modèle', 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
{
//Fichier de sortie
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';
//Fichier de police
const FONT_FILE_NAME = __DIR__.'/../resources/font/ipam.ttf';
/**
*constructeur
*/
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);
}
/**
*Définir le caractère de sortie
* @param _chaîne de texte
* @param _x coordonnées X
* @param _y coordonnées Y
* @param _h hauteur
*/
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);
}
/**
*Obtenez la police à ajouter
*/
private function getFont()
{
return TCPDF_FONTS::addTTFfont(self::FONT_FILE_NAME);
}
/**
*Obtenez le nom du fichier de sortie
* @retourne le nom du fichier de chaîne
*/
private function getOutputFilename()
{
return self::OUTPUT_FILE_DIR . self::OUTPUT_FILE_NAME . date("Ymd-His"). '.pdf';
}
/**
*Ajouter une page
*/
public function addPage()
{
$this->fpdi->AddPage();
}
/**
*Ajouter une page basée sur un modèle
*/
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);
}
/**
*Sortie de fichier PDF
*/
public function outputPdfFile()
{
$this->fpdi->Output(
$this->getOutputFilename(),
self::OUTPUT_FORMAT_CHAR
);
}
}
php /home/work/bin/make-pdf.php
Le fichier a été produit comme suit.
Aucun modèle | Avec modèle |
---|---|
Étant donné que vous pouvez imprimer des caractères sur le modèle PDF, vous ne pouvez produire que les informations nécessaires sans changer le format. Il peut être utilisé pour les fichiers tels que les horaires de travail, les factures et les reçus où seules des pièces spécifiques changent.
Recommended Posts