我想使用java第三方qr码库https://github.com/kenglxn/QRGen库来生成qr码。
请指导我,因为我不知道如何在jruby中集成java库。
在这种情况下的技巧是找到如何正确导入第三方库。
- 请使用任何依赖系统下载所需的jar(我使用ant和ivy)。 core-2.0.jar core-3.1.0.jar javascript -2.0.jar javascript -3.1.0.jar jfreesvg-2.1.jar
build.xml for ant:
<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 for ivy:
<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
将下载并存储5个jar到lib
子文件夹。
如果你没有一个依赖管理器,这里有5个jar url你需要手动下载,你需要移动到一个名为lib
的子文件夹:
- http://search.maven.org/remotecontent?filepath=net/glxn/qrgen/javase/2.0/javase-2.0.jar
- http://search.maven.org/remotecontent?filepath=com/google/zxing/javase/3.1.0/javase-3.1.0.jar
- http://search.maven.org/remotecontent?filepath=com/google/zxing/core/3.1.0/core-3.1.0.jar
- http://search.maven.org/remotecontent?filepath=net/glxn/qrgen/core/2.0/core-2.0.jar
- http://search.maven.org/remotecontent?filepath=org/jfree/jfreesvg/2.1/jfreesvg-2.1.jar
我强烈建议您使用java依赖管理器,如果您希望有一天升级此代码片段中使用的java库的版本。
下一步是使用以下ruby 代码片段。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,无论它位于哪里。您几乎无法控制文件的位置。
所以我修改了原来的代码答案,使用流来代替,并创建具有更精细控制的文件。
您可以验证使用这个有用的URL生成的所有文件:http://zxing.org/w/decode.jspx