0

this question、itextSharpを使用してpdfを作成することに関する

名前、IDなどのように手動で追加したそのテーブルの最初の行のドキュメントにテーブルを追加しました。そのテーブル名とIDはデータベースから来ています。問題は、ページが終わったときに、名前のような同じ行を手動で追加したいということです、IDとデータはデータベースから引き続き取得されるので、どうすればよいですか?? これらの問題から私を助けてください..

4

1 に答える 1

1

それはすべて、ドキュメントをどのように作成しているかによって異なります。既存のドキュメントに追加しますか、それとも新しいドキュメントを最初から生成しますか?いずれにせよ、おそらく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);
    }
 }
于 2012-08-21T19:45:00.523 に答える