有効なPDFを「Javaシリアライゼーションデータ」にすることはできますか?


1

私の読者(Zathura)が開けないPDFファイルがあります。それを開く別のリーダー(mupdf)があります。私はZathuraがファイルマジック値(最初の数バイト)の検出に依存していると信じています。なぜならそれはPDF以外の他のフォーマットを開くことができるからです。

検査の結果、私はそれが Java serialisation data, version 5

$ file document.pdf
document.pdf: Java serialization data, version 5

最初の数バイトを調べる:

00000000: aced 0005 7572 0002 5b42 acf3 17f8 0608 ....ur..[B......
00000010: 54e0 0200 0078 7000 0389 9525 5044 462d T....xp....%PDF-

通常、PDFは %PDF バイト0

最初の27バイトを削除すれば、ファイルを開くことができます。

$ dd if=~/Downloads/file.pdf skip=27 bs=1 of=/tmp/file.pdf

さらに詳しく調べると、このファイルはApache FOPバージョン1.1によって生成されたものです。私は、かなりのグーグルにもかかわらず、PDFのためのこのフォーマットの言及を見つけることができません。

これはPDFの有効なフォーマットですか?


更新 ヘッダーを少し掘り下げてみると、 'array'にPDFファイルのデータが含まれているJavaシリアライズ配列のように見えます。私は見た スペック シリアル化プロトコル、特に 文法の説明 27バイトのヘッダを次のようにデコードできます。

  • AC ED = STREAM_MAGIC ファイルの内容をシリアル化プロトコルとして識別します。

  • 00 05 = STREAM_VERSION 直列化バージョン。

  • 75 = TC_ARRAY
  • 72 = TC_CLASSDESC
  • 00 02 =クラス名の長さ
  • 5b 42 =クラス名 ur
  • AC F3 17 F8 06 08 54 E0 = SerialVersionUIDクラスのシリアルバージョン識別子
  • 02 =フラグ SC_SERIALIZABLE - オブジェクトはシリアル化をサポートします。
  • 00 00 =このクラスのフィールド数(ゼロ!)
  • 78 = TC_ENDBLOCKDATA
  • 70 = TC_NULL (オブジェクトには親クラスがありません)
  • 00 03 89 95 = "配列"の長さ= 231829 =データサイズ(バイト)

抽出されたPDFは確かに231829バイトの長さです

$ dd if=document.pdf skip=27 bs=1 | wc -c
231829 bytes 

これは、ファイルが破損しておらず、実際にはPDF文書を含むJavaの直列化配列であることを示しています。しかし、これは有効なPDFと見なされますか?

回答:


1

参照 これを言うために持っています:

3.4.1 File Header

The first line of a PDF file is a header identifying the version of the PDF
specification to which the file conforms. For a file conforming to PDF 1.7, 
the header should be

    %PDF−1.7

その行の私の解釈は、厳密に言えば、あなたが持っているファイルは ではない 有効なPDFファイル最初の行 終わり 正しい値ですが、その前に追加の「ゴミ」が含まれています。

とは言っても、それはPDFリーダーの実装次第です。 %PDF-x.x マジック、そして私の推測は彼らが最初のヒットするまでほとんど読むことだ 0D 0A あなたの場合は、PDFマーカーのすぐ後ろにあるのです。

シリアライゼーションデータが 0D 0A 値、それから私の推測はmupdfもそれを読むことができないだろうということです。


私は同じ答えを書いていましたが、あなたはほんの少し早くなりました。全くもって同じ意見です。適切なPDFリーダーがそのようなファイルを有効であると認めるべきではありません。余分なデータに関係なく、一部のユーザーが行うことは、運が良いことです。
Tonny

それはただの孤独です 0A それはヘッダ(仕様で提案されているように実際にはコメント行)の後に続きます - 0a 25aa abac ad0a しかし、仕様に準拠している人が対応していないのに、なぜもっとリラックスした読者が対応するのかということについてのあなたの主張は理にかなっています。
starfry

それの任意の組み合わせのようです 0A0D または 0D 0A 私のデスクトップには2つのPDFファイルがあり、もう1つは 0D もう片方は 0D 0A。 :)
Magnus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.