11

多次元配列とその値に問題があります。

私が探しているのは、私のクエリから、配列内の教師の名前を検索しています。その後、dompdfを使用してPDFを作成したいと思います。問題はループにあります。希望どおりに機能する適切なループを作成できません。私のサンプルクエリは

    $q11 = "select id from teachers order by teacher ";
    $r11 = mysql_query($q11) or die(mysql_error());
    while($rows11 = mysql_fetch_array($r11)){
        $teacher = $rows11['id'];
        $dompdf->"It will start working";
    }

今私は知っています、このコードは紛らわしいです、しかし私が欲しいのは、それは一つの単一のpdfファイルですべての教師のためにdompdfを作成するべきです。クエリと同様に、教師を取得し、教師ごとにdompdfページを作成する必要があります。現在、私のクエリが検索した最後の値に従って、1ページだけを作成しています。

助けてください。ちょっと緊急です。

4

2 に答える 2

26

あなたのループは正常に動作しています。PDF にページを追加する方法が間違っている可能性があります。どうやら、新しいページを添付する代わりに、1 つのページを何度も上書きしているようです。

編集

私はdompdfを使用したことがありません。ドキュメントをざっと見てみると、HTML マークアップのようなものを作成し、それを PDF に変換していると思いますが、これは正しいですか?

サンプルコード

$html = <<<HTML
  <html>
      <head>
            <style type="text/css">
                /* Your document styling goes here */
            </style>
      </head>
      <body>
HTML;

while ( $row = $dbResult->fetch_assoc() ) {
    $html .= '<div class="teacherPage">'
                 . $row['name'] // your teacher document goes here
             '</div>';
}

$html .= '</body></html>';

$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream("sample.pdf");

変わった構文について疑問に思うなら$var = <<<HTML \r\nHTML、それはヒアドキュメントです。エイリアンのインラインコードがたくさんある場合は、ヒアドキュメントを使用する方が快適です。これには変数を含めることができ、{$varname}引用符について心配する必要はありません。確認する必要があるのは、ヒアドキュメントHTMLのクローザーが新しい行にあり、インデントされていないことだけです。

EDIT2

どのライブラリを使用しているのか、まだよくわかりません。あなたが質問で言ったように、この拡張機能はかなり見栄えがよく、dompdfと呼ばれています。

あなたの最新のコメントは、これまでのところ問題を解決していないことを示しているため、目標を達成するためにさらに情報を追加することにしました。

免責事項: 私は機能的なコードを書くつもりはなく、これをテストするつもりもありませんが、次のヒントは、作業を完了するための正しい方向にあなたを後押しします.

dompdf は、入力ドキュメントの CSS2 および CSS3 プロパティを読み取ることができます。

上記のループの各サイクルは、while1 人の教師を表し、それぞれの教師が出力ドキュメントで独自のページを取得します。

クラスを使用してページを div コンテナーに入れましたteacherPage。このコンテナに、教師用に表示したいすべての情報を入力できます。

あとは、 dompdf にそれぞれteacherPageが新しいページであることを伝えるだけです。これは、CSS3 に同梱さ@pageれているマークアップを使用して行うことができます

上記のサンプル ドキュメントに空の css コンテナーを追加しました<style type="text/css"></style>。ページのスタイル設定はそこに移動する必要があります。

サンプルCSS

@page teacher {
  size: A4 portrait;
  margin: 2cm;
}

.teacherPage {
   page: teacher;
   page-break-after: always;
}

を使用すると、ページ コンテナー全体に有効なプロパティを持つ@page名前付きの page を定義できます。teacher

page-break-after: always各コンテナの後に新しいページを開始します

これが役立つことを願って、楽しんでみてください:)

于 2012-12-30T10:27:46.050 に答える
13

どうやら、オーバーフローの問題はなく、結果はシートの許容マージンを超えています。あなたができることは、別のテーブルの親からデータを分離し、それらの間に入れることです:

<div style="page-break-before: always;"></div>
于 2014-07-11T18:12:46.923 に答える