我面临的问题是,我试图绘制一个矩形与专色(pdseparation)一个笔划和一个非笔划(填充)。
第一个颜色值:spotcolorname=stroke color 6,r=255,g=153,b=51
第二个颜色值:spotcolorname=fill color 6,r=0,g=0,b=255
这是pdf输出的屏幕截图
下面是创建分隔和颜色的代码
private PDColor createSpotColorFromRGB(String spotColorName, int r,
int g, int b) throws IOException {
PDSeparation seperation = new PDSeparation();
COSDictionary dictionary = new COSDictionary();
COSArray C0 = new COSArray();
COSArray C1 = new COSArray();
COSArray range = new COSArray();
COSArray domain = new COSArray();
float[] components = null;
seperation.setColorantName(spotColorName);
components = new float[] { r / 255f, g / 255f, b / 255f };
seperation.setAlternateColorSpace(PDDeviceRGB.INSTANCE);
C0.add(COSInteger.ZERO);
C0.add(COSInteger.ZERO);
C0.add(COSInteger.ZERO);
range.add(COSInteger.ZERO);
range.add(COSInteger.ONE);
range.add(COSInteger.ZERO);
range.add(COSInteger.ONE);
range.add(COSInteger.ZERO);
range.add(COSInteger.ONE);
C1.add(COSInteger.ONE);
C1.add(COSInteger.ONE);
C1.add(COSInteger.ONE);
domain.add(COSInteger.ZERO);
domain.add(COSInteger.ONE);
dictionary.setItem(COSName.C0, C0);
dictionary.setItem(COSName.C1, C1);
dictionary.setItem(COSName.DOMAIN, domain);
dictionary.setItem(COSName.FUNCTION_TYPE, COSInteger.TWO);
dictionary.setItem(COSName.N, COSInteger.ONE);
dictionary.setItem(COSName.RANGE, range);
PDFunction functionTyp2 = new PDFunctionType2(dictionary);
seperation.setTintTransform(functionTyp2);
return new PDColor(components, seperation);
}
然后我将生成的颜色设置为页面内容流
outputPageContentStream.setNonStrokingColor(fillColor);
outputPageContentStream.setStrokingColor(strokeColor);
只显示两种颜色中的一种颜色,显示带有1 scn/scn的颜色。
附加输出pdffile:httpshttp://docdro.id/0svsuwe
绘图代码为:
outputPageContentStream.saveGraphicsState();
outputPageContentStream.setNonStrokingColor(fillingColorForDrawingPDColor);
outputPageContentStream.setStrokingColor(strokingColorForDrawingPDColor);
outputPageContentStream.moveTo(a, b);
outputPageContentStream.lineTo(a + c, b);
outputPageContentStream.lineTo(a + c, b - d);
outputPageContentStream.lineTo(a, b - d);
outputPageContentStream.closePath();
outputPageContentStream.fillAndStroke();
outputPageContentStream.restoreGraphicsState();
有人能帮忙吗?
1条答案
按热度按时间nc1teljy1#
我用pdfbox pdfdebugger查看了这个文件,cs1为0(屏幕截图中的“0scn”)意味着它将显示为白色(您应该看看“fillingcolorfordrawingpcolor”的创建。
这是因为c0(下限,值0)是(1,1,1),它是白色的。c1(上限,值1)是蓝色的(0,0,1)。颜色之间的颜色由色调变换函数计算。
更新:
此代码
表示误解。分离颜色只需要一种颜色,即介于0和1之间的颜色。最终的颜色是“彩色的”,这是因为c0(最小值)和c1(最大值)中的值以及在这两个值之间创建颜色的函数。
rgb是可选颜色空间的“目标”颜色空间。分离颜色用于“特殊”颜色,例如金色、闪光、金属色、荧光色等。替代颜色空间模拟实际颜色不可用的情况(例如显示)。
在源代码(或此处)中的pdseparation示例中