2016-11-19 5 views
1

Wie kann ich einen Farbverlauf in PDFBox erstellen? Oder vielleicht "kann ich?".Erstellen eines Farbverlaufs im Hintergrund mit PDFBox

Ich möchte sie nicht erstellen und zu JPEG oder etwas anderes exportieren. Ich brauche ein Lichtdokument, das muss irgendwie programmiert werden.

Irgendwelche Ideen?

+1

Welche Art von Farbverlauf willst du? Axial oder radial? Was Grenzen? Welche Farben? Haben Sie die CreateGradientShadingPDF.java aus dem Quellcode-Download versucht? –

+0

Es sieht so aus, als hätte ich es nicht in meinem Glas von der Website heruntergeladen. Sollte ich es von der externen Website herunterladen? –

+0

Es sollte im Quelldownload sein. Wenn nicht, dann hole es hier https://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateGradientShadingPDF.java?view=markup&sortby=date –

Antwort

2

Nach viel Recherche habe ich endlich einen kleinen "Schöpfer meines eigenen Farbverlaufs" erstellt! Es sieht so aus:

 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 

Ich werde dies für andere verlassen. Hinterlasse deine Meinung und sei frei, mir einige clevere Ideen zu zeigen, um diesen Code zu verbessern :)

+0

Die Funktion berechnet die Farbe (hier: RGB-Farbraum, könnte aber auch CMYK oder was auch immer sein) aus dem Eingabewert auf der Achse. Die Typ-2-Funktion ist eine Exponential-Interpolationsfunktion und wird am häufigsten verwendet. Dies wird in 7.10.3 der PDF-Spezifikation erläutert. Stellen Sie sich einfach vor, dass die Ergebniswerte zwischen den beiden Grenzen C0 und C1 liegen, es ist nicht wirklich notwendig, um die Mathematik zu verstehen. –

+0

Ich habe eine Idee, dass diese Farbwerte zwischen 0-1 proportional zu diesen zwischen 0-255 in RGB sind. Das hat mich näher gebracht. Das ist eine ziemlich nützliche Bibliothek, ich mag es !! –

+0

Ja tatsächlich. Im PDF sind die Farben zwischen 0 und 1. Also 1 0 0 ist ein perfektes Rot. –

Verwandte Themen