- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我使用 TCPDF 来输出一个 html 表格,在我的例子中这个不是我必须修改的唯一一个,所以我需要一些规则来呈现我的页面。到目前为止,TCPDF 在我看来是一个功能强大的库,所以我希望不要尝试另一个库。
我的问题是我需要将表头添加到表将出现的每个新页面,但我还有其他信息要写入此 pdf,不能有表头所以我不能使用重写tcpdf 中的 header 方法。
<table border="0" cellspacing="0" cellpadding="0" align="center" width="100%" ><tr><td><table border="0" cellspacing="0" cellpadding="3" align="left" width="100%" ><tr><td class="TableHeader" width="5%" style="padding: 5px; border-top: 1px solid #000000; border-left: 1px solid #000000; border-bottom: 1px solid #E4E9EC;" >Nr.</td><td class="TableHeader" width="40%" style=" padding: 5px; border-top: 1px solid #000000; border-bottom: 1px solid #E4E9EC;" >Denumire</td><td class="TableHeader" width="20%" align="left" style=" padding: 5px; border-top: 1px solid #000000; border-bottom: 1px solid #E4E9EC;" >Cod</td><td class="TableHeader" width="10%" align="center" style=" padding: 5px; border-top: 1px solid #000000; border-bottom: 1px solid #E4E9EC;" >Cant.</td><td class="TableHeaderLast" align="right" width="13%" style=" padding: 5px; border-top: 1px solid #000000; border-bottom: 1px solid #E4E9EC;" >Pret unitar<br />fara TVA (RON)</td><td class="TableHeaderLast" align="right" width="13%" style=" padding: 5px; border-bottom: 1px solid #E4E9EC; border-top: 1px solid #000000; border-right: 1px solid #000000;" >Pret total<br />fara TVA (RON)</td></tr></table></td></tr></table><table border="0" cellspacing="0" cellpadding="0" align="center" width="100%" id="Container"><tr><td><table border="0" cellspacing="0" cellpadding="3" align="left" width="100%" ><tr><td class="TableHeader" width="5%" style="padding: 5px; border-left: 1px solid #000000;" > </td><td class="TableHeader" width="40%" style=" padding: 5px;" > </td><td class="TableHeader" width="20%" style=" padding: 5px;" > </td><td class="TableHeader" width="10%" style=" padding: 5px;" > </td><td class="TableHeaderLast" align="right" width="13%" style=" padding: 5px;" > </td><td class="TableHeaderLast" align="right" width="13%" style=" padding: 5px; border-right: 1px solid #000000;" > </td></tr><tr style="border-bottom: 1px solid #ccc"><td class="TableRow" style="padding: 5px; border-bottom: 1px solid #E4E9EC; border-left: 1px solid #000000; ">1</td><td class="TableRow" style="padding: 5px; border-bottom: 1px solid #E4E9EC;"><b>sectiune1</b></td><td class="TableRow" colspan="5" style="padding: 5px; border-bottom: 1px solid #E4E9EC; border-right: 1px solid #000000;"> </td></tr><tr style="border-bottom: 1px solid #ccc"><td class="TableRow" style="padding: 5px; border-left: 1px solid #000000;border-bottom: 1px solid #E4E9EC; ">1.1</td><td class="TableRow" style="padding: 5px;border-bottom: 1px solid #E4E9EC; ">UNI-Cazan mixt AIREX 25 2S BICOMB MODUL </td><td class="TableRow" align="left" style="padding: 5px;border-bottom: 1px solid #E4E9EC; ">94456 </td><td class="TableRow" align="center" style="padding: 5px;border-bottom: 1px solid #E4E9EC;">99999</td><td class="TableRow" align="right" style="padding: 5px;border-bottom: 1px solid #E4E9EC; ">24.623,00</td><td class="TableRow" align="right" style="padding: 5px; border-right: 1px solid #000000;border-bottom: 1px solid #E4E9EC;">2.462.275.377,00</td></tr><tr style="border-bottom: 1px solid #ccc"><td class="TableRow" style="padding: 5px; border-left: 1px solid #000000;border-bottom: 1px solid #E4E9EC; ">1.2</td><td class="TableRow" style="padding: 5px;border-bottom: 1px solid #E4E9EC; ">UNI-Cazan mixt AIREX 25 2S BICOMB MODUL </td><td class="TableRow" align="left" style="padding: 5px;border-bottom: 1px solid #E4E9EC; ">94456 </td><td class="TableRow" align="center" style="padding: 5px;border-bottom: 1px solid #E4E9EC;">99999</td><td class="TableRow" align="right" style="padding: 5px;border-bottom: 1px solid #E4E9EC; ">24.623,00</td><td class="TableRow" align="right" style="padding: 5px; border-right: 1px solid #000000;border-bottom: 1px solid #E4E9EC;">2.462.275.377,00</td></tr><tr style="border-bottom: 1px solid #ccc"><td class="TableRow" style="padding: 5px; border-bottom: 1px solid #000; border-left: 1px solid #000000; "> </td><td class="TableRow" width="40%" style="padding: 5px; border-bottom: 1px solid #000; "><b> TOTAL sectiune1:</b></td><td class="TableRow" style="padding: 5px; border-bottom: 1px solid #000; "> </td><td class="TableRow" style="padding: 5px; border-bottom: 1px solid #000; "> </td><td class="TableRowLast" colspan="2" align="right" style="padding: 5px; border-bottom: 1px solid #000; border-right: 1px solid #000000; "><b>4.924.550.754,00</b></td></tr><tr style="border-bottom: 1px solid #ccc"><td class="TableRow" style="padding: 5px; border-top: 1px solid #000; border-bottom: 1px solid #000; "> </td><td class="TableRow" style="padding: 5px; border-top: 1px solid #000; border-bottom: 1px solid #000;"> </td><td class="TableRow" colspan="5" style="padding: 5px; border-top: 1px solid #000; border-bottom: 1px solid #000; "> </td></tr><tr style="border-bottom: 1px solid #ccc"><td class="TableRow" style="padding: 5px; border-top: 1px solid #000; border-bottom: 1px solid #E4E9EC; border-left: 1px solid #000000; ">2</td><td class="TableRow" style="padding: 5px; border-bottom: 1px solid #E4E9EC; border-top: 1px solid #000;"><b>sectiune2</b></td><td class="TableRow" colspan="5" style="padding: 5px; border-bottom: 1px solid #E4E9EC; border-right: 1px solid #000000; border-top: 1px solid #000;"> </td></tr><tr style="border-bottom: 1px solid #ccc"><td class="TableRow" style="padding: 5px; border-left: 1px solid #000000;border-bottom: 1px solid #E4E9EC; ">2.1</td><td class="TableRow" style="padding: 5px;border-bottom: 1px solid #E4E9EC; ">ICI-Cazan condensatie MONOLITE 75-JB</td><td class="TableRow" align="left" style="padding: 5px;border-bottom: 1px solid #E4E9EC; ">81020076 </td><td class="TableRow" align="center" style="padding: 5px;border-bottom: 1px solid #E4E9EC;">99999</td><td class="TableRow" align="right" style="padding: 5px;border-bottom: 1px solid #E4E9EC; ">34.719,00</td><td class="TableRow" align="right" style="padding: 5px; border-right: 1px solid #000000;border-bottom: 1px solid #E4E9EC;">3.471.865.281,00</td></tr><tr style="border-bottom: 1px solid #ccc"><td class="TableRow" style="padding: 5px; border-bottom: 1px solid #000; border-left: 1px solid #000000; "> </td><td class="TableRow" width="40%" style="padding: 5px; border-bottom: 1px solid #000; "><b> TOTAL sectiune2:</b></td><td class="TableRow" style="padding: 5px; border-bottom: 1px solid #000; "> </td><td class="TableRow" style="padding: 5px; border-bottom: 1px solid #000; "> </td><td class="TableRowLast" colspan="2" align="right" style="padding: 5px; border-bottom: 1px solid #000; border-right: 1px solid #000000; "><b>3.471.865.281,00</b></td></tr><tr style="border-bottom: 1px solid #ccc"><td class="TableRow" style="padding: 5px; border-top: 1px solid #000; border-bottom: 1px solid #000; "> </td><td class="TableRow" style="padding: 5px; border-top: 1px solid #000; border-bottom: 1px solid #000;"> </td><td class="TableRow" colspan="5" style="padding: 5px; border-top: 1px solid #000; border-bottom: 1px solid #000; "> </td></tr><tr><td class="TableTotal" style=" padding: 5px; border-left: 1px solid #000000;"></td><td colspan="3" class="TableTotal" style=" padding: 5px; " ><b>Total sectiune1:</b></td><td align="right" class="TableTotal" style=" padding: 5px; " ><b> </b></td><td class="TableTotal" align="right" style=" padding: 5px; border-right: 1px solid #000000;" ><b>4.924.550.754,00 </b></td></tr><tr><td class="TableTotal" style=" padding: 5px; border-left: 1px solid #000000;"></td><td colspan="3" class="TableTotal" style=" padding: 5px; " ><b>Total sectiune2:</b></td><td align="right" class="TableTotal" style=" padding: 5px; " ><b> </b></td><td class="TableTotal" align="right" style=" padding: 5px; border-right: 1px solid #000000;" ><b>3.471.865.281,00 </b></td></tr><tr><td class="TableTotal" style=" padding: 5px; border-left: 1px solid #000000;border-top: 1px solid #E4E9EC; "></td><td colspan="4" class="TableTotal" style=" padding: 5px;border-top: 1px solid #E4E9EC; " ><b>Total oferta (RON):</b></td><td colspan="2" align="right" class="TableTotal" style=" padding: 5px; border-right: 1px solid #000000;border-top: 1px solid #E4E9EC; " ><b>8.396.416.035,00 </b></td></tr><tr><td class="TableTotal" style=" padding: 5px; border-left: 1px solid #000000;border-bottom: 1px solid #000000;"></td><td colspan="4" class="TableTotal" style=" padding: 5px;border-bottom: 1px solid #000000;" ><b>Total oferta (RON cu TVA inclus):</b></td><td colspan="2" align="right" class="TableTotal" style=" padding: 5px; border-right: 1px solid #000000;border-bottom: 1px solid #000000;" ><b>10.411.555.883,40 </b></td></tr></table></td></tr></table>
我想到了以下解决方案:如果我能以某种方式将此 html 拆分为行并逐行写入 pdf,这样我就可以在覆盖页脚然后添加新页面时回滚,但是有一个主要问题问题,我收到各种警告,因为 html 表格标签没有关闭。这是我的代码:
$pdf->setAutoPageBreak(false);
$pdf->startTransaction();
$html = new simple_html_dom();
$html->load($data);
$single = $html->find('#Container', 0);
if($single){
$rows = $single->getElementsByTagName('tr');
$rows = $rows[0]->getElementsByTagName('tr');
if($rows)
for($i=1;$i<(count($rows)-1);$i++){
$pdf->writeHTMLCell($w=0, $h=0, $x='', $y='', '<table>', $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=false);
$pdf->writeHTMLCell($w=0, $h=0, $x='', $y='', $rows[$i]->outertext, $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=false);
$pdf->writeHTMLCell($w=0, $h=0, $x='', $y='', '</table>', $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=false);
if ($pdf->getY() > $pdf->getPageHeight() - 30) {
$pdf->rollbackTransaction(true);
$pdf->AddPage();
$pdf->writeHTMLCell($w=0, $h=0, $x='', $y='', '<table>', $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=false);
$pdf->writeHTMLCell($w=0, $h=0, $x='', $y='', $rows[$i]->outertext, $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=false);
$pdf->writeHTMLCell($w=0, $h=0, $x='', $y='', '</table>', $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=false);
}
}
}
$pdf->commitTransaction();
$pdf->setAutoPageBreak(true, 30);
我快速浏览了这两篇文章,也许有人会觉得这很方便: Some paging with multicell和 Another paging with multicell 。我发现这 2 个值得作为解决方案逻辑的示例,但与 tcpdf 一起使用的方法在我看来有点奇怪。
最佳答案
我认为您的解决方案很好。我能想到的唯一其他方法是使用固定宽度的多单元格,这可能会很痛苦,但会为您提供静态列宽。
不过我注意到了一些问题:
试试这些改变,让我知道结果如何
$pdf->setAutoPageBreak(false);
//$pdf->startTransaction(); // Moved
$html = new simple_html_dom();
$html->load($data);
$single = $html->find('#Container', 0);
if($single){
$rows = $single->getElementsByTagName('tr');
$rows = $rows[0]->getElementsByTagName('tr');
if($rows) {
$pdf->startTransaction(); // Start transaction only because we may need it
// Header for html, this starts the html and can optionally insert the header row as the first row on every new page.
$html_header = '<tr><td>Name</td><td>Age</td></tr>';
$html_buffer = '<table>'.$html_header;
for($i=1;$i<(count($rows)-1);$i++){
$pdf->writeHTMLCell($w=0, $h=0, $x='', $y='', $html_buffer.$rows[$i]->outertext.'</table>', $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=false);
if ($pdf->getY() < ($pdf->getPageHeight() - 30)) { // Note the less-than operator
// We might be able to add some more text, so undo that
$pdf->rollbackTransaction(true);
// And store the html
$html_buffer .= $rows[$i]->outertext;
}else{
// We exceeded our limit
$pdf->rollbackTransaction(true);
// Write last known good table
$pdf->writeHTMLCell($w=0, $h=0, $x='', $y='', $html_buffer.'</table>', $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=false);
// Add a new page
$pdf->AddPage();
// End this transaction
$pdf->commitTransaction();
// Start a new transaction
$pdf->startTransaction();
// Reset html buffer
$html_buffer = '<table>'.$html_header;
// Add line we couldn't fit on last page to html buffer
$html_buffer .= $rows[$i]->outertext;
}
}
// There is still information in our buffer and it fits on a single page
$pdf->writeHTMLCell($w=0, $h=0, $x='', $y='', $html_buffer.'</table>', $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=false);
// Final commit
$pdf->commitTransaction();
}
}
$pdf->setAutoPageBreak(true, 30);
这将页面上的所有内容都包装在一个表格 block 中,因此列将在该页面上对齐。 (但是,它们可能仍因页面而异)此外,我还为您提供了将自己的标题添加到每个新页面的能力,就像您想要的那样。只需将 $html_header 更改为您自己的标题行代码即可。
当您说 TCPDF 可能令人困惑时,您是对的,但它也非常强大,一旦掌握了它,您就可以制作一些非常好的文档。
关于php - TCPDF 在多个页面上拆分 html 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11221174/
我相信 TCPDF 中没有本地方法来创建阴影。我有什么想法可以用其他方法创造这样的效果吗?我首先考虑在每个边缘(对于矩形)旁边创建一个小渐变,但发现没有办法创建具有不同 Alpha channel 的
我已经通读了之前关于该主题的主题,但都是陈旧的、未回答的和/或关于创建自定义字体的更具体的内容。 在 TCPDF 中: $pdf->SetFont('times', '', 10); 我创建的 pdf
在 TCPDF 中有 GetCellHeight()用于测量细胞的高度。 如何测量 TCPDF 中字符串(或字符串块)的长度或宽度? 最佳答案 获取字符串长度的方法是 GetStringWidth()
我正在设置 tcpdf 来为客户即时生成发票,但是当我添加图像时,边框从我的表格中消失了。这是代码: /* if ($status == "Paid") { $pdf->Image("/wp-
我正在使用 TCPDF 生成 pdf。我可以使用 SetMargins($left, $top, $right = -1, $keepmargins = false) 为左、上和右设置边距,但不能为底
我正在使用 TCPDF 生成 pdf。我可以使用 SetMargins($left, $top, $right = -1, $keepmargins = false) 为左、上和右设置边距,但不能为底
从版本 5.9 开始,我还没有找到控制 TCPDF 的 MultiCell 中行距的方法。我也没有找到任何有助于通过使用 Cell 来模拟相同行为的方法,例如返回不适合 Cell 宽度的文本部分的方法
我正在努力了解 header 函数在 tcpdf 中的工作方式。 是否可以将 $pdf->writeHTML 用于标题? http://www.tcpdf.org/examples/example_0
为了创建自定义页眉和页脚,我使用了 TCPDF 的 header()和 footer()函数,但是当我尝试使用函数 $this->image() 在标题中包含图像时, 无法显示图像。文档中的其他图像工
我正在使用 tcpdf 用 PHP 生成 PDF 文件,并且以 .svg 文件的形式嵌入 SVG 图像没有问题,其中包含表示图像的 XML 标记。但是,我希望能够使用该 XML,例如作为 PHP 字符
关于此的主题有很多,但没有一个能解决我的问题。我想做的很简单 - 生成一个条形图,然后将该图嵌入到一个 pdf 文件中,我将使用名为 TCPDF 的库生成该文件。 . 我使用 TCPDF 生成 HTM
第一张图片显示了使用 TCPDF 时的标准 header 布局: 我想做的是右对齐文本,如下所示,但我无法弄清楚如何做到这一点: 请大家给点建议!谢谢。 最佳答案 实现此目的的一种方法是使用 writ
我花了一个多小时研究这个问题,但似乎找不到答案。 我在 TCPDF 中使用 writeHTMLCell 。使用 writeHTMLCell 时,我需要一些文本以适合特定区域。 我见过一个例子here
我正在使用 TCPDF 从 HTML 代码生成 PDF,但无法正确呈现某些 HTML 特殊字符。这是我的准系统代码: require_once('../libraries/tcpdf_6_0_020/
我有以下 svg 文件: http://jsfiddle.net/wptn28c5/ 呈现: 但是,通过使用 tcpdf ($pdf->imageSVG()) 我得到一个呈现的 pdf 文件: 最佳
如何导入现有 pdf文件到新创建的 pdf使用 TCPDF? 所以假设我目前正在做发票部分。一旦用户点击打印发票,我将开始收集数据,然后创建一个 PDF使用 TCPDF .但是,如果可用,我需要“附加
我有以下 tcpdf 代码: SetCreator(PDF_CREATOR); $pdf->SetAuthor('Stimart'); $pdf->SetTitle('test
有谁知道如何使用 PHP TCPDF 导出 PDF/X-1a:2001 PDF 文件图书馆。我研究了很多,但找不到解决方案。有人请指教。解决方案需要在 PHP 中。 最佳答案 我不是 TCPDF 方面
我有一个基于数据生成 PDF 文件的网站。 我在一个免费的虚拟主机上试过了,没问题,但是当我把它上传到我的服务器时,我得到了这个错误: TCPDF 错误:无法打开图像文件:/var/www/html/
我正在使用 TCPDF 来签署 PDF,但是在运行 example 52 时我收到此错误: Warning: openssl_pkcs7_sign() [function.openssl-pkcs7-
我是一名优秀的程序员,十分优秀!