🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2804閲覧

TCPDFでwhile文を使い、レイアウトをきれいに表示させたい

zlk1985

総合スコア5

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2020/12/23 10:02

前提・実現したいこと

TCPDFでPDF出力を実装しています。
データベースからの各値を座標を指定して、Text()を使い出力しています。
while文で回しているので、全データがバランスよく配置されずに文字同士が重なったりと困っています。
繰り返し文でPDF出力させる場合、どのような書き方をすれば、文字が被らないのでしょうか。

発生している問題・エラーメッセージ

エラーメッセージなどではなく、PDF画面で文字が重なり合います。

該当のソースコード

php

1<?php 2ini_set('display_errors', "On"); 3date_default_timezone_set('Asia/Tokyo'); 4 5include( 'set.inc' ); 6//PDFライブラリの読み込み 7require_once('tcpdf/tcpdf.php'); 8session_cache_limiter('none'); 9 10$sql = "SET NAMES utf8"; 11mysql_query($sql); 12 13 14// $user_id = $_GET['user_id']; 15// $to_user_id = $_GET['to_user_id']; 16// $page = $_GET['page']; 17$sql = $_GET['sql']; 18 19 20 21//echo $sql; 22 23$result = mysql_query($sql); 24 25//tcPDFの設定用定数 26$orientation = 'Landscape'; // 用紙の向き 27$unit = 'mm'; // 単位 28$format = 'A4'; // 用紙フォーマット 29$unicode = true; // ドキュメントテキストがUnicodeの場合にTRUEとする 30$encoding = 'UTF-8'; // 文字コード 31$diskcache = false; // ディスクキャッシュを使うかどうか 32$tcpdf = new TCPDF($orientation,$unit,$format,$unicode,$encoding,$diskcache); 33$tcpdf->setPrintHeader( false ); //ヘッダーの横線をなくす 34$tcpdf->AddPage(); 35 36// $font = new TCPDF_FONTS(); 37// $myFont = $font->addTTFfont("nishiweb/public_html/tcpdf/font/font_1_honokamin.ttf"); 38$tcpdf->SetFont('kozminproregular', "", 10); 39//座標設定 40$x_zip = 20; //横(郵便番号) 41$y_zip = 1; //縦(郵便番号) 42 43$x_sample = 50; //横(サンプル) 44$y_sample = 1; //縦(サンプル) 45 46$x_addr = 20; //横(住所) 47$y_addr = 8; //縦(住所) 48 49$x_banchi = 20; //横(番地) 50$y_banchi = 10; //縦(番地) 51 52$x_userid = 20; //横(ユーザーID) 53$y_userid = 12; //縦(ユーザーID) 54 55$x_name = 30; //横(ユーザー) 56$y_name = 15; //縦(ユーザー) 57 58 59//出力cellの値設定 60$w = 100; //領域幅 61$h = 30; //領域高さ 62 63 64$counter = 0; 65 66while( $row = mysql_fetch_array($result) ) { 67 $user_id = $row['user_id']; 68 $name = $row['name']; 69 $zip = $row['zip']; 70 $addr = $row['addr']; 71 $banchi = $row['banchi']; 72 $room = $row['room']; 73 $tel = $row['tel']; 74 75 $zip1 = substr($zip, 0, 3); 76 $zip2 = substr($zip, -4); 77 $zip = $zip1."-".$zip2; 78 79 // $y_zip *= 10; 80 // $y_sample *=10; 81 // $y_addr *= 2.2; 82 // $y_banchi += 2; 83 // $y_userid += 2; 84 // $y_name += 2; 85 86 87 $tcpdf->SetFont('kozminproregular', '', 11); 88 $tcpdf->Text($x_zip, $y_zip, '〒'.$zip); 89 90 $tcpdf->SetFont('kozminproregular', '', 11); 91 $tcpdf->Text($x_sample, $y_sample, 'サンプル在中'); 92 93 $tcpdf->SetFont('kozminproregular', '', 11); 94 $tcpdf->Text($x_addr, $y_addr, $addr); 95 96 $tcpdf->SetFont('kozminproregular', '', 11); 97 $tcpdf->Text($x_banchi, $y_banchi, $banchi); 98 99 $tcpdf->SetFont('kozminproregular', '', 11); 100 $tcpdf->Text($x_userid, $y_userid, $user_id); 101 102 $tcpdf->SetFont('kozminproregular', '', 11); 103 $tcpdf->Text($x_name, $y_name, $name.'様'); 104 105 106} 107ob_end_clean(); 108$tcpdf->Output("print_saple_old.pdf", "I"); // pdf表示設定 109?> 110 111 112

試したこと

コードにコメントアウトしていますが、座標に数字を足すあるいは掛けて、出力場所をずれるようにしました。
それでも文字同士がかぶります。
元々は$htmlに出力箇所を代入していましたが、TCPDFはサポートしていないhtmlタグやcssがあり、理想の出力画面にならなかったので、座標を指定する方法に変更しました。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

繰り返し処理でy座標に均等に値を足していくことで解決しました。

投稿2020/12/24 06:39

zlk1985

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問