this question、itextSharpを使用してpdfを作成することに関する
名前、IDなどのように手動で追加したそのテーブルの最初の行のドキュメントにテーブルを追加しました。そのテーブル名とIDはデータベースから来ています。問題は、ページが終わったときに、名前のような同じ行を手動で追加したいということです、IDとデータはデータベースから引き続き取得されるので、どうすればよいですか?? これらの問題から私を助けてください..
this question、itextSharpを使用してpdfを作成することに関する
名前、IDなどのように手動で追加したそのテーブルの最初の行のドキュメントにテーブルを追加しました。そのテーブル名とIDはデータベースから来ています。問題は、ページが終わったときに、名前のような同じ行を手動で追加したいということです、IDとデータはデータベースから引き続き取得されるので、どうすればよいですか?? これらの問題から私を助けてください..
それはすべて、ドキュメントをどのように作成しているかによって異なります。既存のドキュメントに追加しますか、それとも新しいドキュメントを最初から生成しますか?いずれにせよ、おそらくPageEvents
これを達成するために使用することになります。OnPageEnd
ライターが新しいページの先頭に到達したときに、テーブルヘッダーを「書き換える」カスタムイベントを作成できます。「ゼロから」の観点からこれを行う場合は、注意が必要になる可能性がありますが、イベントを発生させている限り、問題はありません。テーブルの作成。既存のドキュメントに追加する場合は、テーブルを含むファイルを作成し、テーブルの作成が完了したらそれらをマージする方がよい場合があります。どちらにしても、特に複雑なプロセスではありません。forループまたはwhileループ内でテーブルを作成する場合は、次のようになります。
for(int i = 0; a < 100; i++)
{
//OnPageEnd Event that adds the Table Header
table.addCell(cell)
}
このように、ループの反復ごとに、新しいページに書き込む必要があるかどうかを確認します。そうでない場合は、セルの追加を続行します。含まれている場合は、ヘッダー行が挿入され、ループが続行されます。
本当にシンプルなはずです。私は通常、ページイベントを含むクラスファイルを作成し、必要に応じてそれらを呼び出します。クラスファイルを作成して関数を作成したら、現在イベントにヘッダーを書き込むために使用するコードを追加するだけです。ページイベントは実際よりもはるかに困難に思えますが、少し時間を取ってそれらについて少し読むと、多くの頭痛の種を省くことができ、はるかに動的なドキュメントを作成できます。
私自身がテーブルの作成に苦労し、ページ分割をきれいに処理したので、これがあなたを良い方向に向けることを願っています。
編集
簡単にするために1セルのテーブルを作成するために使用する簡単な方法を紹介しますが、必要な数だけ拡張できます。これは、テーブルファイル用に別のドキュメントを作成し、後でそれらをマージするという位置を想定しています。これは実際にはあなたの質問の一部ではないので、それについてもっと明確にするように求められない限り、私はそれを省きます。
private void appendTable(string inputFile, string outputFile, string id)
{
Document outputDoc = new Document(PageSize.LETTER, 15, 15, 35, 50);
PdfReader reader = new PdfReader(inputFile);
string sql = string.Format("SELECT * FROM table WHERE id='{0}'", id);
try
{
DataTable dt = db.GetDataTable(sql);
PdfPTable table = new PdfPTable(1);
iTextSharp.text.Font arial = FontFactory.GetFont("Arial", 8);
iTextSharp.text.Font arialheader = FontFactory.GetFont("Arial", 12);
table.WidthPercentage = 95;
PdfPCell headerCell = new PdfPCell(new Phrase("Cell Header", arialheader));
headerCell.HorizontalAlignment = 1;
table.AddCell(headerCell);
PdfWriter wr = PdfWriter.GetInstance(outputDoc, new FileStream(outputFile, FileMode.Create, FileAccess.ReadWrite));
foreach(DataRow row in dt.Rows)
{
PdfPCell cell = new PdfPCell(new Phrase("Cell Text", arial));
meterCell.HorizontalAlignment = 1; //Center Aligned
table.AddCell(meterCell);
}
outputDoc.Open();
wr.PageEvent = new PageEvents.Header();
wr.PageEvent = new PageEvents.Footer();
outputDoc.Add(table);
outputDoc.NewPage();
outputDoc.Close();
}
catch (PdfException ex)
{
MessageBox.Show(ex.Message.ToString() + " **** " + ex.StackTrace);
}
catch (NpgsqlException ex)
{
MessageBox.Show(ex.Message.ToString() + " **** " + ex.StackTrace);
}
}