使用iTextSharp将水印添加到PDF不适用于图像PDF C#
我正在使用下面的代码在PDF中添加水印。这是正常的工作正常文本PDF。如果包含图像,则水印不可见使用iTextSharp将水印添加到PDF不适用于图像PDF C#,c#,.net,pdf,itext,C#,.net,Pdf,Itext,我正在使用下面的代码在PDF中添加水印。这是正常的工作正常文本PDF。如果包含图像,则水印不可见 public void AddWatermarkPdf() { PdfReader pdfReader = new PdfReader("SimpleArabic.pdf"); PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(DateTime.No
public void AddWatermarkPdf()
{
PdfReader pdfReader = new PdfReader("SimpleArabic.pdf");
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(DateTime.Now.ToFileTime()
+ "Out.pdf", FileMode.Create, FileAccess.Write, FileShare.None));
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance("WaterMarkDoc.png");
img.SetAbsolutePosition(-200, -50);
PdfContentByte waterMark;
for (int pageIndex = 1; pageIndex <= pdfReader.NumberOfPages; pageIndex++)
{
Rectangle pagesize = pdfReader.GetCropBox(pageIndex);
waterMark = pdfStamper.GetUnderContent(pageIndex);
waterMark.AddImage(img);
}
pdfStamper.FormFlattening = true;
pdfStamper.Close();
}
public void AddWatermarkPdf()
{
PdfReader PdfReader=新PdfReader(“simplerabic.pdf”);
PdfStamper PdfStamper=newpdfstamper(pdfReader,newfilestream(DateTime.Now.ToFileTime())
+“Out.pdf”,FileMode.Create,FileAccess.Write,FileShare.None);
iTextSharp.text.Image img=iTextSharp.text.Image.GetInstance(“WaterMarkDoc.png”);
img.SetAbsolutePosition(-200,-50);
PdfContentByte水印;
对于(int pageIndex=1;pageIndex有两种方法可以添加水印:在现有内容下或在现有内容之上。出于您的预期目的,最好的方法是在PDF内容之上添加水印,水印设置为较低的不透明度
这是一个Java代码示例,但很容易转录:
受保护的无效操作EPDF(字符串dest)引发异常{
PdfDocument pdfDoc=新PdfDocument(新PDF阅读器(SRC)、新PDF编写器(DEST));
PdfFont font=PdfFontFactory.createFont(FontProgramFactory.createFont(StandardFonts.HELVETICA));
PdfCanvas over=新的PdfCanvas(pdfDoc.getFirstPage());
over.setFillColor(ColorConstants.BLACK);
段落p=新段落(“此水印添加在现有内容之上”)
.setFont(字体).setFontSize(15);
新画布(覆盖,pdfDoc,pdfDoc.getDefaultPageSize())
.showTextAligned(p,297500,1,TextAlignment.CENTER,VerticalAlignment.TOP,0);
p=新段落(“此透明水印添加在现有内容之上”)
.setFont(字体).setFontSize(15);
over.saveState();
PdfExtGState gs1=新的PdfExtGState();
gs1.不透明度(0.5f);
超过.setExtGState(gs1);
新画布(覆盖,pdfDoc,pdfDoc.getDefaultPageSize())
.showTextAligned(p,297450,1,TextAlignment.CENTER,VerticalAlignment.TOP,0);
结束。恢复遗产();
pdfDoc.close();
}
资料来源:iText知识库对此进行了详细解释:
编辑:
这是您正在使用的iText 5版本的C#示例:
public class TransparentWatermark
{
public static readonly String DEST = "results/sandbox/stamper/transparent_watermark.pdf";
public static readonly String SRC = "../../../resources/pdfs/hero.pdf";
public static void Main(String[] args)
{
FileInfo file = new FileInfo(DEST);
file.Directory.Create();
new TransparentWatermark().ManipulatePdf(DEST);
}
protected void ManipulatePdf(String dest)
{
PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));
PdfCanvas under = new PdfCanvas(pdfDoc.GetFirstPage().NewContentStreamBefore(), new PdfResources(), pdfDoc);
PdfFont font = PdfFontFactory.CreateFont(FontProgramFactory.CreateFont(StandardFonts.HELVETICA));
Paragraph paragraph = new Paragraph("This watermark is added UNDER the existing content")
.SetFont(font)
.SetFontSize(15);
Canvas canvasWatermark1 = new Canvas(under, pdfDoc.GetDefaultPageSize())
.ShowTextAligned(paragraph, 297, 550, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
canvasWatermark1.Close();
PdfCanvas over = new PdfCanvas(pdfDoc.GetFirstPage());
over.SetFillColor(ColorConstants.BLACK);
paragraph = new Paragraph("This watermark is added ON TOP OF the existing content")
.SetFont(font)
.SetFontSize(15);
Canvas canvasWatermark2 = new Canvas(over, pdfDoc.GetDefaultPageSize())
.ShowTextAligned(paragraph, 297, 500, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
canvasWatermark2.Close();
paragraph = new Paragraph("This TRANSPARENT watermark is added ON TOP OF the existing content")
.SetFont(font)
.SetFontSize(15);
over.SaveState();
// Creating a dictionary that maps resource names to graphics state parameter dictionaries
PdfExtGState gs1 = new PdfExtGState();
gs1.SetFillOpacity(0.5f);
over.SetExtGState(gs1);
Canvas canvasWatermark3 = new Canvas(over, pdfDoc.GetDefaultPageSize())
.ShowTextAligned(paragraph, 297, 450, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
canvasWatermark3.Close();
over.RestoreState();
pdfDoc.Close();
}
}
您的代码不会添加水印,而是在任何现有内容后面添加图像。图像上方显示的任何不透明对象(如其他图像)都会将其隐藏。使图像显示在其他图像下方的唯一方法是使现有图像透明