我想使用java第三方qr代码库https://github.com/kenglxn/QRGen库来生成qr代码。
请指导我,因为我不知道如何在jruby中集成java库。
答案 0 :(得分:1)
在这种情况下,诀窍是找到如何正确导入第三方库。
build.xml
<project xmlns:ivy="antlib:org.apache.ivy.ant" name="" default="retrieve">
<!--setproxy proxyhost="" proxyport="" proxyuser="" proxypassword=""/-->
<target name="retrieve">
<ivy:retrieve/>
</target>
</project>
常春藤的ivy.xml :
<ivy-module version="2.0" >
<info organisation="" module=""/>
<dependencies defaultconf="default">
<dependency org="net.glxn.qrgen" name="javase" rev="2.0"/>
</dependencies>
</ivy-module>
现在输入ant retrieve
将在lib
子文件夹中下载并存储5个罐子。
如果您没有依赖关系管理器,以下是您需要手动下载的5个jars网址,您需要转到名为lib
的子文件夹:
我强烈建议您使用java依赖关系管理器,如果您希望有一天升级此代码段中使用的java库的修订版。
下一步是在同一文件夹中使用以下ruby snip.rb 代码。 :
require 'java'
%w[
lib/core-2.0.jar
lib/core-3.1.0.jar
lib/javase-2.0.jar
lib/javase-3.1.0.jar
lib/jfreesvg-2.1.jar
].map &method(:require)
# this is the CRITICAL line to get it to work...
include_class 'net.glxn.qrgen.javase.QRCode'
# get QR file from text using defaults
# this will write a file (example: QRCode7247556396487679822.png) in java.io.tmpdir as defined in your JVM
file = QRCode.from("Hello World").file()
p file.name
# get QR stream from text using defaults
# if we redirect the stream as a byte array, we can have a better file control
include_class 'java.io.FileOutputStream'
stream = QRCode.from("Hello World").stream()
fos = FileOutputStream.new("QRCode.png")
fos.write(stream.toByteArray())
fos.close()
# fun with VCards
include_class 'net.glxn.qrgen.core.vcard.VCard'
johnDoe = VCard.new("John Doe")
johnDoe.setEmail("john.doe@example.org")
johnDoe.setAddress("John Doe Street 1, 5678 Doestown")
johnDoe.setTitle("Mister")
johnDoe.setCompany("John Doe Inc.")
johnDoe.setPhoneNumber("1234")
johnDoe.setWebsite("www.example.org")
stream = QRCode.from(johnDoe).stream()
fos = FileOutputStream.new("VCard.png")
fos.write(stream.toByteArray())
fos.close()
# all generated PNG can be decoded online using http://zxing.org/w/decode.jspx
请注意: jruby和java.io.tmpdir在这个特殊的jar案例中不能很好地协同工作,因为使用#file()
创建QRcode的任何调用都会将文件存储在java.io中.tmpdir,无论它位于何处。你几乎无法控制文件位置。
所以我修改了原始代码答案,改为使用流,并创建更精细控制的文件。
您可以验证使用此有用网址生成的所有文件:http://zxing.org/w/decode.jspx