mac 上在 Rails 里调用一段 Java 程序,想了想觉得有几种方式
想问问社区的前辈们应该怎么选择,或者有其他更好的方式?
如果 java 程序是一个库,可以用 RJB 去调用 java 里面的方法,速度比 命令行快得多。 缺点是可能影响多线程。例如以下程序。
require "rjb"
Rjb::load(File.join(File.dirname(__FILE__), '..', '..', '..', 'ext', 'iText-2.1.4.jar'), ['-Djava.awt.headless=true'])
def self.itext_merge(filenames, output)
class_pdfreader = Rjb::import('com.lowagie.text.pdf.PdfReader')
class_pdfcopyfields = Rjb::import('com.lowagie.text.pdf.PdfCopyFields')
class_filestream = Rjb::import('java.io.FileOutputStream')
filestream = class_filestream.new(output)
copy = class_pdfcopyfields.new(filestream)
failure_list = []
filenames.each do |f|
# remove double quote
if match = /"(.*)"/.match(f)
f = match[1]
end
if File.exists?(f)
begin
copy.addDocument(class_pdfreader.new(f))
rescue => e
failure_list << f
Rails.logger.info "PdfMerger: Invalid PDF: #{f}"
end
else
failure_list << f
Rails.logger.info "PdfMerger: File does not exist: #{f}"
end
end
copy.close()
# pages = class_pdfreader.new(output).getNumberOfPages
Rails.logger.info "failed pdf: #{failure_list}" if failure_list.present?
return failure_list.empty?
rescue Exception => e
Rails.logger.info "itext_merge failure: #{e.message}"
return false
end