私はJavaでほとんどゼロから単純なRTFドキュメントを書き込もうとしており、ドキュメントにJPEGを埋め込もうとしています。RTFドキュメント(JPEGをWMFに変換したワードパッドによって生成された)に埋め込まれたJPEG(3つの白いピクセルと左上の黒いピクセルで構成される2x2ピクセルのJPEG)の例を次に示します。
{\pict\wmetafile8\picw53\pich53\picwgoal30\pichgoal30
0100090000036e00000000004500000000000400000003010800050000000b0200000000050000
000c0202000200030000001e000400000007010400040000000701040045000000410b2000cc00
020002000000000002000200000000002800000002000000020000000100040000000000000000
000000000000000000000000000000000000000000ffffff00fefefe0000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
0000001202af0801010000040000002701ffff030000000000
}
RTF仕様を読んでいて、画像がJPEGであることを指定できるようですが、ワードパッドは常に画像をWMFに変換するため、埋め込まれたJPEGの例を見ることができません。そのため、JPEGからWMFなどにトランスコードする必要が生じる可能性もあります。
しかし、基本的には、ファイルURLを指定してJPEGの2進数または16進数(仕様、p.148:「これらの画像は16進数(デフォルト)または2進数形式にすることができます。」)形式を生成する方法を探しています。
ありがとう!
編集:私はストリームのものがうまく機能していると思いますが、それでもそれをエンコードする方法を正確に理解していません。なぜなら、私が何をしていても、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
...。
皆さんありがとう。:)