2016-08-24 20 views
0

各ページの上部にHTMLテーブルを繰り返し、私の請求書の中では、それはページの一番上にiTextsharp - 私はiTextsharpを使用して請求書を作成する予定

  1. テーブルある3つの部分から構成され(すべてのベンダーが含まれます情報)
  2. GridViewの購入(項目)のみ請求書の最後のページで
  3. 署名部分()

は、これまでのところ私は+ splitlate

Pdfptableを使用してGridViewの一部を完了します
 PdfPTable table = new PdfPTable(gv.Columns.Count); 
     table.AddCell(new PdfPCell(new Phrase(cellText, fontH1))); 
     ... 
     ... 
     //create PDF document 
     Document pdfDoc = new Document(PageSize.A4, -30, -30, 15f, 15f); 
     PdfWriter.GetInstance(pdfDoc, Response.OutputStream); 
     pdfDoc.Open(); 
     pdfDoc.Add(table); 
     pdfDoc.Close(); 
     Response.ContentType = "application/pdf"; 
     Response.AddHeader("content-disposition", "attachment;" + "filename=GridViewExport.pdf"); 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.Write(pdfDoc); 
     Response.End(); 

しかし、すべてのページに表を挿入する方法はわかりません。私はhtmlテーブルを使用する予定です。なぜなら、差分ベンダー、アドレッシング、表示/非表示、またはキャンセルされたイメージのように、制御する必要があるからです。助けてください。

答えて

1

あなたの質問は以前に尋ねられました。公式ドキュメントのHow to add HTML headers and footers to a page?を参照するか、StackOverflowのHow to add HTML headers and footers to a page?をご覧ください。

ローマはあなたのコードからNewPage()をトリガーしていると仮定しているので、ローマのSidorovによる答えは間違っています。それは常に真実ではありません。 Documentにテーブルを追加すると、そのテーブルは複数のページにまたがります。つまり、iTextはNewPage()関数を内部的にトリガします。

ページイベントを使用して、作成されたすべてのページにコンテンツを追加できます。 OnEndPage()イベントは、NewPage()アクションが実行される直前にトリガーされます。これは、現在のページに余分なコンテンツを追加するときです。 OnStartPage()イベントは、NewPage()アクションが実行された直後にトリガーされます。 OnStartPage()イベントでコンテンツを追加することは禁じられています。

public class HeaderFooter extends PdfPageEventHelper { 
    protected ElementList header; 
    protected ElementList footer; 
    public HeaderFooter() throws IOException { 
     header = XMLWorkerHelper.parseToElementList(HEADER, null); 
     footer = XMLWorkerHelper.parseToElementList(FOOTER, null); 
    } 
    @Override 
    public void onEndPage(PdfWriter writer, Document document) { 
     try { 
      ColumnText ct = new ColumnText(writer.getDirectContent()); 
      ct.setSimpleColumn(new Rectangle(36, 832, 559, 810)); 
      for (Element e : header) { 
       ct.addElement(e); 
      } 
      ct.go(); 
      ct.setSimpleColumn(new Rectangle(36, 10, 559, 32)); 
      for (Element e : footer) { 
       ct.addElement(e); 
      } 
      ct.go(); 
     } catch (DocumentException de) { 
      throw new ExceptionConverter(de); 
     } 
    } 
} 

あなたがC#にも簡単に移植することができます:これは、Javaのページイベントの実装の一例であるiTextSharp - Header and Footer for all pages

を参照してください。私はリテラルな質問に対する文字通りの答えだったので、この答えを使用しました。しかし、なぜヘッダー(またはフッター)をHTMLで定義しますか?それは理にかなっていないのですか?

PdfPTableを作成して、それをページイベントのすべてのページに追加してみませんか?これは質問の答えに説明されています公式文書のpage eventsセクションには他にも多くの例があります。

+0

お返事ありがとうございます。@Bruno Lowagie私はフォントのスタイル、画像、アドレス、電話などのような多くの情報で構成されているので、ヘッダーを行うためにHTMLを使用して考えています。私にとっては、htmlテーブルを使用せずに、ヘッダー内のすべての情報を整理することは非常に大きな課題です。または、ヘッダをデザインするためのチュートリアル/ソリューションがありましたか?お返事ありがとうございました – 120196

+0

XML Workerは、HTMLで定義したのとまったく同じ方法で*テーブルをレンダリングするとは思わないでしょう。あなたはiTextSharp 5を使用しているようです。その場合は、「iText in Action - Second Edition」を読むことができます。ただし、最新のバージョンはiText 7で、iText 7の使い方については、[iText 7:ビルディングブロック](http://developers.itextpdf.com/content/itext-7-building-blocks/)を参照してください。 iText5とiText7の間には大きな違いがあります。 –

+0

こんにちは@Bruno Lowagie、申し訳ありませんプログラミングのための初心者、私はiTextSharp 5のようなiText 7の実装をお願いしますか?ちょうど参照としてVisual Studioにdllを追加しますか?ありがとう – 120196

関連する問題