如何创建自己的包以与 word、pdf 等交互
How to create your own package for interaction with word, pdf etc
我知道有很多包可以让你创建或阅读,例如PDF、Word 和其他文件。
我感兴趣的(但在大学里从未学过)你是如何创建这样一个包的?您是始终依赖原始公司(例如 Adobe 或 Microsoft)提供的源代码,还是有另一种巧妙的解决方法?我应该分析我在例如中看到的各个字节吗? PDF 文件?
因人而异。
一些公司为他们自己的数据格式提供了一个 SDK ("Software Development Kit"),其他公司只提供了一个规范(即 Adobe for PDF, Microsoft for Word 并且由软件开发人员确保编写正确的实现.
因为这可能需要大量工作 – 例如,PDF 规范长达 700 多页,实际上并没有深入 required material例如 LZW、JPEG/JPEG2000、颜色理论和数学变换 – 你需要一组 庞大的 数据来测试,使用其他人所做的工作要容易得多就可以了。
如果您有兴趣为某种文件格式编写支持库
- 不受法律保护,
- 没有,或者只有稀疏的(官方)文档,
- 并且还没有在其他地方解构,a
那么是的:你需要
- 收集尽可能多的不同文件;
- 来自尽可能多的来源;
(理想情况下,您应该至少有一个程序可以读取和创建文件)
- 在字节级别检查它们;
- 创建一个适用于 所有 个测试文件的 'reader';
- 如果可能,有趣,and/or 需要,创建一个 'writer' 可以从头开始创建该格式的新文件,或者可以将另一种格式的数据转换为这种格式。
涉及 'cleverness',主要是在 #3 中,因为您需要非常精通数据表示的一般工作原理。您应该能够从数据中分辨出代码,从浮点数中分辨出字符串数据,从 MacRoman 编码的字符串中分辨出 UTF8 编码的字符串(等等)。
做过几次,主要是考察各种游戏的数据,主要是好玩! (公平警告:它也可能令人难以置信地令人沮丧。)请参阅逆向工程 Reverse engineering file containing sprites 的示例方法;值得注意的是,在我的回答底部,我承认失败并开始使用短语 "possibly" 和 "may" 和 "probably",这表明我没有进一步了解。
a当然不一定。您可以与其他专长在别处的人合作,甚至可以 "grunt work" 为现有项目 – 找出并整理相当琐碎的子案例。
在现有项目上独立工作也有优势。例如,根据我自己的 PDF reader(从头编写)的经验,我能够指出一个 bug in PDFBox.
我知道有很多包可以让你创建或阅读,例如PDF、Word 和其他文件。
我感兴趣的(但在大学里从未学过)你是如何创建这样一个包的?您是始终依赖原始公司(例如 Adobe 或 Microsoft)提供的源代码,还是有另一种巧妙的解决方法?我应该分析我在例如中看到的各个字节吗? PDF 文件?
因人而异。
一些公司为他们自己的数据格式提供了一个 SDK ("Software Development Kit"),其他公司只提供了一个规范(即 Adobe for PDF, Microsoft for Word 并且由软件开发人员确保编写正确的实现.
因为这可能需要大量工作 – 例如,PDF 规范长达 700 多页,实际上并没有深入 required material例如 LZW、JPEG/JPEG2000、颜色理论和数学变换 – 你需要一组 庞大的 数据来测试,使用其他人所做的工作要容易得多就可以了。
如果您有兴趣为某种文件格式编写支持库
- 不受法律保护,
- 没有,或者只有稀疏的(官方)文档,
- 并且还没有在其他地方解构,a
那么是的:你需要
- 收集尽可能多的不同文件;
- 来自尽可能多的来源;
(理想情况下,您应该至少有一个程序可以读取和创建文件) - 在字节级别检查它们;
- 创建一个适用于 所有 个测试文件的 'reader';
- 如果可能,有趣,and/or 需要,创建一个 'writer' 可以从头开始创建该格式的新文件,或者可以将另一种格式的数据转换为这种格式。
涉及 'cleverness',主要是在 #3 中,因为您需要非常精通数据表示的一般工作原理。您应该能够从数据中分辨出代码,从浮点数中分辨出字符串数据,从 MacRoman 编码的字符串中分辨出 UTF8 编码的字符串(等等)。
做过几次,主要是考察各种游戏的数据,主要是好玩! (公平警告:它也可能令人难以置信地令人沮丧。)请参阅逆向工程 Reverse engineering file containing sprites 的示例方法;值得注意的是,在我的回答底部,我承认失败并开始使用短语 "possibly" 和 "may" 和 "probably",这表明我没有进一步了解。
a当然不一定。您可以与其他专长在别处的人合作,甚至可以 "grunt work" 为现有项目 – 找出并整理相当琐碎的子案例。
在现有项目上独立工作也有优势。例如,根据我自己的 PDF reader(从头编写)的经验,我能够指出一个 bug in PDFBox.