gpt4 book ai didi

java - Aspose with RJB (Ruby Java Bridge) 不工作

转载 作者:数据小太阳 更新时间:2023-10-29 08:32:38 24 4
gpt4 key购买 nike

我有一个 Java 代码,可以通过 aspose library 打开 excel 模板(它运行完美):

import com.aspose.cells.*;
import java.io.*;

public class test
{
public static void main(String[] args) throws Exception
{
System.setProperty("java.awt.headless", "true");
FileInputStream fstream = new FileInputStream("/home/vmlellis/Testes/aspose-cells/template.xlsx");
Workbook workbook = new Workbook(fstream);
workbook.save("final.xlsx");
}
}

在我用 RJB 在 Ruby 上运行它之后( ruby Java 桥):

require 'rjb'

#RJM Loading
JARS = Dir.glob('./jars/*.jar').join(':')
print JARS
Rjb::load(JARS, ['-Xmx512M'])

system = Rjb::import('java.lang.System')
file_input = Rjb::import('java.io.File')
file_input_stream = Rjb::import('java.io.FileInputStream')
workbook = Rjb::import('com.aspose.cells.Workbook')

system.setProperty("java.awt.headless", "true")
file_path = "/home/vmlellis/Testes/aspose-cells/template.xlsx"
file = file_input.new(file_path)
fin = file_input_stream.new(file)

wb = workbook.new(fin)

我收到这个错误:

test.rb:57:in `new': Can't find file: java.io.FileInputStream@693a317a. (FileNotFoundException)
from aspose-test.rb:57:in `<main>'

为什么?我运行相同的代码...但在 Ruby 中不起作用!我该如何解决这个问题?

更新:

documentation有初始化器:Workbook(java.io.InputStreamstream)... 但它在 RJB 中不起作用。 (这怎么可能?)

最佳答案

您的程序应该可以运行,但我找不到它没有运行的任何原因,我正在调查它。

现在是替代方法。

方法一使用 Workbook(String) 构造函数而不是 Workbook(FileInputStream)。这在我这边完美无缺。示例代码为

require 'rjb'

#RJM Loading
JARS = Dir.glob('/home/saqib/cellslib/*.jar').join(':')
print JARS
Rjb::load(JARS, ['-Xmx512M'])

system = Rjb::import('java.lang.System')
workbook = Rjb::import('com.aspose.cells.Workbook')

system.setProperty("java.awt.headless", "true")
file_path = "/home/saqib/rjb/template.xlsx"
save_path = "/home/saqib/rjb/final.xlsx"

wb = workbook.new(file_path)
wb.save(save_path)

方法 2编写一个新的 Java 类库。将所有与 Aspose.Cells 相关的代码写入其中。公开需要从 Ruby (RJB) 调用的非常简单和基本的方法。为什么?

  • 用本地 Java 语言编写程序很容易。如果使用RJB,需要进行大量的代码转换
  • 在 Java 中很容易调试和测试。
  • RJB 的使用仅限于调用您自己的 Java 库中的方法。 RJB 代码将是小而基本的。

使用自己的库的类似示例创建一个新的 Java 项目,假设为“cellstest”。在其中添加一个新的公共(public)类。

package cellstest;
import com.aspose.cells.Workbook;
public class AsposeCellsUtil
{
public String doSomeOpOnWorkbook(String inFile, String outFile)
{
String result = "";
try
{
// Load the workbook
Workbook wb = new Workbook(inFile);
// Do some operation with this workbook
// ..................
// Save the workbook
wb.save(outFile);
// everything ok.
result = "ok";
}
catch(Exception ex)
{
// Return the exception to calling program
result = ex.toString();
}
return result;
}
}

像这样,为每个操作添加任意数量的方法。构建项目并将“cellstest.jar”复制到您复制 Aspose.Cells jar 文件的同一文件夹中。您可以从您的方法返回一个字符串,并在 Ruby 程序中检查返回值以获取成功或错误代码。 Ruby 程序现在就像

require 'rjb'

#RJM Loading
JARS = Dir.glob('/home/saqib/cellslib/*.jar').join(':')
print JARS
Rjb::load(JARS, ['-Xmx512M'])

system = Rjb::import('java.lang.System')
AsposeCellsUtil = Rjb::import('cellstest.AsposeCellsUtil')

system.setProperty("java.awt.headless", "true")
file_path = "/home/saqib/rjb/template.xlsx"
save_path = "/home/saqib/rjb/final.xlsx"

# initialize instance
asposeCellsUtil = AsposeCellsUtil.new()
# call methods
result = asposeCellsUtil.doSomeOpOnWorkbook(file_path, save_path)

puts result

附言。我在 Aspose 工作,担任开发人员布道师。

关于java - Aspose with RJB (Ruby Java Bridge) 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16950372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com