【问题标题】:PDFBox - Rectangle with gradientPDFBox - 带渐变的矩形
【发布时间】:2017-02-18 00:34:22
【问题描述】:

我正在尝试使用 Java 中的 PDFBox 库创建 pdf。我必须用渐变创建矩形,但我不知道怎么做,也找不到任何东西。谁能帮我解决这个问题?

【问题讨论】:

  • 查看源代码下载中的 CreateGradientShadingPDF.java 示例。它的摘录在答案中:-) 有 7 种不同类型的渐变,但通常类型 2 或 3 是您想要的。享受吧。
  • 我看过这个,但不明白。你有关于如何创建渐变的文档吗?
  • 只有PDF规范。 adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/… 。问题是你必须知道你想要创建什么样的渐变(可能是轴向的),以及它应该看起来如何,即什么颜色和位置。

标签: java pdfbox


【解决方案1】:

找到这个例子。看看它是否适合你

    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

【讨论】:

  • 我已经看到了,我可以在背景上创建渐变 - 这个示例创建的是三角形,而不是矩形
  • 如果它创建了一个三角形,那么这意味着你之前已经创建了一个三角形。 shadingFill() 将填充当时处于活动状态的任何剪切区域和路径。
  • 我刚刚运行了这段代码,只是我更改了coords1 中的值 - 将值设置为 0,0,200,100。当我之前画一个矩形时,这个矩形后面有黑色矩形和三角形渐变。 moveTo()lineTo() 时相同。
  • @TomaszCzura 坐标不是矩形,这是轴向着色的轴。这是从 (0,0) 到 (850,600) 的线。 “类型 2(轴向)阴影定义了一种颜色混合,它沿着两个端点之间的线性轴变化,并无限期地垂直于该轴延伸。”请参阅 PDF 规范的第 185 页。在上面的代码中,c0 和 c1 是两个“极端”颜色。
  • @TomaszCzura 最好的办法是解释你想要什么,也许用彩色铅笔画出来并拍照,或者用图形程序。请注意,PDF 坐标从左下角开始,而不是像 java 中那样从左上角开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多