我正在使用jruby-9.2.6.0
导入Java pdf库。 PDColor
是一个用浮点数数组和字符串常量实例化的类。 Java example code that I'm referencing 如下所示:
import org.apache.pdfbox.pdmodel.graphics.color.PDColor;
PDColor componentColor = new PDColor(new float[]{1, 0, 0}, PDDeviceRGB.INSTANCE);
在jruby
中,我的代码如下所示:
import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB;
float_arr = [1.to_f, 0.to_f, 0.to_f]
componentColor = PDColor.new(float_arr, PDDeviceRGB::INSTANCE)
问题是,看来float_arr
参数没有作为浮点数组输入,因此我们得到以下错误:
NameError (no constructor for arguments (org.jruby.RubyArray,org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB) on Java::OrgApachePdfboxPdmodelGraphicsColor::PDColor)
available overloads:
(org.apache.pdfbox.cos.COSArray,org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace)
(org.apache.pdfbox.cos.COSName,org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace)
(float[],org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace)
jruby
中是否有一种已知方法将Ruby的float数组转换为Java float数组?
答案 0 :(得分:3)
如@TilmanHausherr所述,构造函数期望Java数组primitive浮点数。要创建它,您可以调用Array#to_java(:float)
。
这是一个小程序来测试此行为。 pdfbox-2.0.15.jar
应与脚本位于同一文件夹中,该脚本应与${}
运行:
jruby
答案 1 :(得分:0)
因此,根据docs,PDColor
类具有一个替代构造函数,除Array
外,我还可以为Float
传递其特定于库的类型。我将发布此答案,以防任何使用JRuby的人遇到针对此特定库的类似问题。
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSFloat;
import org.apache.pdfbox.pdmodel.graphics.color.PDColor;
cos_array = COSArray.new
cos_array.add(COSFloat.new(red_value))
cos_array.add(COSFloat.new(blue_value))
cos_array.add(COSFloat.new(green_value))
pd_color = PDColor.new(cos_array, PDDeviceRGB::INSTANCE)