Tracciare linee trasparenti con PDFBox
Domanda
Vorrei disegnare linee e poligoni con linee trasparenti PDFBox. Ecco alcuni esempi di codice di come sto disegnando una linea blu, ma non riesco a capire per cambiare il valore alfa del colore.
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);
Soluzione
Non è possibile utilizzare il valore alfa del java.awt.Color
come PDFBox utilizza solo il valore RGB. Come da javadoc di public void setStrokingColor(Color color)
semplicemente:
Imposta il colore accarezzare, specificato come RGB.
Una possibilità potrebbe essere che si imposta il colore di sfondo come il colore carezze per rendere la vostra linea invisibile. NOTA -! Invisibile = trasparente (in modo da non ottenere l'effetto vedere attraverso)
Altri suggerimenti
A partire dal PDFBox 2.0 appendRawCommands
è deprecato.
float alpha = 0.5f;
PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState();
graphicsState.setStrokingAlphaConstant(alpha);
stream.setGraphicsStateParameters(graphicsState);
// draw line here
È possibile raggiungere questo obiettivo utilizzando una consuetudine esteso stato grafico:
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. }