iText 7 - 如何用透明颜色填充 canvas 矩形

iText 7 - How to fill a canvas rectangle with a transparent color

在 iText 7.1.9 中,我正在使用以编程方式(不是通过 iText)创建的 pdf,并且需要沿左侧和底部应用透明矩形以确保预定义的空白区域内不存在任何内容(用于打印) .

下面的代码正确放置了黄色矩形,但所需的结果是黄色填充是半透明的或不是 100% 不透明的,这样视觉检查将显示与矩形相交的内容,而不是与矩形相交的内容剪切内容的矩形。

var page = pdf.GetPage(1); 
PdfCanvas canvas = new PdfCanvas(page);
canvas.SaveState();                
canvas.SetFillColor(iText.Kernel.Colors.ColorConstants.YELLOW);

var pageHeight = page.GetPageSize().GetHeight();
var pageWidth = page.GetPageSize().GetWidth();
// left side
canvas.Rectangle(0, 0, 15, pageHeight);
// bottom
canvas.Rectangle(0, 0, pageWidth, 15);
canvas.Fill();                
canvas.RestoreState();

我尝试使用 TransparentColor,但 canvas.SetFillColor 不接受 TransparentColor,还有其他选择吗?

当我们谈论低级内容流指令时,颜色本身和透明度级别在 PDF 语法中单独指定。您所说的 TransparentColor class 旨在简化不太熟悉 PDF 语法细微差别的用户的生活,但它是您可以使用的更高级别的 class,例如在 layout 模块中,在您的情况下,您在相当低的级别上操作文档。

长话短说,要设置颜色透明度,您只需要在设置颜色本身旁边添加一行:

canvas.SetExtGState(new PdfExtGState().SetFillOpacity(0.5f));

所以代码变成:

var page = pdf.GetPage(1); 
PdfCanvas canvas = new PdfCanvas(page);
canvas.SaveState();                
canvas.SetFillColor(iText.Kernel.Colors.ColorConstants.YELLOW);
canvas.SetExtGState(new PdfExtGState().SetFillOpacity(0.5f));

var pageHeight = page.GetPageSize().GetHeight();
var pageWidth = page.GetPageSize().GetWidth();
// left side
canvas.Rectangle(0, 0, 15, pageHeight);
// bottom
canvas.Rectangle(0, 0, pageWidth, 15);
canvas.Fill();                
canvas.RestoreState();