c# - iText 7水印画布在某些特殊的3d pdf中未正确显示
问题描述
我一直在使用 iText7 最新的 .net 包在 pdf 文档上创建水印注释。我看到大多数noraml pdf文件的水印都正确地印在了所需的位置,但是对于一些特殊的3d(尺寸)pdf文件,水印奇怪地没有正确出现,我相信水印的某些部分正在被另一个切割3d 图层。这是经历的失真的屏幕截图。我试图理解和解决这个问题,但无法得到任何线索。有人可以帮忙吗?这是示例 pdf,以供您查看。
这是我用来嵌入水印的非常简短的相关代码。
float watermarkTrimmingRectangleWidth = 500;
float watermarkTrimmingRectangleHeight = 500;
float formWidth = 500;
float formHeight = 500;
float formXOffset = -40;
float formYOffset = 0;
float xTranslation = 50;
float yTranslation = 25;
double rotationInRads = Math.PI / 4.2;
PdfDocument pdfDoc = new PdfDocument(new PdfReader(filePath), new PdfWriter(destinationfile));
var numberOfPages = pdfDoc.GetNumberOfPages();
PdfPage page = null;
for (var i = 1; i <= numberOfPages; i++)
{
page = pdfDoc.GetPage(i);
Rectangle ps = page.GetPageSize();
float bottomLeftX = ps.GetWidth() / 2 - watermarkTrimmingRectangleWidth / 2;
float bottomLeftY = ps.GetHeight() / 2 - watermarkTrimmingRectangleHeight / 2;
Rectangle watermarkTrimmingRectangle = new Rectangle(bottomLeftX, bottomLeftY, ps.GetWidth(), watermarkTrimmingRectangleHeight);
PdfWatermarkAnnotation watermark = new PdfWatermarkAnnotation(watermarkTrimmingRectangle);
AffineTransform transform = new AffineTransform();
transform.Translate(xTranslation, yTranslation);
transform.Rotate(rotationInRads);
PdfFixedPrint fixedPrint = new PdfFixedPrint();
watermark.SetFixedPrint(fixedPrint);
Rectangle formRectangle = new Rectangle(formXOffset, formYOffset, formWidth, formHeight);
//Observation: font XObject will be resized to fit inside the watermark rectangle
PdfFormXObject form = new PdfFormXObject(formRectangle);
PdfExtGState gs1 = new PdfExtGState().SetFillOpacity(0.8f).SetStrokeOpacity(1.5f);
PdfCanvas canvas = new PdfCanvas(form, pdfDoc);
float[] transformValues = new float[6];
transform.GetMatrix(transformValues);
canvas.SaveState()
.BeginText().SetExtGState(gs1)
.SetTextMatrix(transformValues[0], transformValues[1], transformValues[2], transformValues[3], transformValues[4], transformValues[5])
.SetFontAndSize(font, fontSize)
.ShowText("Restricted Internal")
.EndText()
.RestoreState();
canvas.Release();
watermark.SetAppearance(PdfName.N, new PdfAnnotationAppearance(form.GetPdfObject()));
watermark.SetFlags(PdfAnnotation.READ_ONLY);
page.AddAnnotation(watermark);
}
page?.Flush();
pdfDoc.Close();
解决方案
您的水印注释绘制在某些表单字段之上。
因为页面元素的显示顺序是页面内容、注释、表单域,所以你的注释外观被表单域挡住了。
推荐阅读
- windows - 如何恢复用户配置组策略下的管理模板?
- c++ - “如何在课堂上解决‘调整我的最大身高’问题”
- ios - iOS中的底部选择视图
- html - 并非我的所有列表都围绕图像
- c# - 如何从 WebAPI 返回字典?
- sql - 使用不存在的列时嵌套的 SELECT“有效” - 为什么?
- java - Java ScheduledExecutorService scheduleWithFixedDelay 停止某些线程在一段时间后刷新
- python - Keras模型回归的困惑
- android - Kotlin 编译器在对 build.gradle 文件进行更改后抛出注释错误
- javascript - 如何在mongodb中导入带有_id(字符串)作为_id(objectId)的json文件?