abranasays / fpdf-easytable
源自 fpdf-easytable
Requires
- php: >=5.6
- setasign/fpdf: ^1.8
This package is auto-updated.
Last update: 2024-09-11 21:25:43 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对象
函数 rowStyle(字符串 $style )
描述
设置或覆盖当前行中所有单元格的样式。
参数
style
由分号分隔的属性值字符串,定义当前行中所有单元格的布局及其内容(请参阅README.md中的文档部分)
返回值
无
注意事项
该函数应在当前行的第一个单元格之前调用
函数 easyCell(字符串 $data[, 字符串 $style = '' ])
描述
Makes a cell in the table
参数
数据
相应单元格的内容
样式(可选)一个分号分隔的属性值字符串,定义单元格及其内容的布局(请参阅README.md中的文档部分)
返回值
void
函数 printRow ( [ 布尔型 $setAsHeader = false ] )
描述
此函数表示当前行的结束。
参数
setAsHeader(可选)当设置为true时,将当前行设置为表的标题;这意味着当前行将作为表的第一行(表头)打印在表的每一页上。注意:1. 为了正常工作,表属性split-row应设置为false。2. 只有第一个将此参数设置为true的行将用作标题,其他行将按正常行打印。3. 对于跨越多行的行标题,应在组的最后一行设置最后一个参数。请参阅示例 2
返回值
无
注意
只要以下条件成立,此函数将打印当前行
total_rowspan=0
其中total_rowspan设置为
total_rowspan=max(total_rowspan, max(rowspan of cell in the current row))-1;
函数 endTable( [ int $bottomMargin = 2 ])
描述
取消设置easyTable对象的所有数据成员
参数
bottomMargin(可选)
可选。指定表格底部边距的大小,单位为用户单位。默认为2个用户单位。
如果它是负数,则垂直位置将在表格结束之前设置。
返回值
无
样式字符串
与内联CSS样式相同,Easy Table使用分号分隔的属性/值对字符串来定义应用于表格不同部分的风格。在表格级别设置的属性值将继承到表格的所有行(因此所有单元格)。在行级别设置的属性值将覆盖从表格继承的值,并将传递给该行中的所有单元格,除非单元格为该属性定义了自己的值。
以下我们将使用以下符号
C=cell
R=row
T=table
属性 [C/R/T] 表示属性属性可以在单元格、行、表格上设置。
属性列表
width [T]
width属性设置表格的宽度。此属性可以用用户单位定义,也可以用文档宽度的百分比定义。
语法
width:user-units|%;
示例
width:145;// 145mm if the user units is mm
width:70%;
默认:文档宽度减去左右边距。
border [C/R/T]
border属性指示是否要在单元格周围绘制边框。值可以是数字
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:0.5;
默认值:文档当前绘制线条宽度。
注意:如果边框宽度设置为较粗,边框可能会覆盖单元格的内容。在这种情况下,您将需要在单元格上设置适当的paddingX和paddingY。(请参阅下面的paddingX和paddingY属性)。
split-row [T]
此属性指示当页面底部的一行达到底部边距时,该行是否应该分割。除非行包含跨越不同行的单元格,在这种情况下,行会分割。默认情况下,任何不适合页面的行将在下一页打印。将此属性设置为false,它将在页面之间分割任何行。
示例
split-row:false;
l-margin [T]
此属性指示表格应该开始的位置与左边距的距离。
语法
l-maring:user-units;
示例
l-maring:45;
默认值:0。
min-height [R]
min-height属性为该特定行中所有具有rowspan:1的单元格设置最小高度。
语法
min-height:user-units;
示例
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};
表示表格对齐到文档的右侧,前三行的单元格内容将居中对齐,第四和第五行的单元格内容将左对齐,第六行的单元格内容将右对齐,而剩余行中剩余的单元格内容将左对齐。
行的语法是
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]
属性valign定义单元格内容的垂直对齐方式。值可以是
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-family。
font-style [C/R/T]
可能的值是(不区分大小写)
empty string: regular
B: bold
I: italic
U: underline
或任何组合。默认值是常规。粗体和斜体样式不适用于Symbol和ZapfDingbats。
示例
font-style:IBU
默认值:空;
字体大小 [C/R/T]
字体大小(以点为单位)。
示例
font-size:16;
默认值:文档当前字体大小。
字体颜色 [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:user-units;
示例
paddingX:4;
默认:0.5。
paddingY [C/R/T]
paddingY属性设置单元格的上下填充(空间)。
语法
paddingY:user-units;
示例
paddingY:3;
默认:1。
colspan [C]
colspan属性定义单元格应跨越的列数。
语法
colspan:4;
默认值:1
rowspan [C] The rowspan属性定义单元格应跨越的行数。
语法
rowspan:2;
默认值:1
img [C] The img属性定义单元格中要设置的图像及其尺寸。
语法
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 支持与 FPDF: construct 支持相同的用户单位(pt/mm/cm/in)。请注意,任何与单位相关的设置(宽度、边框等)都需要在顶部文档中设置相应的单位。例如,如果文档的单位设置为英寸,则所有与单位相关的设置都将考虑在相同的使用单位中,例如 min-height:1.2; 将表示 1.2 英寸。
常见错误
一个非常典型的情况是:"EasyTable 在我的本地服务器上工作,但在远程服务器上不起作用"... 真的,这与 EasyTable 有什么关系?... 报告的错误是致命错误:未捕获异常 'Exception',消息为 'FPDF 错误:某些数据已输出,无法发送 PDF 文件...等等...
这是因为当服务器运行脚本以输出 PDF 文档时,它将标题设置为 PDF 文档,但是有东西试图输出文本或 HTML 代码(例如异常或 echo 语句),因此服务器无法更改相应输出的标题。正在输出 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)
其他项目
- 简单单元测试 PHP 单元测试按预期进行。
- SimpleCharts.js
- Ajax 服务器响应处理器 简化 Ajax 调用的服务器响应
- 加密
- 重复图像查找器
- 经典 3D 拼图
捐赠
任何货币捐助都将受到赞赏 :-)
如果你是代表你所在的公司使用此软件,那么公司得到了钱,你得到了勋章,而我什么都没得到!这是公平的吗?
按下那个疯狂的星星按钮根本不需要花费任何代价!!
许可
这是一个免费且不受限制的软件,已发布到公有领域。
任何人都可以免费复制、修改、发布、使用、编译、出售或分发此软件,无论是源代码形式还是编译的二进制形式,用于任何目的,无论是商业目的还是非商业目的,以及任何手段。
在承认版权法的司法管辖区,本软件的作者或作者将软件的任何和所有版权利益捐赠给公有领域。我们做出这一捐赠是为了公众利益,并损害我们的继承人或继任者的利益。我们有意使这一捐赠成为永久放弃在版权法下对软件的现有和未来权利的公开行为。
本软件按“原样”提供,不提供任何形式的保证,无论是明示的、默示的,包括但不限于适销性、特定目的适用性和非侵权性保证。在任何情况下,作者不对任何索赔、损害或其他责任负责,无论源于合同行为、侵权行为或其他,均与软件或软件的使用或其他相关事宜有关。
如需更多信息,请参阅 http://unlicense.org/