2017-02-17 8 views
0

자바에서 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()'도 마찬가지이다. –