2016-11-19 26 views
1

如何在PDFBox中創建漸變?或者,也許「我可以嗎?」。使用PDFBox在背景中創建漸變

我不想創建它們並導出到jpeg或其他東西。我需要一個輕量級的文檔,所以必須以某種方式進行編程。

任何想法?

+1

你想要什麼樣的漸變?軸向還是徑向?什麼邊界?什麼顏色?你有沒有嘗試從源代碼下載的CreateGradientShadingPDF.java? –

+0

它看起來像我沒有在我的網站從網站下載的jar。我應該從外部網站下載它嗎? –

+0

它應該在源碼下載。如果沒有,請在此處獲取https://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateGradientShadingPDF.java?view=markup&sortby=date –

回答

2

經過大量的研究,我終於創建了一個小的「我自己的漸變創作者」!它看起來像這樣:

 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

函數根據軸上的輸入值計算顏色(此處爲RGB色彩空間,但也可以是CMYK或其他)。類型2函數是指數插值函數,是最常用的函數。這在PDF規範的7.10.3中有解釋。試想一下,結果值在兩個邊界C0和C1之間,不需要理解數學。 –

+0

我有一個想法,0-1之間的這些顏色值與0-255之間的RGB值成正比。這讓我更加接近。這是一個非常有用的圖書館,我喜歡它! –

+0

是的。在PDF中,顏色在0和1之間。所以1 0 0是完美的紅色。 –