web-dev-qa-db-ja.com

dompdfで複数のページを作成する方法

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

私が探しているのは、私のクエリから、配列内の教師の名前を検索しています。その後、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ページだけを作成しています。

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

11
I Perfect

ループは正常に機能しています。 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プロパティを読み取ることができます。

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

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

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

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

CSSの例

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

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

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

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

これがお役に立てば幸いです、楽しんでみてください:)

25
Michel Feldheim

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

<div style="page-break-before: always;"></div>
12
Walter Caraza