2017-08-29 30 views
2

ここにコードがありますが、エラーメッセージが表示され続けます。ドキュメントにはページがありません。テーブル幅とフレーズも設定しましたが、それでもエラーメッセージが表示されました。私は完全に今外出していますが、他のいくつかのケースを検索しようとしましたが、テーブルの幅を設定する際に修正しようとしました。私が見逃すものはありますか?どんな助けもありがとう。ありがとうございました!C# - iTextSharpドキュメントにはページがありません

private void printPDF(object sender, EventArgs e) 
    {    

      Document docu = new Document(PageSize.LETTER); 
      PdfWriter writer = PdfWriter.GetInstance(docu, new FileStream("C:\\Report\\" + empno + ".pdf", FileMode.Create)); 
      Phrase phrase = null; 
      PdfPCell cell = null; 
      PdfPTable table = null; 
      BaseColor color = null; 

      docu.Open(); 

      //Header Table 
      table = new PdfPTable(2); 
      table.TotalWidth = 500f; 
      table.LockedWidth = true; 
      table.SetWidths(new float[] { 0.3f, 0.7f }); 

      //Company Name and Address 
      phrase = new Phrase(); 
      phrase.Add(new Chunk("Company Name\n\n", FontFactory.GetFont("Arial", 16, iTextSharp.text.Font.BOLD, BaseColor.ORANGE))); 
      phrase.Add(new Chunk("Company Address", FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL, BaseColor.BLACK))); 
      cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT); 
      cell.VerticalAlignment = PdfPCell.ALIGN_TOP; 
      table.AddCell(cell); 

      docu.Add(table); 
      docu.Close(); 
    } 
private static PdfPCell PhraseCell(Phrase phrase, int align) 
    { 
     PdfPCell cell = new PdfPCell(phrase); 
     cell.BorderColor = BaseColor.WHITE; 
     cell.VerticalAlignment = PdfPCell.ALIGN_TOP; 
     cell.HorizontalAlignment = align; 
     cell.PaddingBottom = 2f; 
     cell.PaddingTop = 0f; 
     return cell; 
    } 
+0

があなたのprintPdf()メソッドではより多くのコードがあります:完全な例として

は、以下のコードを参照してください?テーブルを追加して閉じる以外に、ドキュメント 'docu'で何かをしているようには見えません。それは呼び出し元に返される必要がありますか? – njenson

答えて

2

私は簡単に見て持っていたし、あなたがtable = new PdfPTable(2);指定されたとおり、あなたが最初の行のみに一つのセルを提供してきたが、それは、行あたり2のセルを持つことになり、テーブルを伝えると言うでしょう。 1つのセルのみを提供したため、テーブル定義は完全ではないため、レンダリングする行はありません。

コードを変更して2つのセルを提供する場合。

phrase = new Phrase(); 
phrase.Add(new Chunk("Company Name\n\n", FontFactory.GetFont("Arial", 16, iTextSharp.text.Font.BOLD, BaseColor.ORANGE))); 
phrase.Add(new Chunk("Company Address", FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL, BaseColor.BLACK))); 
cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT); 
cell.VerticalAlignment = PdfPCell.ALIGN_TOP; 
table.AddCell(cell); 

//yes this is just duplicating content but proves the point 
cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT); 
cell.VerticalAlignment = PdfPCell.ALIGN_TOP; 
table.AddCell(cell); 


docu.Add(table); 
docu.Close(); 

ここでは2つのセルがあり、テーブル定義を完了することができます。 3つのセルを追加しようとすると、テーブル定義を完了しなかったため、3番目のセルがレンダリングされないことがわかります。

セルをテーブルに追加すると、セルをテーブルに水平方向に追加すると、テーブルによって列定義に基づいて行がレンダリングされます。あなたは、コンストラクタに与える2列の幅を指定してきたように

table = new PdfPTable(new float[] { 0.3f, 0.7f }); 
table.TotalWidth = 500f; 
table.LockedWidth = true; 

:Ieは2列のテーブルに細胞が

cell 1 | Row 1 Cell 1 
cell 2 | Row 1 Cell 2 
cell 3 | Row 2 Cell 1 
cell 4 | Row 2 Cell 2 

になる今、この文

table = new PdfPTable(2); 
table.TotalWidth = 500f; 
table.LockedWidth = true; 
table.SetWidths(new float[] { 0.3f, 0.7f }); 

は以下と等価です表は2列の仕様です。

private void printPDF(object sender, EventArgs e) 
{ 
    string path = "D:\\Test\\" + Guid.NewGuid().ToString() + ".pdf"; 
    using (var fileStream = new FileStream(path, FileMode.Create)) 
    { 
     Document docu = new Document(PageSize.LETTER); 
     PdfWriter writer = PdfWriter.GetInstance(docu, fileStream); 

     docu.Open(); 

     //Header Table 
     var table = new PdfPTable(new float[] { 0.3f, 0.7f }); 
     table.TotalWidth = 500f; 

     //company name 
     var phrase = new Phrase("Company Name", FontFactory.GetFont("Arial", 16, iTextSharp.text.Font.BOLD, BaseColor.ORANGE)); 
     var cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT); 
     table.AddCell(cell); 

     phrase = new Phrase("My test company", FontFactory.GetFont("Arial", 16, iTextSharp.text.Font.BOLD, BaseColor.ORANGE)); 
     cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT); 
     table.AddCell(cell); 

     //company address 
     phrase = new Phrase("Company Address", FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL, BaseColor.BLACK)); 
     cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT); 
     table.AddCell(cell); 

     phrase = new Phrase("123 Main Street, Your City.", FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL, BaseColor.BLACK)); 
     cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT); 
     table.AddCell(cell); 

     docu.Add(table); 
     docu.Close(); 
     writer.Close(); 
    } 
} 
private static PdfPCell PhraseCell(Phrase phrase, int align) 
{ 
    PdfPCell cell = new PdfPCell(phrase); 
    cell.BorderColor = BaseColor.WHITE; 
    cell.VerticalAlignment = PdfPCell.ALIGN_TOP; 
    cell.HorizontalAlignment = align; 
    cell.PaddingBottom = 2f; 
    cell.PaddingTop = 0f; 
    return cell; 
} 
+0

ありがとうございます!私はちょうどそれを試して、それが期待どおりに働いた。行ごとのセルについては分かりませんでした。 –

関連する問題