lotoservizi / fpdf-easytable
Loto Servizi 管理的 easytable 的 Fork。
Requires
- php: >=5.6
- setasign/fpdf: ^1.8
This package is auto-updated.
Last update: 2024-09-10 00:15:52 UTC
README
这是一个 PHP 类,提供了一种简单的方式来创建由 FPDF 库生成的 PDF 文档的表格。
使用此类创建 PDF 文档的表格与创建 HTML 表格一样简单灵活。我们还可以使用 CSS 风格的字符串来以相同的方式自定义表格的外观,就像使用 CSS 样式 HTML 表格一样。
无需编写混乱的代码,无需使用令人困惑的属性和文本数组。
无需复杂的配置文件。
使用 easyTable 建立和样式化表格简单、干净且快速。
$table=new easyTable($pdf, 3, 'width:100;');
$table->easyCell('Text 1', 'rowspan:2; valign:T');
$table->easyCell('Text 2', 'bgcolor:#b3ccff; rowspan:2');
$table->easyCell('Text 3');
$table->printRow();
$table->rowStyle('min-height:20');
$table->easyCell('Text 4', 'bgcolor:#3377ff; rowspan:2');
$table->printRow();
$table->easyCell('Text 5', 'bgcolor:#99bbff;colspan:2');
$table->printRow();
$table->endTable();
内容
特性
-
表格和列宽可以用毫米或百分比定义
-
每个表格单元格都是完全可定制的(字体家族、字体大小、字体颜色、背景颜色、文本位置、垂直间距、水平间距...)
-
单元格可以跨越多列和多行
-
表格在页面断点处自动拆分
-
具有一组标题行,因此标题可以自动添加到每一页的新页面
-
可以在全局级别、表格级别(影响表格中的所有单元格)、行级别(仅影响该行中的单元格)或单元格级别本地定义属性值
-
可以将行设置为在页面断点处拆分,如果它们不适合当前页面,则打印在下一页上
-
可以将图片添加到表格单元格中
-
可以在单元格中的图片上方或下方添加文本
-
基于标签的字体样式 允许在同一单元格中混合不同的字体家族、字体样式、字体大小和字体颜色! 新功能!!
-
链接 新功能!!
比较
easyTable 与 kind-of-HTML-to-PDF 的比较
使用 HTML 代码为 PDF 文档创建表格是一种有点草率的黑客手段。首先,为了将 HTML 代码转换为 FPDF,你需要一个解析器,这意味着性能上有损失;其次,结果非常糟糕。
HTML 代码
<table align:"right" style="border-collapse:collapse">
<tr>
<td rowspan="2" style="width:30%; background:#ffb3ec;">Text 1</td>
<td colspan="2" style="background:#FF66AA;">Text 2</td>
</tr>
<tr>
<td style="width:35%; background:#33ffff;">Text 3 </td>
<td style="width:35%; background:#ffff33;">Text 4 </td>
</tr>
</table>
easyTable 代码
$table=new easyTable($pdf, '%{30, 35, 35}', 'align:R; border:1');
$table->easyCell('Text 1', 'rowspan:2; bgcolor:#ffb3ec');
$table->easyCell('Text 2', 'colspan:2; bgcolor:#FF66AA');
$table->printRow();
$table->easyCell('Text 3', 'bgcolor:#33ffff');
$table->easyCell('Text 4', 'bgcolor:#ffff33');
$table->printRow();
$table->endTable(5);
示例
要求
- PHP 5.6 或更高版本
- FPDF 1.81.
- exfpdf.php (包含在此项目中)
手动安装
下载 EasyTable 类和 FPDF 类,并将内容放入项目结构中的目录。请确保您正在使用 FPDF 1.81。
快速开始
- 使用 exfpdf 类(FPDF 类的扩展)创建一个 fpdf 对象
- 创建一个 easyTable 对象
$table=new easyTable($pdf, 3, 'border:1');
- 添加一些行
$table->easyCell('Text 1', 'valign:T');
$table->easyCell('Text 2', 'bgcolor:#b3ccff;');
$table->easyCell('Text 3');
$table->printRow();
$table->rowStyle('min-height:20; align:{C}'); // let's adjust the height of this row
$table->easyCell('Text 4', 'colspan:3');
$table->printRow();
- 完成后,别忘了终止表格
$table->endTable(4);
文档
function __construct( FPDF-object $fpdf_obj, Mix $num_cols[, string $style = '' ])
描述
构造一个 easyTable 对象
参数
fpdf_obj
the current FPDF object (constructed with the FPDF library)
that is being used to write the current PDF document
num_cols
this parameter can be a positive integer (the number of columns)
or a string of the following form
I) a positive integer, the number of columns for the table. The width of every
column will be equal to the width of the table (given by the width property) divided by
the number of columns ($num_cols)
II) a string of the form '{c1, c2, c3,... cN}'. In this case every element in the curly
brackets is a positive numeric value that represent the width of a column. Thus,
the n-th numeric value is the width of the n-th colum. If the sum of all the width of
the columns is bigger than the width of the table but less than the width of the document,
the table will stretch to the sum of the columns width. However, if the sum of the columns
is bigger than the width of the document, the width of every column will be reduce proportionally
to make the total sum equal to the width of the document.
III) a string of the form '%{c1, c2, c3,... cN}'. Similar to the previous case, but this time
every element represents a percentage of the width of the table. In this case it the sum of
this percentages is bigger than 100, the execution will be terminated.
style
the global style for the table (see documentation) a semicolon-separated string of attribute
values that defines the default layout of the table and all the cells and their contents
(see Documentation section in README.md)
示例
$table= new easyTable($fpdf, 3);
$table= new easyTable($fpdf, '{35, 45, 55}', 'width:135;');
$table= new easyTable($fpdf, '%{35, 45, 55}', 'width:190;');
返回值
一个 easyTable 对象
function rowStyle( string $style )
描述
为当前行中的所有单元格设置或覆盖样式。
参数
style
一个分号分隔的属性值字符串,用于定义当前行中所有单元格的布局及其内容(请参阅README.md中的文档部分)
返回值
无
注意
应在当前行的第一个单元格之前调用此函数
function easyCell( string $data [, string $style = '' ])
描述
Makes a cell in the table
参数
data
相应单元格的内容
style(可选)一个分号分隔的属性值字符串,用于定义单元格及其内容的布局(请参阅README.md中的文档部分)
返回值
void
function printRow ( [ bool $setAsHeader = false ] )
描述
此函数表示当前行的结束。
参数
setAsHeader(可选)当设置为true时,将当前行设置为表格的标题;这意味着当前行将作为表格在每一页上的第一个行(表头)打印。注意:1. 为了正常工作,表格属性split-row应设置为false。2. 只使用设置为true的第一个行作为标题,其他行将按正常行打印。3. 对于跨越多个行的行标题,应在组的最后一行设置最后一个参数。请参阅示例2
返回值
无
注意
只要以下条件成立,此函数就会打印当前行
total_rowspan=0
where total_rowspan设置为
total_rowspan=max(total_rowspan, max(rowspan of cell in the current row))-1;
function endTable( [ int $bottomMargin = 2 ])
描述
取消easyTable对象的全部数据成员的设置
参数
bottomMargin(可选)
可选。指定在表格最后一行之后留下的空白行数。默认2。
如果它是负数,则垂直位置将在表格结束时设置。
返回值
无
样式字符串
与内联CSS样式类似,Easy Table使用由分号分隔的属性/值对组成的字符串来定义应用于表格不同部分的自定义样式。在表格级别设置的属性值将继承到表格中的所有行(因此所有单元格)。在行级别设置的属性值将覆盖从表格继承的值,并将传递给该行中的所有单元格,除非单元格为该属性定义了自己的值。
以下内容将使用以下符号
C=cell
R=row
T=table
属性 [C/R/T] 表示属性属性可以在单元格、行、表格上设置。
属性列表
width [T]
宽度属性设置表格的宽度。此属性可以用毫米或文档宽度的百分比定义。
语法
width:mm|%;
示例
width:145;
width:70%;
默认:文档宽度减去左右边距。
border [C/R/T]
边框属性指示是否在单元格或单元格周围绘制边框。值可以是数字
0: no border
1: frame
或包含以下字符(任意顺序)的字符串的一些或全部(
L: left border
T: top border
R: right border
B: bottom border
默认值:0。
border-color [C/R/T]
border-color属性用于设置围绕单元格绘制的边框的颜色。值可以是:十六进制颜色代码或RGB颜色代码。
语法
border-color: Hex |RGB;
示例
border-color:#ABCABC;
border-color:#ABC;
border-color:79,140, 200;
默认值:文档中设置的当前绘制颜色
注意:当在单元格级别设置此属性时,因为单元格的边框相互重叠,相邻单元格中不同边框颜色可能不会得到预期结果。
border-width [T]
border-width属性用于设置构成边框的线条的宽度。
语法
border-width:0.5;
默认值:文档的当前绘图线宽。
注意:如果将border-width设置为较宽,边框可能会与单元格内容重叠。在这种情况下,您需要在单元格上设置适当的paddingX和paddingY。(请参阅paddingX和paddingY属性下面的内容)。
split-row [T]
此属性指示当页面底部的一行达到底部页边距时,该行是否应分割,除了包含跨越不同行单元格的行,在这种情况下行将分割。默认情况下,任何无法适应页面的行都会打印在下一页上。将此属性设置为false,它将在页面之间分割任何行。
示例
split-row:false;
l-margin [T]
此属性指示表格应从哪里开始,距离左边距的距离。
语法
l-maring:mm;
示例
l-maring:45;
默认值:0。
min-height [R]
min-height属性为该特定行中的所有单元格(具有rowspan:1)设置最小高度。
语法
min-height:mm;
示例
min-height:35;
默认值:0。
align [C/R/T]
此属性指示设置此属性元素的横向对齐方式。值可以是
L: to the left
C: at the centre
R: to the right
J: justified (applicable just on cells)
表格的语法是
align:A;
align:A{A-1A-2A-3A-4...};
说明:第一个字符表示表格的横向对齐方式(如果未设置l-margin),而可选字符串是形式为:{A-1A-2A-3A-4...}(包括花括号)的字符串,其中A-1、A-2、A-3、A-4等可以是L、C、R或J,A-n字母表示第n行的所有单元格内容的横向对齐方式。如果行数多于可选字符串的长度,则溢出的行将具有默认左对齐(L)。
示例:(具有10行的表格)
align:R{CCCLLJ};
表示表格与文档右对齐,前三行的单元格内容将居中对齐,第4和第5行的单元格内容将左对齐,第6行的单元格内容将右对齐,而其余行的单元格内容将左对齐。
行的语法是
align:{A-1A-2A-3A-4...};
其中A-1、A-2等与表格情况相同,具有相同的功能:A-n字符表示相应行中第n列单元格的对齐方式。
示例
align:{LRCCRRLJ}
单元格的语法是
align:A;
其中A可以是L、C、R、J。
默认值:L。
valign [C/R/T]
此属性定义单元格内容的垂直对齐方式。值可以是
T: top
M: middle
B: bottom
示例
valign:M;
默认值:T。
注意:当在具有图像属性设置的单元格上使用valign属性时(见下文),如果单元格没有文本,valign的行为如预期,即图像根据valign的值定位。但是,如果单元格包含文本,图像和文本在单元格中间valign,而valign:T或valign:M将文本放置在图像上方,而valign:B将文本放置在图像下方。
bgcolor [C/R/T]
bgcolor属性定义单元格的背景颜色。值可以是:十六进制颜色代码或RGB颜色代码。
语法
bgcolor:Hex | RGB;
示例
bgcolor:#ABCABC;
bgcolor:#ABC;
bgcolor:79,140, 200;
默认值:文档中设置的当前填充颜色。
font-family [C/R/T]
可以是通过FPDF方法AddFont()定义的名称,或者可以是标准家族之一(不区分大小写)
Courier (fixed-width)
Helvetica or Arial (synonymous; sans serif)
Times (serif)
Symbol (symbolic)
ZapfDingbats (symbolic)
也可以传递一个空字符串。在这种情况下,保持当前家族。
示例
font-family:times;
默认值:文档中设置的字体家族。
font-style [C/R/T]
可能的值是(不区分大小写)
empty string: regular
B: bold
I: italic
U: underline
或任何组合。默认值是常规。加粗和斜体样式不适用于Symbol和ZapfDingbats。
示例
font-style:IBU
默认值:空;
font-size [C/R/T]
字体大小以点为单位。
示例
font-size:16;
默认值:文档的当前字体大小。
font-color [C/R/T]
此属性定义单元格中字体颜色。值可以是:十六进制颜色代码或RGB颜色代码。
语法
font-color:Hex |RGB;
示例
font-color:#ABCABC;
font-color:#ABC;
font-color:79,140, 200;
默认值:文档中当前设置的字体颜色
行高 [C/R/T]
行高属性指定行高。
语法
line-height:number;
示例
line-height:1.2;
默认值:1。
paddingX [C/R/T]
paddingX 属性设置单元格的左右填充(空间)。
语法
paddingX:mm;
示例
paddingX:4;
默认:0.5。
paddingY [C/R/T]
paddingY 属性设置单元格的上下填充(空间)。
语法
paddingY:mm;
示例
paddingY:3;
默认:1。
colspan [C]
colspan 属性定义单元格应跨越的列数。
语法
colspan:4;
默认 1
rowspan [C] The rowspan attribute defines the number of rows a cell should span.
语法
rowspan:2;
默认 1
img [C] The img attribute defines the image and its dimensions to be set in the cell.
语法
img:image.png,w80,h50;
img:image.png,h50;
img:image.png;
如果没有指定尺寸,则图像尺寸将按比例计算以适应单元格宽度。如果指定了两个尺寸中的一个(宽度或高度)但没有指定另一个,则未指定的尺寸将按比例计算。默认值:空。
字体和 UTF8 支持
-
获取您想要使用的字体ttf文件,并将它们保存到Fonts目录中。
注意:如果您想使用加粗、斜体或加粗斜体字体样式,也需要相应的字体文件。
注意:字体必须包含您想要使用的字符
-
使用FPDF库的makefont.php脚本部分(在makefont目录中)
me@laptop:/path/to/FPDF/makefont$ php makefont.php /path/to/Fonts/My_font.ttf ENCODE注意:使用正确的编码以使用UTF-8符号 FPDF:教程7。
注意:字体必须包含与所选编码对应的字符。
-
最后一个命令将在目录 /path/to/FPDF/makefont 中创建文件 My_font.php 和 My_font.z,将文件移动到目录 /path/to/FPDF/font
-
现在您可以在脚本中使用您的字体
$pdf = new PDF(); $pdf->AddFont('Cool-font','','My_font.php'); // Define the new font to use in the PDF object // more code $table=new easyTable($pdf, ...); $table->easyCell(iconv("UTF-8", "ENCODE",'Hello World'), 'font-color:#66686b;font-family:Cool-font'); //etc... -
示例:我们获取一个ttf字体文件(my_font.ttf),它支持我们想要使用的语言和符号。在这个例子中,我们使用俄语。我们用于俄语的编码是 KOI8-R
php makefont.php /path/to/font_ttf/my_font.ttf KOI8-R然后将生成的文件复制到FPDF库的字体目录。
然后,在我们的脚本中
$pdf = new PDF(); $pdf->AddFont('FontUTF8','','my_font.php'); $pdf->SetFont('FontUTF8','',8); // set default font for the document $table=new easyTable($pdf, ...); $Table->easyCell(iconv("UTF-8", "KOI8-R", "дебет дефинитионес цу")); // Notice the encode KOI8-R或
$pdf = new PDF(); $pdf->AddPage(); $pdf->SetFont('Arial','B',16); $pdf->AddFont('FontUTF8','','my_font.php'); $table=new easyTable($pdf, 5, '...'); $Table->easyCell(iconv("UTF-8", "KOI8-R", "дебет дефинитионес цу"), 'font-family:FontUTF8;');注意:有关正确编码的更多信息,请访问 FPDF:教程7 和 php inconv
与 FPDI 一起使用
如果您的项目需要 easyTable 和 FPDI,这是您应该怎么做。假设 fpdf.php、easyTable.php、exfpdf.php、fpdi.php 和这些库中的任何其他文件都在同一个目录中。
类 exfpdf 应扩展类 fpdi 而不是类 fpdf。所以,在 exfpdf.php 中
<?php
class exFPDF extends FPDI
{
etc
etc
并在您的项目中
<?php
include 'fpdf.php';
include 'fpdi.php';
include 'exfpdf.php';
include 'easyTable.php';
//$pdf = new FPDI(); remember exfpdf is extending the fpdi class
$pdf=new exFPDF(); // so we initiate exFPDF instead of FPDI
// add a page
$pdf->AddPage();
// set the source file
$pdf->setSourceFile("example-2.pdf");
// import page 1
$tplIdx = $pdf->importPage(1);
// use the imported page and place it at point 10,10 with a width of 100 mm
$pdf->useTemplate($tplIdx, 10, 10, 100);
//add another page
$pdf->AddPage();
$pdf->SetFont('helvetica','',10);
$table1=new easyTable($pdf, 2);
$table1->easyCell('Sales Invoice', 'font-size:30; font-style:B; font-color:#00bfff;');
$table1->easyCell('', 'img:fpdf.png, w80; align:R;');
$table1->printRow();
//etc
//etc
基于标签的字体样式
FPDF EasyTable 的新版本可以在字符串级别处理基于标签的字体样式。
$table->easyCell('Project: EasyTable', 'font-family:lato; font-size:30; font-color:#00bfff;');
现在我们可以这样做
$table->easyCell('<b>Project:</b> <s "font-size:20; font-family:times">EasyTable</s>', 'font-family:lato; font-size:30; font-color:#00bfff;');
在字符串级别设置的字体样式将覆盖在单元格、行或表格级别设置的任何其他字体样式。
请参阅 示例
标签
<s "fontstyle">
font-style 是一个分号分隔的字符串,可以包含:font-size, font-family, font-style, font-color, href;
注意:请记住为项目定义每个字体。
$pdf->AddFont('MyFabFont','','my_font.php');
$pdf->AddFont('MyFabFont','B','my_font_bold.php');
$pdf->AddFont('MyFabFont','I','my_font_italic.php');
$pdf->AddFont('MyFabFont','BI','my_font_bolditalic.php');
font-color 可以是十六进制颜色代码或RGB颜色代码。
快捷方式
<b></b> is equalt to: <s "font-style:B"></s>
<i></i> is equalt to: <s "font-style:I"></s>
标签可以嵌套
当使用嵌套标签时,结果类似于HTML文档中的情况。
<b>Helo <i>world</i></b>
<s "font-style:I; font-color#abc123; font-family:times">Hello <s "font-style:B; font-family:lato; font-size:20">world</s></s>
- 可以为单词中的字母应用不同的字体样式。
<b>H<i>e</i><s "font-family:myfont">ll<s "font-size">o</s></s></b>
链接
使用属性 'href' 设置链接
<b>Helo <s "font-family:my_fab_font; font-color:#AABBCC; href:http://www.example.com">world</s></b>
转义序列
序列 '\<s' 被解析为 '<s'
<b>Helo <s "font-family:my_fab_font;">\<sammy@example.com></s></b>
常见错误
一个非常典型的情况是:"EasyTable在我的本地服务器上工作,但在远程服务器上不工作"... 真的,这和EasyTable有什么关系?... 报告的错误是致命错误:未捕获的异常 'Exception',信息为 'FPDF错误:某些数据已输出,无法发送PDF文件...等等...
这是因为当服务器调用脚本输出PDF文档时,它已经将标题设置为PDF文档,然而在某个地方/方式(由你服务器的配置错误触发)正在输出html/txt数据。
一个非常常见的错误是忘记添加文档中使用的字体及其不同样式(I,B,IB)。假设在你的文档中使用的是 "my_favourite_font"。那么你需要添加
$pdf->AddFont('MyFabFont','','my_favourite_font.php');
如果你使用的是它的粗体版本,那么你必须添加
$pdf->AddFont('MyFabFont','B','my_favourite_font_bold.php');
如果你使用的是斜体版本,那么你需要添加
$pdf->AddFont('MyFabFont','I','my_favourite_font_italic.php');
如果你使用的是粗体斜体,那么
$pdf->AddFont('MyFabFont','BI','my_favourite_font_bolditalic.php');
你需要生成项目中需要添加的每个字体文件('my_favourite_font_bold.php', 'my_favourite_font_italic.php', 'my_favourite_font_bolditalic.php'),参考你的字体文档并查看字体和UTF8支持。
联系方式
欢迎您的评论和提问:easytable@yandex.com(主题:EasyTable)
其他项目
- Simple Unit Test PHP单元测试,就像它应该做的那样。
- SimpleCharts.js
- Ajax服务器响应处理器 简化Ajax调用服务器响应
- 加密
捐赠
任何货币捐赠都将受到赞赏 :-)
如果你是代表你工作的公司使用这个(),他们得到了钱,你得到了奖牌,而我什么都没有!这公平吗?
按下那个古怪的小星星按钮根本不花钱!!
许可
这是一个免费且不受限制的软件,已发布到公有领域。
任何人都可以免费复制、修改、发布、使用、编译、销售或分发此软件,无论是以源代码形式还是编译的二进制形式,用于任何目的,无论是商业目的还是非商业目的,并且通过任何方式。
在承认版权法的司法管辖区,本软件的作者或作者将本软件的任何和所有版权利益捐赠给公有领域。我们做出这项捐赠是为了公众的利益,损害我们继承人后继人的利益。我们意图使这项捐赠成为放弃在版权法下本软件的现有和未来所有权利的明确行为。
本软件按照“现状”提供,不提供任何形式的保证,无论是明示的、暗示的,包括但不限于适销性、特定目的的适用性和非侵权性保证。在任何情况下,作者都不对任何索赔、损害或其他责任负责,无论是基于合同、侵权或其他方式,无论起因于、源于或与此软件的使用或其他交易有关。
有关更多信息,请参阅http://unlicense.org/