Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PDFBox-带渐变的矩形_Java_Pdfbox - Fatal编程技术网

Java PDFBox-带渐变的矩形

Java PDFBox-带渐变的矩形,java,pdfbox,Java,Pdfbox,我正在尝试使用Java中的PDFBox库创建pdf。我必须创建带有渐变的矩形,但我不知道如何创建,也找不到任何东西。有人能帮我吗?找到了这个例子。看看它是否对你有用 COSDictionary fdict = new COSDictionary(); fdict.setInt(COSName.FUNCTION_TYPE, 2); // still not understaning that... COSArray domain = new COSArray();

我正在尝试使用Java中的PDFBox库创建pdf。我必须创建带有渐变的矩形,但我不知道如何创建,也找不到任何东西。有人能帮我吗?

找到了这个例子。看看它是否对你有用

    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

请参阅源代码下载中的CreateGradientShadingPDF.java示例。答案中有一段摘录:-)有7种不同类型的渐变,但通常类型2或3是您想要的。享受吧。我看过,但不明白。你有关于如何创建渐变的文档吗?只有PDF规范。问题是,你必须知道你想要创建什么样的渐变(可能是轴向的),以及它应该是什么样子,也就是说,什么颜色,在哪里。我已经看到了,我能够在背景上创建渐变-这个例子创建三角形,而不是矩形如果它创建了三角形,那么这意味着你之前已经创建了一个三角形形状。shadingFill()将填充当时处于活动状态的任何剪辑区域和路径。我刚刚运行了此代码,只更改了
coords1
中的值-将值0,020100放入其中。当我以前画一个矩形的时候,有一个黑色的矩形,这个矩形后面有一个三角形渐变。当
moveTo()
lineTo()
@TomaszCzura坐标不是矩形时也是如此,这是轴着色的轴。这是一条从(0,0)到(850600)的线。“类型2(轴向)着色定义沿两个端点之间的线性轴变化并无限延伸垂直于该轴的颜色混合。”参见PDF规范第185页。在上面的代码中,c0和c1是两种“极端”颜色。@TomaszCzura最好是你解释你想要什么,可以用彩色铅笔画出来并拍照,或者用图形程序。请注意,PDF坐标从左下角开始,而不是像java中那样从左上角开始。