首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用iTextSharp创建图像水印时添加图像水印

在使用iTextSharp创建图像水印时添加图像水印
EN

Stack Overflow用户
提问于 2011-05-18 16:15:59
回答 3查看 19.4K关注 0票数 6

不知道这是否可能。在pdf创建并保存到磁盘后,我看到了很多关于添加水印的帖子。但是在创建文档时,我如何添加图像水印呢?我知道如何在文档中添加图像。但我如何定位它,使其出现在页面的末尾。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-19 00:17:41

这基本上等同于添加页眉或页脚。

您需要创建一个实现PdfPageEvent的类,然后在OnPageEnd中获取页面的PdfContentByte,并在其中绘制图像。使用绝对位置。

注意:您可能想要从PdfPageEventHelper派生,它有所有页面事件的空实现,所以您只需要编写您真正关心的方法。

注意:除非你的图片大部分是透明的,否则把它画在你的页面上会掩盖很多东西。IIRC (“如果我没记错”),由iText添加的PNG和GIF文件将被自动正确地屏蔽,允许它们下面的东西被显示出来。

如果你想在所有东西下面添加一个不透明的图像,你应该重写OnStartPage()

这就是Java,但转换它主要是将方法名大写,并交换get/set调用以进行属性访问。

代码语言:javascript
复制
Image watermarkImage = new Image(imgPath);
watermarkImage.setAbsolutePosition(x, y);

writer.setPageEvent( new MyPageEvent(watermarkImage) );


public MyPageEvent extends PdfPageEventHelper {
  private Image waterMark;
  public MyPageEvent(Image img) {
    waterMark = img;
  }
  public void OnEndPage/*OnStartPage*/(PdfWriter writer, Document doc) {
    PdfContentByte content = writer.getContent();
    content.addImage( waterMark );
  }
}
票数 5
EN

Stack Overflow用户

发布于 2012-02-03 18:24:44

对于C#,使用以下代码...

代码语言:javascript
复制
//new Document

Document DOC = new Document();


// open Document

DOC.Open();


//create New FileStream with image "WM.JPG"

FileStream fs1 = new FileStream("WM.JPG", FileMode.Open);


iTextSharp.text.Image JPG = iTextSharp.text.Image.GetInstance(System.Drawing.Image.FromStream(fs1), ImageFormat.Jpeg);


//Scale image

JPG.ScalePercent(35f);


//Set position

JPG.SetAbsolutePosition(130f,240f);

//Close Stream

fs1.Close();


DOC.Add(JPG);
票数 6
EN

Stack Overflow用户

发布于 2020-06-25 02:35:59

这是公认的答案,是C#的端口,也是对我有效的答案。我使用的是A4页面大小:

定义此BackgroundImagePdfPageEvent类:

代码语言:javascript
复制
public class BackgroundImagePdfPageEvent : PdfPageEventHelper
{
    private readonly Image watermark;

    public BackgroundImagePdfPageEvent(string imagePath)
    {
        using (var fs = new FileStream(imagePath, FileMode.Open))
        {
            watermark = Image.GetInstance(System.Drawing.Image.FromStream(fs), ImageFormat.Jpeg);
            watermark.SetAbsolutePosition(0, 0);
            watermark.ScaleAbsolute(PageSize.A4.Width, PageSize.A4.Height);
            watermark.Alignment = Image.UNDERLYING;
        }
    }

    public override void OnStartPage(PdfWriter writer, Document document)
    {
        document.Add(watermark);
    }
}

然后,在创建文档时:

代码语言:javascript
复制
var doc = new Document(PageSize.A4);
doc.SetMargins(60f, 60f, 120f, 60f);
var outputStream = new MemoryStream();
var writer = PdfWriter.GetInstance(doc, outputStream);
var imagePath = "PATH_TO_YOUR_IMAGE";
writer.PageEvent = new BackgroundImagePdfPageEvent(imagePath);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6041718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档