Нарисуйте прозрачные линии с PDFBox - PullRequest
1 голос
/ 27 декабря 2010

Я хотел бы рисовать линии и многоугольники с прозрачными линиями в PDFBox. Вот пример кода того, как я рисую синюю линию, но я не могу понять, как изменить альфа-значение цвета.

PDDocument document = new PDDocument();  
PDPage page = new PDPage();  
document.addPage(page);  
PDPageContentStream contentStream = new PDPageContentStream(document, page);  
contentStream.setStrokingColor(66, 177, 230);  
contentStream.drawLine(100, 100, 200, 200);  

Ответы [ 3 ]

3 голосов
/ 18 мая 2017

Начиная с PDFBox 2.0 appendRawCommands устарело.

    float alpha = 0.5f;
    PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState();
    graphicsState.setStrokingAlphaConstant(alpha);
    stream.setGraphicsStateParameters(graphicsState);
    // draw line here
2 голосов
/ 20 апреля 2015

Этого можно добиться с помощью пользовательского расширенного графического состояния:

PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState();
graphicsState.setStrokingAlphaConstant(0.5f);
COSName graphicsStateName = page.getResources().add(graphicsState);
try (PDPageContentStream cs = new PDPageContentStream(document, page, true, true, true)) {
    cs.appendRawCommands("/" + graphicsStateName.getName() + " gs\n");
    // draw your line here.
}
0 голосов
/ 31 декабря 2010

Вы не можете использовать альфа-значение java.awt.Color, так как PDFBox использует только значение RGB.Согласно javadoc public void setStrokingColor(Color color) это просто:

Установите цвет обводки, указанный как RGB.

Один из вариантов может быть, что вы устанавливаете цвет фона в качестве обводкицвет, чтобы сделать вашу линию невидимой. ПРИМЕЧАНИЕ - Невидимый! = Прозрачный (таким образом, вы не получите эффект сквозного просмотра)

...