大きな HTML テーブルを作成していますが、次の図に示すように改ページの問題が
あります。問題を自動的に解決する方法はありますか? またはそれを行う方法は何ですか?
8 に答える
<tr>
これをタグに追加してみてください: nobr="true"
.
簡単な例は次のようになります。
<table>
<tr nobr="true">
<td>Test</td>
<td>Test 2</td>
</tr>
</table>
これnobr="true"
により、テーブルの行がばらばらになるのを防ぎます。<td>
これをつけて<th>
タグを付けることもできます。
かなり古い質問であることは知っていますが、今日も同じ問題が発生しました。テーブルがページ間で分割され、FastTrack の回答の方法についてもう少し調査したところ、タグnobr="true"
にも属性を使用できることがわかりました。<table>
つまり、私にとってそのようなコードはこの問題を解決しました:
<table nobr="true">
<tr>
<td>Test</td>
<td>Test 2</td>
</tr>
</table>
警告 - このコードは、テーブルが 1 ページより小さい場合にのみ意味があります。
ヘッダーの重複についても同じ問題が発生しました。yevgenyソリューションを試しましたが、PDFジェネレーターコードにさらにいくつかのエディションが必要でした(FPDFで記述されたPDF出力がたくさんあり、TCPDFに移行するプロセスを最小限に抑えたい)ので、このより単純なソリューションを使用しました
class MYPDF extenfs TCPDF {
//your initialization code
function header(){
//your code here
//we change only the top margin and this executes for every header in every page, even the frst one
$this->SetTopMargin($this->GetY());
}
}
roney、どうもありがとう、ページ2、3のヘッダーとHTMLで生成されたオーバーラップを書く..これは私にとってはうまくいった:
class your_PDF extends TCPDF
{
var $top_margin = 20;
function Header() {
// set top margin to style pages 2, 3..
//title goes here
$this->top_margin = $this->GetY() + 5; // padding for second page
}
}
あなたのコードで
// set top margin to style pages 2, 3..
$pdf->SetMargins(15, $pdf->top_margin, 15);
不思議なことに、ここで説明した解決策は私にはうまくいきませんでした。まあ、それはある種のことをしましたが、タグ内のコンテンツは(必要に応じて)繰り返されますが、行スパンされた場合、上または下のセルのレイアウトの問題が発生します。私が実験したとき、それはただ悪化しました。
私の解決策は、エレガントではありませんが、AutoPageBreakをfalseに設定し、行インクリメントカウンターを上げて、行ごとにインクリメントし、特定の値を超えているかどうかを確認することでした。もしそうなら、私はテーブルを閉じ、addPage()と呼ばれるwriteHTML()を使用してから続行し、新しいテーブル、ヘッダー、その他すべてとして再構築しました。
私が言ったように、エレガントではありませんが、それはうまくいきました。これが誰かに役立つことを願っています...それはかなり明白な解決策ですが、実行は必ずしもそれほど明白ではありません。また、特定の状況に適したより良い方法があるかもしれませんが、そうでない場合は、試してみてください。:)
興味のある方は、次のようにするだけで、魅力的に機能します。
$pdf->SetMargins(0, 0, 0);
$pdf->SetHeaderMargin(0);
$pdf->SetFooterMargin(0);
私のために解決されたいくつかのCSS:
// Include the main TCPDF library (search for installation path).
require_once('tcpdf/tcpdf.php');
// create new PDF document
$pdf = new TCPDF('R', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Author');
$pdf->SetTitle('TCPDF HTML Table');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, html,table, example, test, guide');
// set default header data
$pdf->SetHeaderData('', '', ' HTML table', '');
// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
// set default monospaced font
//$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// set margins
$pdf->SetMargins(15, 15, 15);
$pdf->SetHeaderMargin(15);
$pdf->SetFooterMargin(15);
// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, 15);
// set image scale factor
//$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
// ---------------------------------------------------------
// set font
$pdf->SetFont('times', '', 10);
// add a page
$pdf->AddPage();
$start = 1;
$end = 254;
$step = 1;
$arr = range($start, $end, $step);
$table_header .= sprintf("<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>", 'IP', 'Computer', 'User', 'Fone');
foreach ($arr as $ar) {
$row[] = $ar;
}
foreach ($row as $r):
if (($r % 40) === 0):
$table_header;
endif;
$table .= sprintf("<tr>\n<td>%s</td>\n<td>%s</td>\n<td>%s</td>\n<td>%s</td>\n</tr>\n", $r, $r, $r, $r);
endforeach;
$now = date("d/m/Y");
$caption = "<caption>IP addresses <em>$now</em></caption>\n";
$n = "\n";
$tbl = <<<EOD
<style>
table{
font-family: serif;
font-size: 11pt;
}
table tr {
}
table tr td {
padding:3px;
border:#000000 solid 1px;
}
em {
font-size: 4pt;
}
tr { white-space:nowrap; }
</style>
<h1>{$caption}</h1>
{$table_begin}
{$table_header}
{$table}
</table>
EOD;
$pdf->writeHTML($tbl, true, false, false, false, '');
// reset pointer to the last page
//$pdf->lastPage();
// ---------------------------------------------------------
//Close and output PDF document
$pdf->Output('html_table.pdf', 'I');
//============================================================+
// END OF FILE
//============================================================+
やってみました
<table>
<thead>
<tr>
<td>
This is my header which appears on every page
</td>
</tr>
</thead>
<tr>
<td>
My Content
</td>
</tr>
</table>
私は smarty を使用しています。これにより、テーブルを手動で分割する可能性が高くなります (たとえば、境界線を使用している場合)。必要があれば、これも投稿します...