如何创建自己的包以与 word、pdf 等交互

How to create your own package for interaction with word, pdf etc

我知道有很多包可以让你创建或阅读,例如PDF、Word 和其他文件。

我感兴趣的(但在大学里从未学过)你是如何创建这样一个包的?您是始终依赖原始公司(例如 Adob​​e 或 Microsoft)提供的源代码,还是有另一种巧妙的解决方法?我应该分析我在例如中看到的各个字节吗? PDF 文件?

因人而异。

一些公司为他们自己的数据格式提供了一个 SDK ("Software Development Kit"),其他公司只提供了一个规范(即 Adobe for PDF, Microsoft for Word 并且由软件开发人员确保编写正确的实现.

因为这可能需要大量工作 – 例如,PDF 规范长达 700 多页,实际上并没有深入 required material例如 LZW、JPEG/JPEG2000、颜色理论和数学变换 – 你需要一组 庞大的 数据来测试,使用其他人所做的工作要容易得多就可以了。

如果您有兴趣为某种文件格式编写支持库

  1. 不受法律保护,
  2. 没有,或者只有稀疏的(官方)文档,
  3. 并且还没有在其他地方解构,a

那么是的:你需要

  1. 收集尽可能多的不同文件;
  2. 来自尽可能多的来源;
    (理想情况下,您应该至少有一个程序可以读取和创建文件)
  3. 在字节级别检查它们;
  4. 创建一个适用于 所有 个测试文件的 'reader';
  5. 如果可能,有趣,and/or 需要,创建一个 'writer' 可以从头开始创建该格式的新文件,或者可以将另一种格式的数据转换为这种格式。

涉及 'cleverness',主要是在 #3 中,因为您需要非常精通数据表示的一般工作原理。您应该能够从数据中分辨出代码,从浮点数中分辨出字符串数据,从 MacRoman 编码的字符串中分辨出 UTF8 编码的字符串(等等)。

做过几次,主要是考察各种游戏的数据,主要是好玩! (公平警告:它也可能令人难以置信地令人沮丧。)请参阅逆向工程 Reverse engineering file containing sprites 的示例方法;值得注意的是,在我的回答底部,我承认失败并开始使用短语 "possibly" 和 "may" 和 "probably",这表明我没有进一步了解。


a当然不一定。您可以与其他专长在别处的人合作,甚至可以 "grunt work" 为现有项目 – 找出并整理相当琐碎的子案例。

在现有项目上独立工作也有优势。例如,根据我自己的 PDF reader(从头编写)的经验,我能够指出一个 bug in PDFBox.