private List<Province> provinces = new List<Province>();
protected override void OnInitialized()
{
provinces.AddRange(new List<Province> {
new Province(1,"สงขลา"),
new Province(2,"ปัตตานี"),
new Province(3,"ยะลา"),
new Province(4,"นราธิวาส"),
new Province(5,"สตูล")
});
}
public class Province
{
public Int32 ID;
public string Name;
public Province(int id, string name)
{
ID = id;
Name = name;
}
}
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
1.2 สร้างเมธอดในการสร้าง Template ลายน้ำต้นฉบับ เพื่อใช้ในการทำลายน้ำให้กับไฟล์ PDF ที่ต้องการ
////กรณียังไม่เคยสร้างหรือมี Template มาก่อน ให้เรียกใช้งาน CreateTemplate("ข้อความที่ต้องการให้แสดงในเทมเพลต",พาธที่จะสร้างไฟล์เทมเพลตดังกล่าว)
public void CreateTemplate(stringwatermarkText, stringtargetFileName)
{
var document = new Document();
////ระบุพาธที่ต้องการสร้างไฟล์เทมเพลต
var pdfWriter = PdfWriter.GetInstance(document, new FileStream(targetFileName, FileMode.Create));
///ระบุค่าต่างๆเกี่ยวกับตัวอักษรที่จะแสดงผลในเทมเพลตลายน้ำที่สร้างขึ้น
var font = new Font(Font.FontFamily.HELVETICA, 60, Font.NORMAL, BaseColor.LIGHT_GRAY);
document.Open();
////ระบุค่าข้อความ และค่าต่างๆให้กับลายน้ำที่ต้องการ
ColumnText.ShowTextAligned(pdfWriter.DirectContent, Element.ALIGN_CENTER, new Phrase(watermarkText, font), 300, 400, 45);
document.Close();
}
ตัวอย่าง ไฟล์ PDF ของ Template ลายน้ำที่ได้จากการเรียกใช้งานเมธอด CreateTemplate ข้างต้น
1.3 สร้างเมธอดในการจัดทำลายน้ำข้อความให้กับไฟล์ PDF จาก template ลายน้ำต้นฉบับ
public voidAddTextWatermark(stringsourceFilePath, stringwatermarkTemplatePath, stringtargetFilePath)
{
///ระบุพาธไฟล์ต้นทางที่ต้องการทำข้อความลายน้ำ
var pdfReaderSource = new PdfReader(sourceFilePath);
///ระบุพาธไฟล์ปลายทางที่ต้องการบันทึกไฟล์แบบมีลายน้ำ
var pdfStamper = new PdfStamper(pdfReaderSource, new FileStream(targetFilePath, FileMode.Create));
///ระบุพาธของไฟล์ต้นแบบลายน้ำที่จัดทำไว้
var pdfReaderTemplate = new PdfReader(watermarkTemplatePath);
var page = pdfStamper.GetImportedPage(pdfReaderTemplate, 1);
///ทำการวนลูปเพื่อทำลายน้ำให้กับไฟล์ PDF ทีละหน้า
for (var i = 0; i < pdfReaderSource.NumberOfPages; i++)
{
///ระบุตำแหน่งในการแสดงผลลายน้ำกับเนื้อหาในไฟล์ PDF กรณีนี้คือวางไว้ใต้เนื้อหา แต่หากต้องการให้อยู่บนเนื้อหาให้เปลี่ยนเป็น GetOverContent แทน
var content = pdfStamper.GetUnderContent(i + 1);
content.AddTemplate(page, 0, 0);
}
pdfStamper.Close();
pdfReaderTemplate.Close();
}
1.4 เรียกใช้งานเมธอดเพื่อทำลายน้ำให้กับไฟล์ PDF ที่ต้องการ(กรณีนี้สมมุติให้เป็นการกดปุ่มเพื่อเรียกใช้งานเมธอดดังกล่าว)
แต่สำหรับเนื้อหาในไฟล์ PDF โดยทั่วไปแล้ว สามารถใช้งาน GetUnderContent ได้ตามปกติ เพื่อไม่ให้ข้อความลายน้ำบดบังเนื้อหาในเอกสาร
แบบที่ 2การสร้างลายน้ำแบบรูปภาพให้กับเอกสาร PDF โดยจะขอยกตัวอย่างให้ดู 2 แบบนะคะ คือแบบที่สร้างลายน้ำบนไฟล์ PDF ใหม่ และแบบที่สร้างลายน้ำบนไฟล์ต้นทางเดิมค่ะ
public voidAddImageWatermark(stringsourceFilePath, stringwatermarkImagePath, stringtargetFilePath)
{
///ระบุพาธไฟล์ต้นทางที่ต้องการทำภาพลายน้ำ
var pdfReader = new PdfReader(sourceFilePath);
///ระบุพาธไฟล์ปลายทางที่ต้องการบันทึกไฟล์แบบมีภาพลายน้ำ
var pdfStamper = new PdfStamper(pdfReader, new FileStream(targetFilePath, FileMode.Create));
///ระบุพาธของไฟล์ภาพที่ต้องการนำมาทำภาพลายน้ำ
var image = iTextSharp.text.Image.GetInstance(watermarkImagePath);
image.SetAbsolutePosition(200, 400);
///ทำการวนลูปเพื่อทำภาพลายน้ำให้กับไฟล์ PDF ทีละหน้า
for (var i = 0; i < pdfReader.NumberOfPages; i++)
{
var content = pdfStamper.GetUnderContent(i + 1);
content.AddImage(image);
}
pdfStamper.Close();
}