Я пытаюсь написать простой RTF-документ практически с нуля на Java, и я пытаюсь встраивать JPEG-документы в документ.Вот пример JPEG (2x2-пиксельный JPEG, состоящий из трех белых пикселей и черного пикселя в верхнем левом углу, если вам интересно), встроенный в документ RTF (созданный WordPad, который преобразовал JPEG в WMF):
{\pict\wmetafile8\picw53\pich53\picwgoal30\pichgoal30
0100090000036e00000000004500000000000400000003010800050000000b0200000000050000
000c0202000200030000001e000400000007010400040000000701040045000000410b2000cc00
020002000000000002000200000000002800000002000000020000000100040000000000000000
000000000000000000000000000000000000000000ffffff00fefefe0000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
0000001202af0801010000040000002701ffff030000000000
}
Я читал спецификацию RTF , и похоже, что вы можете указать, что изображение является JPEG, но поскольку WordPad всегда конвертирует изображения в WMF, я могу 'См. пример встроенного JPEG.Так что мне может также понадобиться перекодировать из JPEG в WMF или что-то в этом роде ...
Но в основном я ищу способ генерирования двоичного или шестнадцатеричного числа (Spec, стр.148: «Эти картинкиможет быть в шестнадцатеричном (по умолчанию) или двоичном формате. ") формате JPEG с указанным URL-адресом файла.
Спасибо!
РЕДАКТИРОВАТЬ: У меня естьЯ думаю, что с потоковыми вещами все в порядке, но я все еще не понимаю, как именно их кодировать, потому что, что бы я ни делал, он не читается в формате 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
части ....
Спасибо всем.:)