TCPDF を使用して、宛名ラベル用の Avery テンプレートに適合するクリーンで機能的な 3 列のレイアウトを作成することに成功しましたが、問題が 1 つだけあり、以下で私が抱えている唯一の問題について説明します。
これらのラベルはシートごとに 30 個あり、USPS Intelligent Mail バーコードも追加できるようになりました (これは、TCPDF に組み込まれた機能であり、例 27 で示されています)。
ここに私の問題があります: 各ページの最後のレコード (レコード 30) のバーコードは、次のページに挿入することを主張しています。
目立たせるために、このバーコードを黄色で強調表示しました。バーコードは単純に X と Y 座標で配置されていますが、この最後のレコード (30) では配置が関係ないようです。レコード 30 で Y が設定されている値は、次のページに保持されます。負の値を入力して前のページに押し戻そうとしましたが、これを行うと消えます。
このバーコードを正しい位置に配置するにはどうすればよいですか?
ここに私が持っているものがあります:
バーコード以外のすべてが 1 つのフィールドとして一緒に書き込まれます (バーコードをレンダリングし、それらをアドレスと一緒に書き込む方法が見つからなかったので、X & Y の配置しかできませんでした)。
完全な住所フィールド:
- (これは、1 つに書き換えられた約 8 つの異なるフィールドの組み合わせです)。
- ページに相対
- 高さ 1 インチ
出力前の PHP コード:
<?php
$this->record++;
$initr=$this->record;
//set top margin
$topmargin=.75; //.75 bumping up the top margin moved the Full Address down and was how I gave the barcode room on the label
// change this number to the number of items per page
$r=($initr % 30);
if ($r==0) {
//also change this to items per page
$r=30;
}
//column 1
if (($r % 3) == 1) {
$x=.25;
$y=((floor($r/3)+1)*$h)-($h-$topmargin);
}
//column 2
if (($r % 3) == 2) {
$x=3;
$y=((floor($r/3)+1)*$h)-($h-$topmargin);
}
//column 3
if (($r % 3) == 0) {
$x=5.75;
$y=((floor($r/3)+1)*$h)-((2*$h)-$topmargin);
}
?>
出力後の PHP コード:
<?php
//change this to number of items per page
if ($r == 30) {
$this->AddPage();
}
?>
バーコード フィールド:
- バーコードを実行するために、「郵便番号」フィールドに追加しました。これは、TCPDF がバーコード計算のハイフンの後にそれを要求するためです。注: 「str_replace」関数を使用して、郵便番号のハイフンを削除する必要がありました。XとYで適切に配置するために、レコードごとにこれを行いました.
- ページに相対
- 何でも高さ(それを見せるためだけに)
- 出力前の PHP コード: http://pastebin.com/AGyY2M1i
私はこれらのバーコードに取り組んできましたが、この小さな問題を理解できません。
アップデート
これは、これらのフィールドが配置された方法です...
しかし、それらを切り替えただけで、問題は解決しやすくなりました。
現在問題のある唯一のレコードは LAST レコードのようです。運が悪かったので、ここで少し検索しましたが、最後のレコードをターゲットにする方法はありますか?
問題が発生している理由は、すべての「elseif」ステートメントの後の「else」ステートメントが原因です。ただし、その「else」ステートメントを取り除いて、残りのような「elseif」ステートメントに変えると、elseif ($r == 30) のようになります。各ページの 30 番目のバーコードが消えます (最後のレコードのバーコードも消えます)。 .
最後のレコードをターゲットにできるようにする必要があると思いますか?