DOC文件WordDocument流

WordDocument流的偏移0处是一个 FIBFile Information Block)。

FIB

FIB包含文档信息和指向文档各个部分的指针。

FIB由基础部分和扩展的节(section)组成,基础部分的长度固定,节的数量和长度可变,每一个节包含一个count域指明下一个节的长度。

                                        图1FIB结构

csw (2 bytes):无符号整形,指明后面的fibRgW个数。fibRgW大小为2字节,该值必须为0x000E

fibRgW (28 bytes):为FibRgW97格式。

cslw (2 bytes):无符号整形,指明后面的fibRgLw个数。fibRgLw大小为4字节,该值必须为0x0016

fibRgLw (88 bytes):格式为FibRgLw97

cbRgFcLcb (2 bytes):无符号整形,指明后面的fibRgFcLcbBlob 个数。fibRgFcLcbBlob 大小为8字节。其值根据FibBase中的nFib而不同:


fibRgFcLcbBlob (可变):格式为FibRgFcLcb

cswNew (2 bytes):无符号整形,指明后面的fibRgCswNew个数。fibRgCswNew大小为2字节。其值根据FibBase中的nFib而不同:


fibRgCswNew (variable):如果cswNew0,结构为 fibRgCswNew。否则,该域在文件中不存在。

FibBase

FIB的起始部分为32字节的基础部分,如图2所示:

1) wIdent (2字节):用来说明这是一个woud二进制文件,值必须为0xA5EC

2) nFib (2字节):说明文件格式的版本号,如果存在FibRgCswNew.nFibNew域,则被该域取代。值通常为0x00C1

3) unused (2字节):被忽略。

 

                                      图2FIB基础部分结构

4) lid (2字节):说明产生该文档的应用程序的语言。

5) pnNext (2字节):一个无符号整数,说明所有包含 AutoText(文档、图像)项的FIBWordDocument流中的偏移,其位置为pnNext*512。如果为0,表示没有AutoText项。如果fGlsy1fDot0,这个值必须是0。如果pnNext0,则必须与FibRgFcLcb97.fcPlcBteChpxFibRgFcLcb97.lcbPlcBteChpxFibRgFcLcb97.fcPlcBtePapxFibRgFcLcb97.lcbPlcBtePapxFibRgLw97.cbMac的值相同。

6) A - fDot (1):说明是否为文档模板。

7) B - fGlsy (1):是否为一个只包含AutoText元素的文档。

8) C - fComplex (1):该文档的最后一次保存操作是否为incremental save(除了附加或修改部分内容,保留其它内容,不是重建等)。

9) D - fHasPic (1):为0,表示没有图片。

10) E - cQuickSaves (4):无符号整形。如果nFib小于0x00D9,该域表示连续进行的incrementally save的次数。如果nFib大于等于0x00D9,该域必须为0xF

11) F - fEncrypted (1):说明该文档是否被加密或混淆。

12) G - fWhichTblStm (1 bit):为1,则文档使用1Table流,为0,则文档使用0Table流。

13) H - fReadOnlyRecommended (1 bit):是否文档只能以只读方式打开。

14) I - fWriteReservation (1 bit):文档执行写操作是否需要密码。

15) J - fExtChar (1 bit):为1

16) K - fLoadOverride (1 bit):是否重写istd 0中段落格式中指定的语言信息和字体为与当前应用适应的值。

17) L - fFarEast (1 bit):创建文档的语言是否为East Asian language

18) M - fObfuscated (1 bit):如果 fEncrypted1,改为说明文档是否被执行异或混淆。

19) nFibBack (2 bytes):为0x00BF0x00C1

20) lKey (4 bytes): 如果fEncryptedfObfuscation都是1,这个值是异或混淆验证器。如果fEncrypted1fObfuscation都是0,则该域为EncryptionHeader的长度。否则为0

21) envr (1 byte):必须为0,且被忽略。

22) N - fMac (1 bit):必须为0,且被忽略。

23) O - fEmptySpecial (1 bit):必须为0,且被忽略。

24) P - fLoadOverridePage (1 bit):是否根据所安装应用的语言修改页尺寸的节属性,方向。

25) Q - reserved1 (1 bit):忽略。

26) R - reserved2 (1 bit):忽略。

27) S - fSpare0 (3 bits):忽略。

28) reserved3 (2 bytes):必须为0,且被忽略。

29) reserved4 (2 bytes):必须为0,且被忽略。

30) reserved5 (4 bytes):被忽略。

31) reserved6 (4 bytes):被忽略。


您可以使用Apache POI库来完成Java中XML类型的DOC文件转换为Word文档的操作。以下是一个简单的示例代码: ```java import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.converter.WordToConverter; import org.apache.poi.hwpf.usermodel.Range; public class XMLToWordConverter { public static void main(String[] args) { try { // 读取XML类型的DOC文件 FileInputStream fis = new FileInputStream("input.xml"); // 创建Word文档对象 XWPFDocument document = new XWPFDocument(); XWPFParagraph paragraph = document.createParagraph(); XWPFRun run = paragraph.createRun(); // 将XML内容写入Word文档 byte[] buffer = new byte[fis.available()]; fis.read(buffer); run.setText(new String(buffer)); // 保存为Word文档 FileOutputStream fos = new FileOutputStream("output.docx"); document.write(fos); // 关闭 fos.close(); fis.close(); System.out.println("XML类型的DOC文件已成功转换为Word文档!"); } catch (Exception e) { e.printStackTrace(); } } } ``` 请注意,Apache POI库中提供了不同版本的类,用于处理不同类型的Word文档。在上述示例中,我们使用了XWPFDocument和XWPFParagraph来处理DOCX类型的Word文档。如果您要处理旧版本的DOC文档,您可以使用HWPFDocument和Range类。 希望能对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值