不知道这是否可能。在pdf创建并保存到磁盘后,我看到了很多关于添加水印的帖子。但是在创建文档时,我如何添加图像水印呢?我知道如何在文档中添加图像。但我如何定位它,使其出现在页面的末尾。
发布于 2011-05-19 00:17:41
这基本上等同于添加页眉或页脚。
您需要创建一个实现PdfPageEvent的类,然后在OnPageEnd中获取页面的PdfContentByte,并在其中绘制图像。使用绝对位置。
注意:您可能想要从PdfPageEventHelper派生,它有所有页面事件的空实现,所以您只需要编写您真正关心的方法。
注意:除非你的图片大部分是透明的,否则把它画在你的页面上会掩盖很多东西。IIRC (“如果我没记错”),由iText添加的PNG和GIF文件将被自动正确地屏蔽,允许它们下面的东西被显示出来。
如果你想在所有东西下面添加一个不透明的图像,你应该重写OnStartPage()。
这就是Java,但转换它主要是将方法名大写,并交换get/set调用以进行属性访问。
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 );
}
}发布于 2012-02-03 18:24:44
对于C#,使用以下代码...
//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);发布于 2020-06-25 02:35:59
这是公认的答案,是C#的端口,也是对我有效的答案。我使用的是A4页面大小:
定义此BackgroundImagePdfPageEvent类:
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);
}
}然后,在创建文档时:
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);https://stackoverflow.com/questions/6041718
复制相似问题