【发布时间】:2016-11-28 04:20:30
【问题描述】:
使用iTextSharp,我想在 PDF 上盖章并使其透明。印章上有彩色文本(各种颜色),当整个图像透明时变得难以阅读,所以我不想让彩色文本透明 - 只有印章矩形中的白色背景。
基于this answer,我尝试了以下代码:
public void addImage(PdfDictionary oldAnnot, string imagePath,
int pageNumber,iTextSharp.text.Rectangle someRectangle) {
Stream inputImageStream = new FileStream(imagePath, FileMode.Open, FileAccess.Read, FileShare.Read);
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(inputImageStream);
PdfAnnotation pdfStamp = PdfAnnotation.CreateStamp(pdfStamper.Writer, someRectangle, null, Guid.NewGuid().ToString());
image.SetAbsolutePosition(0, 0);
PdfAppearance app = pdfStamper.GetOverContent(pageNumber).CreateAppearance(image.Width, image.Height);
app.SaveState();
PdfGState state = new PdfGState();
state.FillOpacity = 0.1f;
app.SetGState(state);
app.AddImage(image);
app.RestoreState();
pdfStamp.SetAppearance(PdfName.N, app);
pdfStamp.SetPage();
pdfStamper.AddAnnotation(pdfStamp, pageNumber);
}
但是,这会使图像的彩色部分变为半透明。如何只让图片的空白背景透明而让彩色部分不透明?
谢谢。
【问题讨论】:
-
你在这里绕圈子。你想在 pdf 上盖章并使其透明,但不想使彩色文本透明。所以你不想使图章透明.. 你为什么不只是编辑存在于 imagePath 的图像?
-
否则,兴趣点将是
Stream inputImageStream.. 您需要将文件加载到 GraphicContext,进行相应修改,并将结果流提供给 `GetInstance '。 -
@BrettCaswell,在某些情况下,我们希望 imagePath 中的图像不透明(例如,在深灰色背景上标记时),而在其他情况下,我们希望它是透明的。在这种情况下,我试图替换 Foxit 应用的透明图章,使其在 Adobe 中不可读。你是说我不能用白色印章,必须从透明印章开始?
-
我是说
addImage不是应该负责编辑图像的方法。 -
首先,您应该重载此方法,将签名中的
string imagePath替换为Stream inputImageStream,并删除该重载方法中inputImageStream的声明和赋值。因为,您将在调用此addImage方法之前修改图像。
标签: c# pdf itext pdfstamper