是否有一种使用Java将NOP记录添加到AFP文件的简洁方法?

时间:2010-04-09 11:50:21

标签: java apache-fop afp

我使用嵌入式FOP Trunk创建了一个AFP文件。由于FOP Trunk不直接支持root下的no-operation标签,我需要修改创建的文件以添加NOP记录作为文件中的第一条记录。如何做到这一点?

2 个答案:

答案 0 :(得分:2)

我建议将此作为FOP的增强请求。这很可能是完成这项工作的最现实的地方。

除了在FOP中,我不知道任何Java AFP处理库。

答案 1 :(得分:0)

如果你只需要在文件的最开头记录一个,单个,你可以单独生成它,然后将这两个文件连接在一起。 (我假设“裸”的AFP记录,没有任何“可变块”/ VB包装)

请注意,AFP记录的结构如下: 1个字节:x5a(校验字节); 2个字节:16位长度指示符,包括其自身,但不包括“5a”字节; 3字节:记录类型指示;剩余字节:记录特定数据。

记录类型代码位于此文档中:http://afpcinc.org/site/assets/files/1073/ha3l3r04.pdf

这是NOP记录的布局(我想 - 已经有一段时间了):

x5a +(大端/网络订单长度)+ xD3 xEE xEE +(EBCDIC)字符串数据

例如,要编码字符串“FOO = BAR”(十六进制[46 4f 4f 3d 42 41 52]用ASCII,十六进制[c6 d6 d6 7e c2 c1 d9]在EBCDIC中)作为NOP:

字符串长度为7,所以我们希望总长度为2 + 3 + 7 = 12(十六进制0c)

所以,写道: x5a + [00 0c] + [d3 ee ee] + [c6 d6 d6 7e c2 c1 d9]

最后,我知道这是错误的语言,但是这里有一个非常好的AFP解析器:http://metacpan.org/pod/Parse::AFP,它提供工作记录布局定义,以防我忘记了NOP记录中的字段。 : - (