我正在使用jruby-9.2.6.0
导入Java pdf库。 PDColor
是一个类,它被一个浮点数数组和一个字符串常量实例化。我引用的 Java 示例代码如下所示:
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 数组转换为 Java 浮点数组?
正如@TilmanHausherr所提到的,构造函数需要一个原始浮点数的 Java 数组。要创建它,您可以调用 Array#to_java(:float)
。
下面是一个测试此行为的小程序。 pdfbox-2.0.15.jar
应与脚本位于同一文件夹中,脚本应使用 jruby
运行:
require './pdfbox-2.0.15.jar'
java_import 'org.apache.pdfbox.pdmodel.graphics.color.PDColor'
java_import 'org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB'
red = PDColor.new([1.0, 0, 0].to_java(:float), PDDeviceRGB::INSTANCE)
puts red
#=> PDColor{components=[1.0, 0.0, 0.0], patternName=null}