【发布时间】:2017-02-02 17:15:22
【问题描述】:
谢天谢地,在一些帮助下,我使用以下代码让我的图章工作了:
PdfReader reader = new PdfReader(source);
PdfWriter writer = new PdfWriter(dest);
PdfDocument pdfDoc = new PdfDocument(reader, writer);
Rectangle crop = pdfDoc.GetPage(1).GetCropBox();
Debug.WriteLine("CropBox Rectangle Dim "+crop);
float w = 0;
float h = 0;
ImageData img = ImageDataFactory.Create(imgsrc);
float iWidth = img.GetWidth();
float iHeight = img.GetHeight();
if (crop.GetWidth() > crop.GetHeight())
{
w = crop.GetWidth();
h = crop.GetHeight();
}
else
{
w = crop.GetHeight();
h = crop.GetWidth();
}
Debug.WriteLine("Width = "+w+" and Height = "+h);
Rectangle location = new Rectangle(crop.GetLeft(),crop.GetBottom(),iWidth/4,iHeight/4);
PdfStampAnnotation stamp = new PdfStampAnnotation(location).SetStampName(new PdfName("Logo"));
PdfFormXObject xObj = new PdfFormXObject(new Rectangle(iWidth, iHeight));
PdfCanvas canvas = new PdfCanvas(xObj, pdfDoc);
canvas.AddImage(img, 0, 0,iWidth, false);
stamp.SetNormalAppearance(xObj.GetPdfObject());
stamp.SetFlags(PdfAnnotation.PRINT);
pdfDoc.GetFirstPage().AddAnnotation(stamp);
pdfDoc.Close();
如果我没记错的话,使用 iText 进行标记的过程涉及使用外部图像文件——我确实这样做了。然而,与我的 Adobe 邮票不同,这些图像保留了它们的白色背景,因此不透明。在尝试将其变成透明的 PNG 时,我得到了一个奇怪的结果。我的邮票最终以黑色背景出现。我最初的假设是 Canvas 对象具有某种默认为黑色的填充颜色?您将如何将黑色填充设置为透明。
我尝试使用“图形状态”(PdfGState 状态),将其不透明度设置为 0,并将其应用到 Canvas。然而,这反过来又使我的邮票图像不可见。你如何解决这个问题?
【问题讨论】:
-
冲压只是在现有内容之上或之下添加内容的术语,它不一定涉及外部图像,也可以是文本。也就是说,请看一下构建块教程本章中的透明背景图像示例:developers.itextpdf.com/content/itext-7-building-blocks/…。我刚刚浏览了代码(因此是评论而不是答案),但它应该为您提供水印的方法,这听起来像是您正在尝试做的事情。
-
@Samuel Huylebroeck 看到水印示例,不完全是我遇到的。然而,我寻找了一种不同的方式来标记我的标志。现在我正在叠加包含图章的 PDF。它工作得很好,但是一旦您将印章与 FormXObject(即包含印章的页面)相关联,尺寸就会变得混乱 - 或者更糟糕的是,印章不会出现。让我知道是否值得发布新代码。
标签: c# pdf annotations itext itext7