2016-09-20 5 views
-1

私はアプリケーションをSymfony2.7で作成しています。レポートの作成を開始したいのですが、数日間読んでいて解決策を見つけることができません。 Iveはps pdfbundleを試しましたが、レポートを生成できません。より多くのドキュメントを見つける。 $ idは購入注文のIDですSymfony2でレポートを作成するにはどうすればよいですか?

public function formatoOcAction($id) 

{ 
    $facade = $this->get('ps_pdf.facade'); 

    $response = new Response(); 

    $em = $this->getDoctrine()->getManager(); 

    $InOc = $em->getRepository('NivalInventarioBundle:InOrdenCompra')->findById($id); 

    $InOcDet = $em->getRepository('NivalInventarioBundle:InOrdenCompraDetalle')->findBy(array(
     'idOrdenCompra' => $id)); 

    $stylesheetXml = $this->renderView('NivalInventarioBundle:InOrdenCompra:ordencompra.xml.twig', array()); 


    $this->render('NivalInventarioBundle:InOrdenCompra:ordencompra.pdf.twig', array(
     "entities1" => $InOc, 
     "entities2" => $InOcDet, 
     "id" => $id), 
     $response); 

    $xml = $response->getContent(); 

    $content = $facade->render($xml, $stylesheetXml); 

    $filename = $this->getParameter('upload_directory').'orden_compra_'.$id.'.pdf'; 

    file_put_contents($filename, $content); 

    return new Response($content, 200, array('content-type' => 'application/pdf')); 
} 

マイコードを助けてください。

これはXMLファイルをPDFにしますが、sylesheetは表示しません。

これは小枝です:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE pdf SYSTEM "%resources%/dtd/doctype.dtd"> 
{% set empresa = app.session.get('empresa') %} 

<pdf> 
    <page> 
<div> 
    <div> 
     <table> 
      <tr> 
       <td> 
        <h3>{{ empresa }}</h3> 
       </td> 
       <td id="s1"> 
        <h2>Número: <b>{{ id }}</b></h2> 
       </td> 
      </tr> 
      <tr> 
       <td></td> 
       <td> 
        <h3>Orden de compra</h3> 
       </td> 
      </tr> 
      <tr> 
       <td></td> 
       <td> 
        Departamento de Finanzas 
       </td> 
      </tr> 
     </table> 
    </div> 
    <div> 
     {% for entity1 in entities1 %} 
      Fecha: {{ entity1.fecha|date('d-m-Y') }} 
     {% endfor %} 
    </div> 
</div> 
     <div> 
      <div> 
       <table width="100%"> 
        <tr> 
         <td width="60%">Producto</td> 
         <td width="20%">Unidad</td> 
         <td>Cantidad</td> 
         <td>Precio</td> 
         <td>Total</td> 
        </tr> 
         {% set gran_total = 0 %} 
        {% for entity2 in entities2 %} 
         <tr> 
          <td>{{ entity2.productoOc.nombre }}</td> 
          <td>{{ entity2.productoOc.unidadMedida.nombre }}</td> 
          <td class="text-right">{{ entity2.cantidad }}</td> 
          <td class="text-right">{{ entity2.precioCompra }}</td> 
          <td class="text-right">{{ entity2.total }}</td> 
         </tr> 
         {% set gran_total = gran_total + entity2.total %} 
        {% endfor %} 
        <tr> 
         <td></td><td></td><td></td><td></td> 
         <td class="text-right" >{{ gran_total|number_format(2) }}</td> 
        </tr> 
       </table> 
      </div> 
     </div> 

    </page> 
</pdf> 
+0

より理解することが難しいです。日付範囲フィルタを適用して、列の賢明さや枝分かれの範囲内にあるデータのみを使用してレポートを生成し、異なる種類のグラフを使用してデータとデータを図で表現しますか?レポートを絵のように表現するには、[Flot Js](http://www.flotcharts.org/)、[D3 Js](https://d3js.org/)などのオープンソースライブラリを使用してください。 、[Chartist Js](https://gionkunz.github.io/chartist-js/) –

答えて

1

はたぶん、小枝のテンプレートを含む、あなたは多くのソースからPDFファイルを生成することができKnpSnappyBundleを見て:http://knpbundles.com/KnpLabs/KnpSnappyBundle

+0

このバンドルはうまくいきます。時には、必要なサーバーバイナリを構成するのに時間がかかることもありますが、それは合理的です。 – Carlos

1

あなたの中から選択するには、少なくとも2つのオプションがあります。あなたが作成するすべての作業を行う必要があるだろうHTMLコンテンツから、しかし、あなたのレポートコントローラにシリルHejl

  • PDFの作成者が述べたように

    1. Github KnpLabs/snappy:私はで動作するように最も簡単なのが見つかりました:小枝テンプレートから

      • ヘッダHTML
      • 小枝テンプレート
      • からフッタHTML小枝テンプレートから
      • 表紙ページのHTML
      • 小枝テンプレートから
      • のTOC XML
      • 小枝テンプレート
      • から
      • ベース文書のHTMLオブジェクトへのすべての言及のHTMLドキュメントを追加する$ PDF =の$ this - > GET( 'knp_snappy.pdf') ;
      • PROS: 小枝のHTMLで動作するように簡単
        • 関係を持つエンティティオブジェクトは(長い文書上)小枝に供給された場合は、noメモリ排気
      • CONS:
        • 持っています結合された各ページ(カバー、toc、ヘッダー、フッター、ベース文書)のTwigテンプレートからhtmlファイルを提供する
        • right wkhtmで修正する必要がありますバイナリバージョンltopdf
  • Github mbence/OpenTBSBundle

    • これは、テンプレートの合併です。レポートコントローラでは、オフィステンプレートとすべての変数を指定する必要があります。これらの変数は、たとえばTBSで置き換えられます。ワードテンプレート:
      • それがサポートするOpenOfficeやMSOfficeのテンプレート
      • PROS:
        • 顧客用品テンプレートは、あなただけ(顧客が文書のデザインの世話をする)変数で動的なコンテンツを置き換える
      • CONS :
        • PHPスクリプトはすべての入力変数または配列を保持しているのでメモリ内にある。
        • 詳しく説明してください小枝のHTML(長い学習曲線)あなたは、あなたのレポートを生成するどのような形式で
  • 関連する問題