yetiforce/yetiforcepdf

用于从HTML生成PDF文件的库。

0.1.42 2024-09-09 11:46 UTC

README

Latest Stable Version Build Status Scrutinizer Code Quality Maintainability

PHP的PDF生成库

世界上从HTML生成PDF的最佳库

问题和错误

有关PDF的错误,请在此处报告:https://github.com/YetiForceCompany/YetiForceCRM/issues

基本用法(更多请参阅示例文件夹)

<?php
$loader = require '../vendor/autoload.php';
$document = (new YetiForcePDF\Document())->init();
$document->loadHtml('<div style="text-align:center;">your html goes here</div>');
$pdfFile = $document->render();
file_put_contents('YourPDF.pdf', $pdfFile);

支持的CSS规则

  • font-family
  • font-size
  • font-weight
  • font-style
  • margin [px, em, cm, mm, pt, in]
  • margin-left [px, em, cm, mm, pt, in]
  • margin-top [px, em, cm, mm, pt, in]
  • margin-right [px, em, cm, mm, pt, in]
  • margin-bottom [px, em, cm, mm, pt, in]
  • padding [px, em, cm, mm, pt, in]
  • padding-left [px, em, cm, mm, pt, in]
  • padding-top [px, em, cm, mm, pt, in]
  • padding-right [px, em, cm, mm, pt, in]
  • padding-bottom [px, em, cm, mm, pt, in]
  • border [px, em, cm, mm, pt, in]
  • border-left
  • border-top
  • border-right
  • border-bottom
  • border-left-width [px, em, cm, mm, pt, in]
  • border-top-width [px, em, cm, mm, pt, in]
  • border-right-width [px, em, cm, mm, pt, in]
  • border-bottom-width [px, em, cm, mm, pt, in]
  • border-color [hex, rgb]
  • border-left-color [hex, rgb]
  • border-top-color [hex, rgb]
  • border-right-color [hex, rgb]
  • border-bottom-color [hex, rgb]
  • border-style
  • border-left-style
  • border-top-style
  • border-right-style
  • border-bottom-style
  • box-sizing
  • display [block, inline, inline-block, none]
  • width [%, px, em, cm, mm, pt, in]
  • height [%, px, em, cm, mm, pt, in]
  • overflow
  • vertical-align [baseline, top, bottom, middle]
  • line-height [px, em, cm, mm, pt, in]
  • background-color [hex, rgb]
  • color [hex, rgb, rgba, named]
  • word-wrap [normal]
  • max-width
  • min-width
  • white-space [normal]
  • word-wrap
  • float
  • clear
  • 表格显示
  • background-image
  • rgb / rgba color

默认可用的字体

  • DejaVu Sans

自定义字体

将您的ttf字体文件上传到服务器,并在您的html文件开头添加以下代码。

如果您的字体支持,可以定义每个字体的粗细和样式。

<div data-font data-family="Your Font Name" data-weight="400" data-style="normal" data-file="/absolute/path/to/font/file/YourFontName-Regular.ttf"></div>
<div data-font data-family="Your Font Name" data-weight="400" data-style="italic" data-file="/absolute/path/to/font/file/YourFontName-Italic.ttf"></div>
<div data-font data-family="Your Font Name" data-weight="800" data-style="normal" data-file="/absolute/path/to/font/file/YourFontName-Bold.ttf"></div>
<div data-font data-family="Your Font Name" data-weight="800" data-style="italic" data-file="/absolute/path/to/font/file/YourFontName-BoldItalic.ttf"></div>

您也可以在PHP中添加字体,如下所示

\YetiForcePDF\Document::addFonts([
	[
		'family' => 'Pacifico',
		'weight' => '400',
		'style' => 'normal',
		'file' => '/absolute/path/to/Pacifico/Pacifico-Regular.ttf'
	],
	[
		'family' => 'Lobster Two',
		'weight' => '400',
		'style' => 'normal',
		'file' => '/absolute/path/to/Lobster_Two/LobsterTwo-Regular.ttf'
	],
	[
		'family' => 'Lobster Two',
		'weight' => 'bold',
		'style' => 'normal',
		'file' => '/absolute/path/to/Lobster_Two/LobsterTwo-Bold.ttf'
	],
]);

页眉,页脚和水印

您可以在PDF文件中定义要显示的页眉,页脚和水印。

<div data-header>
    <table style="border:1px solid greenyellow;font-size:12px;margin:10px;background-color:yellow;width:100%">
        <tr>
            <td style="width:50%;border:1px solid red;">This is a page header</td>
            <td style="text-align:right;border:1px solid red;">which could be table</td>
        </tr>
    </table>
</div>
<div data-footer>
    <div style="border:1px solid greenyellow;font-size:14px;margin:10px;">
        <div style="text-align:center">Footer</div>
    </div>
</div>
<div data-watermark style="text-align:center;">
    <div style="display:inline-block;font-size:20px;opacity:0.25;">
        <img src="Image.jpg">
    </div>
</div>

页面格式,方向和边距

页面格式,方向和边距可以通过YetiForcePDF实例或html代码定义。

如果您在单个PDF文档中包含多个页面格式和方向,您可以在html中插入多个 data-page-group

<div data-page-group
     data-format="A4"
     data-orientation="P"
     data-margin-left="30"
     data-margin-right="30"
     data-margin-top="40"
     data-margin-bottom="40"
     data-header-top="10"
     data-footer-bottom="10"
></div>

分页

当您想要添加新页面时,请使用 data-page-group 或在div元素上设置样式 page-break-after:always

<div style="page-break-after:always;"></div>

页码

当您想要放置页码(例如在页眉或页脚中)时,您可以在html中放置 {p}{a} 文本 - 它将被 {p} 页码或 {a} 所有页面数替换。

<div data-footer>
    <div style="border:1px solid greenyellow;font-size:14px;margin:10px;">
        <div style="text-align:center">Page {p} / {a}</div>
    </div>
</div>

条形码

<div data-barcode="EAN13" data-size="1" data-height="16" data-code="9780691147727"></div>

待办事项(稍后但很重要)

  • 浮动
  • display: list-item
  • 基本变换(rotateXY,scaleXY,translateXY)
  • 位置(绝对,相对)

许可证

在MIT许可证下分发。有关详细信息,请参阅LICENSE。

👥 贡献者

本项目之所以存在,归功于所有贡献者。