iText 7 - Как заполнить прямоугольник холста прозрачным цветом - PullRequest
0 голосов
/ 21 января 2020

В iText 7.1.9 я беру pdf-файл, созданный программно (не через iText), и мне нужно применить прозрачный прямоугольник вдоль левой стороны и снизу, чтобы убедиться, что в предопределенной чистой зоне (для печати) нет содержимого.

Приведенный ниже код правильно размещает желтые прямоугольники, но желаемый результат заключается в том, чтобы желтая заливка была полупрозрачной или непрозрачной на 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, есть ли другие варианты?

1 Ответ

1 голос
/ 22 января 2020

Когда мы говорим о низкоуровневых инструкциях потока контента, сам цвет и уровни прозрачности указываются отдельно в синтаксисе PDF. Класс TransparentColor, о котором вы говорите, был разработан, чтобы упростить жизнь пользователям, которые менее знакомы с нюансами синтаксиса PDF, но это класс более высокого уровня, который вы можете использовать, например, в модуле 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...