คุณกำลังสร้าง Document
ของคุณดังนี้:
Document doc = new Document(iTextSharp.text.PageSize.LEDGER, 10, 10, 42, 35);
ซึ่งหมายความว่า คุณมีระยะขอบบนเป็นหน่วยผู้ใช้ 42 หน่วย และระยะขอบล่างเป็นหน่วยผู้ใช้ 35 หน่วย คุณสามารถใช้ระยะขอบนี้เพื่อเพิ่มเนื้อหาพิเศษในเหตุการณ์หน้าได้
เว็บไซต์อย่างเป็นทางการมีตัวอย่างมากมายและส่วนถามตอบที่ครอบคลุม มีการติดแท็กตัวอย่างและคำตอบทั้งหมด หากคุณคลิกที่แท็ก ส่วนหัว คุณจะพบตัวอย่างมากมาย
ตามที่ผู้อื่นระบุไว้แล้วในความคิดเห็น คุณต้องสร้างการใช้งาน PdfPageEvent
วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการขยายคลาส 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
);
}
}
สิ่งสำคัญที่ควรรู้:
- ห้ามมิให้เพิ่มเนื้อหาในเหตุการณ์
OnStartPage()
เพิ่มส่วนหัวและส่วนท้ายของคุณเมื่อมีการเพิ่มเนื้อหาทั้งหมดลงในเพจก่อนที่ iTextSharp จะย้ายไปยังหน้าใหม่ โดยเฉพาะอย่างยิ่ง: เพิ่มเนื้อหาในเหตุการณ์ OnEndPage()
- ห้ามมิให้เพิ่มเนื้อหาลงในออบเจ็กต์
Document
ที่ส่งผ่านไปยังเหตุการณ์ วัตถุนี้สามารถใช้เพื่อวัตถุประสงค์แบบอ่านอย่างเดียวเท่านั้น
หากคุณตรวจสอบเมธอด OnEndPage()
ในคลาส MyHeaderFooterEvent
คุณจะเห็นว่าเราได้รับ DirectContent
จากผู้เขียน และเราเพิ่มเนื้อหาให้กับ canvas
นี้โดยใช้เมธอด ShowTextAligned
มีหลายวิธีในการเพิ่มเนื้อหา แต่คุณถามอย่างชัดเจนถึงวิธีที่ง่ายที่สุด วิธีนี้มีข้อจำกัดแต่ทำได้ง่าย
ฉันใช้ค่าฮาร์ดโค้ดสองสามค่า: ฉันใช้ 10
เป็นค่า x
สำหรับส่วนหัวและส่วนท้าย นั่นเป็นเพราะว่าคุณกำหนดระยะขอบด้านซ้ายไว้ที่ 10 หน่วยผู้ใช้ ส่วนหัวและส่วนท้ายจะชิดซ้ายกับเนื้อหาจริงที่คุณกำลังเพิ่มลงในเพจ ฉันใช้ 810
สำหรับค่า y
ของส่วนหัว เนื่องจากคุณกำลังสร้างหน้า A4 โดยมีระยะขอบบนเป็น 42 พิกัด y
ด้านบนของหน้าคือ 842 พิกัด y
ด้านบนของระยะขอบบนคือ 842 - 42 = 800 ฉันเพิ่มหน่วยผู้ใช้ 10 หน่วยเพื่อไม่ให้ส่วนหัวของคุณยึดติดกับเนื้อหาจริง พิกัด y
ด้านล่างของหน้าคือ 0 ในกรณีของคุณและพิกัด y
ด้านล่างของระยะขอบใน 35 ฉันใช้ 10
สำหรับบรรทัดฐานของส่วนท้าย
คุณสร้าง wri
และทันทีหลังจากสร้างอินสแตนซ์ PdfWriter
นี้ คุณจะเปิดอินสแตนซ์ Document
เพื่อให้กิจกรรมเพจมีผล คุณควรเพิ่มลิงก์ต่อไปนี้ก่อนที่จะเปิด Document
:
wri.PageEvent = new MyHeaderFooterEvent();
ตอนนี้เมธอด OnEndPage()
จะถูกเรียกใช้ทุกครั้งที่กระบวนการหลักของคุณสรุปเพจ
ข้อสำคัญ: คุณเพิ่ม //Code to add header/footer
ผิดตำแหน่ง iTextSharp จะพยายามล้างเนื้อหาของหน้าโดยเร็วที่สุด หากคุณเพิ่มโค้ดเพื่อเพิ่มส่วนหัว/ส่วนท้าย หลังจาก คุณได้เพิ่มเนื้อหาแล้ว คุณจะไม่สามารถกลับไปเพิ่มส่วนหัวและส่วนท้ายให้กับหน้าที่ล้างข้อมูลไปยังสตรีมเอาต์พุตแล้วได้
person
Bruno Lowagie
schedule
28.12.2015