我正在尝试用 Java 从头开始编写一个简单的 RTF 文档,并且我正在尝试将 JPEG 嵌入到文档中。这是嵌入在 RTF 文档(由 WordPad 生成,将 JPEG 转换为 WMF)中的 JPEG(2x2 像素 JPEG,由左上角的三个白色像素和一个黑色像素组成)的示例:
{\pict\wmetafile8\picw53\pich53\picwgoal30\pichgoal30
0100090000036e00000000004500000000000400000003010800050000000b0200000000050000
000c0202000200030000001e000400000007010400040000000701040045000000410b2000cc00
020002000000000002000200000000002800000002000000020000000100040000000000000000
000000000000000000000000000000000000000000ffffff00fefefe0000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
0000001202af0801010000040000002701ffff030000000000
}
我一直在阅读RTF 规范,看起来您可以指定图像是 JPEG,但由于写字板总是将图像转换为 WMF,因此我看不到嵌入 JPEG 的示例。所以我可能最终还需要从 JPEG 转码为 WMF 或其他东西....
但基本上,我正在寻找如何在给定文件 URL 的情况下生成 JPEG 的二进制或十六进制(规范,第 148 页:“这些图片可以是十六进制(默认)或二进制格式。”)形式。
谢谢!
编辑:我认为流的东西工作得很好,但仍然不明白如何对其进行编码,因为无论我在做什么,它都不是 RTF 可读的。例如,上面的图片改为:
ffd8ffe00104a464946011106006000ffdb0430211211222222223533333644357677767789b988a877adaabcccc79efdcebcccffdb04312223336336c878ccccccccccccccccccccccccccccccccccccccccccccccccccffc0011802023122021113111ffc401f001511111100000000123456789abffc40b5100213324355440017d123041151221314161351617227114328191a182342b1c11552d1f024336272829a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc401f103111111111000000123456789abffc40b51102124434754401277012311452131612415176171132232818144291a1b1c19233352f0156272d1a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda0c31021131103f0fdecf09f84f4af178574cd0b42d334fd1744d16d22bd3f4fb0b74b6b5bb78902450c512091c688aaaa8a0500014514507ffd9
这个 PHP 库可以解决问题,所以我试图将相关部分移植到 Java。这是:
$imageData = file_get_contents($this->_file);
$size = filesize($this->_file);
$hexString = '';
for ($i = 0; $i < $size; $i++) {
$hex = dechex(ord($imageData{$i}));
if (strlen($hex) == 1) {
$hex = '0' . $hex;
}
$hexString .= $hex;
}
return $hexString;
但我不知道 Java 的类似物dechex(ord($imageData{$i}))
是什么。:( 我只得到了Integer.toHexString()
功能,它负责处理dechex
部分......
谢谢大家。:)