2016-02-10 9 views
0

Я пытаюсь использовать затенение в itextpdf. Я хочу, чтобы мой прямоугольник (здесь названный положением) изменился с серого на прозрачный. Это код, который я написал, но он не работает: кажется, что новый BaseColor (255,255,255,0) ведет себя как BaseColor.WHITE. Любая идея?затенение с прозрачностью с itextdpf

//Create a shading object with cell-specific coords 
     PdfShading shading = PdfShading.simpleAxial(w, 
       position.getLeft(), 
       position.getBottom(), 
       position.getRight(), 
       position.getTop(), 
       BaseColor.GRAY, 
       new BaseColor(255,255,255,0)); 
+0

Помогает ли ответ? Если нет, укажите проблему. – mkl

ответ

0

PDF-затенение само по себе создает затенение непрозрачных цветов.

Если вы хотите затенение прозрачности, вы можете создать маску; в шаблоне маски вы используете затенение, например. от белого до черного. При использовании в качестве маски это создает эффект затенения, непрозрачный и прозрачный. При активной маске вы нарисуете серый прямоугольник. Эффект - затенение от непрозрачного серого до прозрачного серого.


Использование iText Я показал что-то подобное в this answer. Изображение есть

является радиальная затенения непрозрачными красный несколько прозрачный красный и был создан этот код:

@Test 
public void testComplex() throws FileNotFoundException, DocumentException 
{ 
    Document document = new Document(); 
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("target/test-outputs/transparencyComplex.pdf")); 
    writer.setCompressionLevel(0); 
    document.open(); 
    PdfContentByte content = writer.getDirectContent(); 

    content.setRGBColorStroke(0, 255, 0); 
    for (int y = 0; y <= 400; y+= 10) 
    { 
     content.moveTo(0, y); 
     content.lineTo(500, y); 
    } 
    for (int x = 0; x <= 500; x+= 10) 
    { 
     content.moveTo(x, 0); 
     content.lineTo(x, 400); 
    } 
    content.stroke(); 

    PdfTemplate template = content.createTemplate(500, 400); 
    PdfTransparencyGroup group = new PdfTransparencyGroup(); 
    group.put(PdfName.CS, PdfName.DEVICEGRAY); 
    group.setIsolated(false); 
    group.setKnockout(false); 
    template.setGroup(group); 
    PdfShading radial = PdfShading.simpleRadial(writer, 262, 186, 10, 262, 186, 190, BaseColor.WHITE, BaseColor.BLACK, true, true); 
    template.paintShading(radial); 

    PdfDictionary mask = new PdfDictionary(); 
    mask.put(PdfName.TYPE, PdfName.MASK); 
    mask.put(PdfName.S, new PdfName("Luminosity")); 
    mask.put(new PdfName("G"), template.getIndirectReference()); 

    content.saveState(); 
    PdfGState state = new PdfGState(); 
    state.put(PdfName.SMASK, mask); 
    content.setGState(state); 
    content.setRGBColorFill(255, 0, 0); 
    content.moveTo(162, 86); 
    content.lineTo(162, 286); 
    content.lineTo(362, 286); 
    content.lineTo(362, 86); 
    content.closePath(); 
    content.fill(); 

    content.restoreState(); 

    document.close(); 
} 

(TestTransparency.java)

Ваше затенение должно быть реализуется аналогичным образом.

 Смежные вопросы

  • Нет связанных вопросов^_^