Header dan Footer di ITextSharp

Saya tahu pertanyaan ini telah ditanyakan ribuan kali, tetapi saya belum menemukan jawaban yang jelas. Saya relatif baru mengenal ITextSharp, jadi tolong jelaskan seolah-olah Anda sedang berbicara dengan balita. Bagaimana cara menambahkan header dan footer teks sederhana saja ke dokumen yang saya buat?

Saya membuat dokumen pdf sederhana dengan kode berikut:

void Button1Click(object sender, EventArgs e)
    {

            Document doc = new Document(iTextSharp.text.PageSize.LEDGER, 10, 10, 42, 35);
            PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream(@"File Path", FileMode.Create));

            doc.Open();
            Paragraph par1 = new Paragraph("Hello World!");
            doc.Add(par1);

            //Code to add header/footer

            doc.Close();

            MessageBox.Show("Your PDF has been created!");
    }

Saya telah melakukan banyak penelitian tentang cara menambahkan header dan footer, tetapi semuanya berkaitan dengan peristiwa halaman yang rumit. Apakah ada cara yang lebih mudah? Jika tidak ada, bisakah Anda memandu saya melalui prosesnya langkah demi langkah? Saya akan sangat menghargai bantuan apa pun yang dapat Anda berikan. Terima kasih!


person 1Programming1    schedule 27.12.2015    source sumber
comment
Anda harus menggunakan acara halaman. Tapi itu tidak rumit.   -  person mkl    schedule 28.12.2015
comment
Bisakah Anda memandu saya melalui prosesnya dengan sangat cepat?   -  person 1Programming1    schedule 28.12.2015
comment
Apakah jawaban @ Bruno memuaskan Anda? Saya tidak tahu bagaimana menjelaskannya dengan lebih baik.   -  person mkl    schedule 29.12.2015


Jawaban (1)


Anda membuat Document Anda seperti ini:

Document doc = new Document(iTextSharp.text.PageSize.LEDGER, 10, 10, 42, 35);

Artinya Anda memiliki margin atas sebesar 42 unit pengguna dan margin bawah sebesar 35 unit pengguna. Anda dapat menggunakan margin ini untuk menambahkan konten tambahan di halaman acara.

Situs web resminya memiliki banyak contoh dan bagian Tanya Jawab yang komprehensif. Semua contoh dan jawaban diberi tag. Jika Anda mengeklik tag header, Anda dapat menemukan banyak contoh.

Seperti yang telah ditunjukkan oleh orang lain di komentar, Anda perlu membuat implementasi PdfPageEvent. Cara termudah untuk melakukan ini adalah dengan memperluas kelas PdfPageEventHelper.

class MyHeaderFooterEvent : PdfPageEventHelper {
  Font FONT = new Font(Font.FontFamily.HELVETICA, 18, Font.BOLD);

  public override void OnEndPage(PdfWriter writer, Document document) {
    PdfContentByte canvas = writer.DirectContent;
    ColumnText.ShowTextAligned(
      canvas, Element.ALIGN_LEFT,
      new Phrase("Header", FONT), 10, 810, 0
    );
    ColumnText.ShowTextAligned(
      canvas, Element.ALIGN_LEFT,
      new Phrase("Footer", FONT), 10, 10, 0
    );
  }
}

Penting untuk diketahui:

  • Dilarang menambahkan konten di acara OnStartPage(). Tambahkan header dan footer Anda ketika semua konten telah ditambahkan ke halaman tepat sebelum iTextSharp berpindah ke halaman baru. Lebih khusus lagi: tambahkan konten di acara OnEndPage().
  • Dilarang menambahkan konten ke objek Document yang diteruskan ke acara tersebut. Objek ini hanya dapat digunakan untuk tujuan read-only.

Jika Anda memeriksa metode OnEndPage() di kelas MyHeaderFooterEvent, Anda melihat bahwa kita mendapatkan DirectContent dari penulis dan kita menambahkan konten ke canvas ini menggunakan metode ShowTextAligned. Ada banyak cara lain untuk menambahkan konten, tetapi Anda secara eksplisit meminta cara yang paling mudah. Cara ini ada keterbatasannya, namun mudah.

Saya menggunakan beberapa nilai hard-code: Saya menggunakan 10 sebagai nilai x untuk header dan footer. Itu karena Anda menetapkan margin kiri sebesar 10 unit pengguna. Header dan footer dibiarkan sejajar dengan konten sebenarnya yang Anda tambahkan ke halaman. Saya menggunakan 810 untuk nilai y header karena Anda membuat halaman A4 dengan margin atas 42. Koordinat y teratas halaman Anda adalah 842. Koordinat y teratas dari margin atas adalah 842 - 42 = 800. Saya menambahkan 10 unit pengguna sehingga header Anda tidak terpaku pada konten sebenarnya. Koordinat y bawah halaman adalah 0 dalam kasus Anda dan koordinat y bawah margin adalah 35. Saya menggunakan 10 untuk garis dasar footer.

Anda membuat wri dan segera setelah membuat instance PdfWriter ini, Anda membuka instance Document. Agar acara halaman dapat diterapkan, Anda harus menambahkan tautan berikut, tepat sebelum membuka Document:

wri.PageEvent = new MyHeaderFooterEvent();

Sekarang metode OnEndPage() akan dipanggil setiap kali proses utama Anda menyelesaikan sebuah halaman.

Penting: Anda menambahkan //Code to add header/footer di tempat yang salah. iTextSharp akan mencoba menghapus konten halaman sesegera mungkin. Jika Anda menambahkan kode untuk menambahkan header/footer setelah Anda menambahkan konten, Anda tidak dapat kembali untuk menambahkan header dan footer ke halaman yang sudah dimasukkan ke aliran keluaran.

person Bruno Lowagie    schedule 28.12.2015