2017-02-17 100 views
0

我正嘗試使用Java中的PDFBox庫創建pdf。我必須使用漸變創建矩形,但我不知道如何以及什麼都找不到。任何人都可以幫助我嗎?PDFBox - 帶梯度的矩形

+2

請參閱源代碼下載的CreateGradientShadingPDF.java示例。它的摘錄是在答案:-)有7種不同類型的梯度,但通常類型2或3是你想要的。請享用。 –

+0

我看過這個,但不明白。你有關於如何創建漸變的任何文檔? –

+0

只有PDF規格。 http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf。問題是你必須知道你想創建什麼樣的梯度(可能是軸向的),以及它應該看什麼,即什麼顏色和在哪裏。 –

回答

0

找到這個例子。看看它是否適合你

COSDictionary fdict = new COSDictionary(); 

    fdict.setInt(COSName.FUNCTION_TYPE, 2); // still not understaning that... 

    COSArray domain = new COSArray(); 
    domain.add(COSInteger.get(0)); 
    domain.add(COSInteger.get(1)); 

    COSArray c0 = new COSArray(); 
    c0.add(COSFloat.get("0.64176")); 
    c0.add(COSFloat.get("0.72588")); 
    c0.add(COSFloat.get("0.78078")); 

    COSArray c1 = new COSArray(); 
    c1.add(COSFloat.get("0.57176")); 
    c1.add(COSFloat.get("0.62588")); 
    c1.add(COSFloat.get("0.70078")); 

    fdict.setItem(COSName.DOMAIN, domain); 
    fdict.setItem(COSName.C0, c0); 
    fdict.setItem(COSName.C1, c1); 
    fdict.setInt(COSName.N, 1); 

    PDFunctionType2 func = new PDFunctionType2(fdict); 

    PDShadingType2 axialShading = new PDShadingType2(new COSDictionary()); 

    axialShading.setColorSpace(PDDeviceRGB.INSTANCE); 
    axialShading.setShadingType(PDShading.SHADING_TYPE2); 

    COSArray coords1 = new COSArray(); 
    coords1.add(COSInteger.get(0)); 
    coords1.add(COSInteger.get(0)); 
    coords1.add(COSInteger.get(850)); // size of my page 
    coords1.add(COSInteger.get(600)); 

    axialShading.setCoords(coords1); // so this sets the bounds of my gradient 
    axialShading.setFunction(func); // and this determines all the curves etc? 

    CStr.shadingFill(axialShading); // where CStr is a ContentStream for my PDDocument 
+0

我已經看到它了,我可以在背景上創建漸變 - 並且此示例創建三角形,而不是矩形 –

+0

如果它創建了一個三角形,那麼這意味着您之前已經創建了一個三角形形狀。 shadingFill()將填充此時的任何剪輯區域和路徑處於活動狀態。 –

+0

我剛纔運行這段代碼,只是我改變了'coords1'中的值 - 把值設爲0,0,200,100。當我以前畫一個矩形時,在這個矩形後面有黑色矩形和三角形漸變。 'moveTo()'和'lineTo()'時相同。 –