نامرئی کردن Watermarkهای صفحات فایلهای PDF توسط iTextSharp
نویسنده: وحید نصیری
تاریخ: ۱۳۹۲/۰۴/۳۰ ۸:۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
private static void createPdfFile(string pdfFile)
{
using (var fs = new FileStream(pdfFile, FileMode.Create, FileAccess.Write, FileShare.None))
{
using (var doc = new Document(PageSize.A4))
{
using (var witier = PdfWriter.GetInstance(doc, fs))
{
doc.Open();
for (int i = 1; i <= 5; i++)
{
doc.NewPage();
doc.Add(new Paragraph(String.Format("This is page {0}", i)));
}
doc.Close();
}
}
}
} private static void addWatermark(string pdfFile, string watermarkedFile, string watermarkText)
{
FontFactory.Register("c:\\windows\\fonts\\tahoma.ttf");
var tahoma = FontFactory.GetFont("Tahoma", BaseFont.IDENTITY_H, 40, Font.NORMAL, BaseColor.BLACK);
var reader = new PdfReader(pdfFile);
using (var fileStream = new FileStream(watermarkedFile, FileMode.Create, FileAccess.Write, FileShare.None))
{
using (var stamper = new PdfStamper(reader, fileStream))
{
int pageCount = reader.NumberOfPages;
for (int i = 1; i <= pageCount; i++)
{
var rect = reader.GetPageSize(i);
var cb = stamper.GetUnderContent(i);
var gState = new PdfGState();
gState.FillOpacity = 0.25f;
cb.SetGState(gState);
ColumnText.ShowTextAligned(
canvas: cb,
alignment: Element.ALIGN_CENTER,
phrase: new Phrase(watermarkText, tahoma),
x: rect.Width / 2,
y: rect.Height / 2,
rotation: 45f,
runDirection: PdfWriter.RUN_DIRECTION_LTR,
arabicOptions: 0);
}
}
}
} private static void removeWatermark(string watermarkedFile, string unwatermarkedFile)
{
PdfReader.unethicalreading = true;
PdfReader reader = new PdfReader(watermarkedFile);
reader.RemoveUnusedObjects();
int pageCount = reader.NumberOfPages;
for (int i = 1; i <= pageCount; i++)
{
var page = reader.GetPageN(i);
PdfDictionary resources = page.GetAsDict(PdfName.RESOURCES);
PdfDictionary extGStates = resources.GetAsDict(PdfName.EXTGSTATE);
if (extGStates == null)
continue;
foreach (PdfName name in extGStates.Keys)
{
var obj = extGStates.Get(name);
PdfDictionary extGStateObject = (PdfDictionary)PdfReader.GetPdfObject(obj);
var stateNumber = extGStateObject.Get(PdfName.ca_);
if (stateNumber == null)
continue;
var caNumber = (PdfNumber)PdfReader.GetPdfObject(stateNumber);
if (caNumber.FloatValue != 1f)
{
extGStateObject.Remove(PdfName.ca_);
//با تنظیم مقدار به صفر، نامرئی خواهد شد
extGStateObject.Put(PdfName.ca_, new PdfNumber(0f));
}
}
}
using (FileStream fs = new FileStream(unwatermarkedFile, FileMode.Create, FileAccess.Write, FileShare.None))
{
using (PdfStamper stamper = new PdfStamper(reader, fs))
{
stamper.SetFullCompression();
stamper.Close();
}
}
}