horstoeko / zugferdvisualizer
库
v1.0.8
2024-06-17 15:39 UTC
Requires
- php: ^7.3|^7.4|^8
- ext-dom: *
- ext-mbstring: *
- dompdf/dompdf: ^2.0
- horstoeko/zugferd: ^1
- league/commonmark: ^1|^2
- mpdf/mpdf: ^8
Requires (Dev)
- ext-gd: *
- ext-json: *
- ext-zip: *
- pdepend/pdepend: ^2
- phploc/phploc: ^7
- phpmd/phpmd: ^2
- phpstan/phpstan: ^1.8
- phpunit/phpunit: ^9
- sebastian/phpcpd: ^6
- squizlabs/php_codesniffer: ^3
README
目录
许可证
本项目的代码在MIT许可证下提供。
概述
使用horstoeko/zugferdvisualizer
,您可以可视化ZUGFeRD/XRechnung/Factur-X文档。本包是horstoeko/zugferd
包的附加组件。系统使用标记模板(HTML)来渲染输出。您还可以从渲染的标记创建PDF
依赖项
本包使用以下内容
安装
以下是通过Composer安装horstoeko/zugferdvisualizer
的推荐方式
- 将依赖项添加到您的
composer.json
文件中
"require": { .. "horstoeko/zugferdvisualizer":"^1", .. },
使用方法
使用内置模板从现有发票文档(XML)创建HTML标记
use horstoeko\zugferd\ZugferdDocumentReader; use horstoeko\zugferdvisualizer\ZugferdVisualizer; require dirname(__FILE__) . "/../vendor/autoload.php"; $document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/invoice_1.xml"); $visualizer = new ZugferdVisualizer($document); $visualizer->setDefaultTemplate(); echo $visualizer->renderMarkup();
使用内置模板从现有发票文档(XML)创建PDF文件
在此处找到完整的示例完整示例
use horstoeko\zugferd\ZugferdDocumentReader; use horstoeko\zugferdvisualizer\ZugferdVisualizer; require dirname(__FILE__) . "/../vendor/autoload.php"; $document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/invoice_1.xml"); $visualizer = new ZugferdVisualizer($document); $visualizer->setDefaultTemplate(); $visualizer->setPdfFontDefault("courier"); $visualizer->renderPdfFile(dirname(__FILE__) . "/invoice_1.pdf");
使用内置模板从现有发票文档(XML)创建PDF字符串
use horstoeko\zugferd\ZugferdDocumentReader; use horstoeko\zugferdvisualizer\ZugferdVisualizer; require dirname(__FILE__) . "/../vendor/autoload.php"; $document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/invoice_1.xml"); $visualizer = new ZugferdVisualizer($document); $visualizer->setDefaultTemplate(); $visualizer->setPdfFontDefault("courier"); $pdfString = $visualizer->renderPdf();
从文档构建器创建PDF字符串并合并XML与生成的PDF
在此处找到完整的示例完整示例
$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_EN16931); $document ->setDocumentInformation("471102", "380", \DateTime::createFromFormat("Ymd", "20180305"), "EUR") ->... $reader = ZugferdDocumentReader::readAndGuessFromContent($document->getContent()); $visualizer = new ZugferdVisualizer($reader); $visualizer->setDefaultTemplate(); $visualizer->setPdfFontDefault("courier"); $visualizer->setPdfPaperSize('A4-P'); $merger = new ZugferdDocumentPdfMerger($document->getContent(), $visualizer->renderPdf()); $merger->generateDocument(); $merger->saveDocument(dirname(__FILE__) . "/invoice_2.pdf");
创建自定义渲染器
如果您想实现自己的标记渲染器,则您的类必须实现接口ZugferdVisualizerMarkupRendererContract
。该接口定义了两个方法
templateExists
render
use horstoeko\zugferd\ZugferdDocumentReader; use horstoeko\zugferdvisualizer\contracts\ZugferdVisualizerMarkupRendererContract; class MyOwnRenderer implements ZugferdVisualizerMarkupRendererContract { public function templateExists(string $template): bool { // Put your logic here // Method must return a boolean value } public function render(ZugferdDocumentReader $document, string $template): string { // Put your logic here // Method must return a string (rendered HTML markup) } }
使用自定义渲染器
use horstoeko\zugferd\ZugferdDocumentReader; use horstoeko\zugferdvisualizer\ZugferdVisualizer; require dirname(__FILE__) . "/../vendor/autoload.php"; $document = ZugferdDocumentReader::readAndGuessFromFile(dirname(__FILE__) . "/invoice_1.xml"); $visualizer = new ZugferdVisualizer($document); $visualizer->setRenderer(new MyOwnRenderer()); $visualizer->setTemplate('/assets/myowntemplate.tmpl'); echo $visualizer->renderMarkup();
使用内置Laravel渲染器
ZugferdVisualizerLaravelRenderer
可以在Laravel框架中使用
namespace App\Http\Controllers; use Illuminate\Http\Request; use horstoeko\zugferd\ZugferdDocumentReader; use horstoeko\zugferdvisualizer\renderer\ZugferdVisualizerLaravelRenderer; use horstoeko\zugferdvisualizer\ZugferdVisualizer; class ZugferdController extends Controller { public function index(Request $request) { $document = ZugferdDocumentReader::readAndGuessFromFile(storage_path('app/invoice_1.xml')); $visualizer = new ZugferdVisualizer($document); $visualizer->setRenderer(app(ZugferdVisualizerLaravelRenderer::class)); $visualizer->setTemplate('zugferd'); // ~/resources/views/zugferd.blade.php return $visualizer->renderMarkup(); } public function download(Request $request) { $document = ZugferdDocumentReader::readAndGuessFromFile(storage_path('app/invoice_1.xml')); $visualizer = new ZugferdVisualizer($document); $visualizer->setRenderer(app(ZugferdVisualizerLaravelRenderer::class)); $visualizer->setTemplate('zugferd'); $visualizer->setPdfFontDefault("courier"); $visualizer->setPdfPaperSize('A4-P'); $visualizer->renderPdfFile(storage_path('app/invoice_1.pdf')); $headers = [ 'Content-Type: application/pdf', ]; return response()->download(storage_path('app/invoice_1.pdf'), "invoice_1.pdf", $headers); } }
设置PDF选项
如果您想对内部PDF引擎进行进一步设置,则可以使用回调进一步更改设置。用法如下
在实例化内部PDF引擎之前设置选项(setPdfPreInitCallback
)
use horstoeko\zugferdvisualizer\ZugferdVisualizer; use Mpdf\Mpdf; $visualizer = new ZugferdVisualizer(static::$document); $visualizer->setDefaultTemplate(); $visualizer->setPdfPreInitCallback(function (array $config, ZugferdVisualizer $visualizer) { $config["orientation"] = "L"; return $config; });
在实例化内部PDF引擎之后设置选项(setPdfRuntimeInitCallback
)
use horstoeko\zugferdvisualizer\ZugferdVisualizer; use Mpdf\Mpdf; $visualizer = new ZugferdVisualizer(static::$document); $visualizer->setDefaultTemplate(); $visualizer->setPdfRuntimeInitCallback(function (Mpdf $mpdf, ZugferdVisualizer $visualizer) { $mpdf->pdf_version = "1.7"; });
使用自定义字体
如果您想使用自己的字体,这完全没有问题。首先,您必须指定一个或多个包含您的字体的目录
use horstoeko\zugferdvisualizer\ZugferdVisualizer; use Mpdf\Mpdf; $visualizer = new ZugferdVisualizer(static::$document); $visualizer->addPdfFontDirectory('/var/fonts1/'); $visualizer->addPdfFontDirectory('/var/fonts2/');
接下来,您需要定义字体属性
- 第一个参数设置字体家族的名称
- 第二个参数设置字体的类型
- R - 正常
- I - 斜体
- B - 粗体
- BI - 粗体&斜体
- 第三个参数设置字体在指定字体目录下的文件名
$visualizer->addPdfFontData('comicsans', 'R', 'comic.ttf'); $visualizer->addPdfFontData('comicsans', 'I', 'comici.ttf');
如果您想将自定义字体设置为默认字体,可以使用以下方法
$visualizer->setPdfFontDefault("comicsans");
您还可以在模板中任何HTML元素的style属性中使用字体家族的名称
<p style="font-family: comicsans">Text in Comic Sans</p>
有关更多配置选项,请参阅mPdf的文档