我想让我的背景图像在iText中透明
这是我的图像代码:
string root = Server.MapPath("~");
string parent = Path.GetDirectoryName(root);
string grandParent = Path.GetDirectoryName(parent);
string imageFilePath = parent + "/Images/logo.png";
iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(imageFilePath);
jpg.ScaleToFit(1700, 800);
jpg.Alignment = iTextSharp.text.Image.UNDERLYING;
jpg.SetAbsolutePosition(100, 250);
jpg.ScaleAbsoluteHeight(500);
jpg.ScaleAbsoluteWidth(500);
有什么想法吗?
答案 0 :(得分:1)
请查看BackgroundTransparant示例。它是BackgroundImage示例的变体。
在您的代码中,您将Image
添加到Document
实例。没关系,但是如果你想让这样的图像透明,你需要引入一个软掩码。这并不困难,但有一种更简单的方法可以使背景透明:将图像添加到直接内容中,并引入定义不透明度的PdfGState
:
PdfContentByte canvas = writer.getDirectContentUnder();
Image image = Image.getInstance(IMAGE);
image.SetAbsolutePosition(0, 0);
canvas.SaveState();
PdfGState state = new PdfGState();
state.setFillOpacity(0.6f);
canvas.setGState(state);
canvas.addImage(image);
canvas.restoreState();
将background_image.pdf与background_transparent.pdf进行比较,看看存在差异。
我的例子是用Java编写的,但很容易将它移植到C#:
PdfContentByte canvas = writer.DirectContentUnder;
Image image = Image.GetInstance(IMAGE);
image.SetAbsolutePosition(0, 0);
canvas.SaveState();
PdfGState state = new PdfGState();
state.FillOpacity = 0.6f;
canvas.SetGState(state);
canvas.AddImage(image);
canvas.RestoreState();