使用 java itext 和 IBM i RPG ILE 时引用#START NON-TRANSLATABLE 的异常

Exception referring # START NON-TRANSLATABLE while working with java itext and IBM i RPG ILE

使用 java itext 库,通过一个非常简单的测试。代码通过,但在关闭文档时,由于 java.lang.String.compareToIgnoreCase.

的空指针异常而失败

将 itext java 代码嵌入 IBM i RPGIV 代码时发生。尚不确定这是 JNI/RPGIV 转换问题(utf8 应转换为 EBCDIC 本机字符集)还是适当的 itext 问题。如果任何 itext 开发人员可以确认我是否是典型的 itext 问题,这将有所帮助,特别是对 START NON-TRANSLATABLE 的引用。

Exception in thread "main"# START NON-TRANSLATABLEjava.lang.NullPointerException at java.lang.String.compareToIgnoreCase(String.java:603)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:94) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:152)
at com.itextpdf.text.pdf.OutputStreamCounter.flush(OutputStreamCounter.java:89) at com.itextpdf.text.DocWriter.close(DocWriter.java:233)
at com.itextpdf.text.pdf.PdfWriter.close(PdfWriter.java:1341)
at com.itextpdf.text.pdf.PdfDocument.close(PdfDocument.java:901)
at com.itextpdf.text.Document.close(Document.java:415)

这是我的 Plex Action 图代码:

文档角色扮演游戏原型:

PdfWriter RPG原型: 方法Document.open: Class 元素段落: 段落构造器RPG原型 元素接口(段落实现元素): 添加段落到文档方法: 文档关闭方法:

这些是我的 Plex API 实现的:

创建文档:

创建 PdfWriter:

打开文档:

创建段落:

向文档添加段落

关闭文档:

最后,我 java 使用这些值: 类路径 = 库的完整列表(itext + Apache POI,所有 运行) java_home = java 7

的路径

在 IBM i 上以普通方式测试 itext 后,终于解决了 java。它今天有效,并为我提供了定位嵌入式 itext 问题的方向。是 PdfWriter class 使用不当。我把一个EBCDIC字符串转换成jstring,然后赋值一个FileOutputStream对象,没有转换。从 jstring 获取 FileOutputStream 对象将正确的文件对象传递给 PdfWriter。该过程现在如下所示:

  /free
     PhraseString = new_String( %trim(&(1:)));
     pdfFilePath = new_FileOutputStream(PhraseString);
     pdfWriter = get_PdfWriter( pdfDocument: pdfFilePath);
  /end-free