1

質問データベースの構築に使用されるプログラムがあります。コンテンツがそのサイトからダウンロードされたことをユーザーに知らせたいサイト用に作成しています。そのため、出力を PDF にする必要があります。ほとんどの人が表示でき、ほとんど誰も編集できません (単純なファイル タイプとは異なり、フッターや透かしなどを削除します)。それがPDFでなければならない理由を説明しています。

このプログラムは、新しいデータベースを作成したり、既存のデータベースを拡張したりする多数のユーザーによって使用されます。そのため、出力を複数のファイルとして形成することは、私が達成したいことを達成するための非常にずさんで非効率的な方法です (ユーザーにとっては複雑になります)。

そして、私がやりたいことは、作成したプログラムでまだ編集可能な PDF ファイルを作成することです。

プログラムで読み取り可能なカスタムファイルタイプを出力PDFに実装することで、これを実現したいと考えています。

私はそれを行う3つの方法を思いつきました:

  1. ファイルをPDFに添付し、それを含むPDFの一部を破損して、PDFにファイルが含まれていることを認識させないため、ユーザーが(簡単に)気付くことができなくなります。ドキュメントを読んだら、破損を元に戻し、多くの PDF ライブラリの 1 つを使用してファイルを抽出します。

  2. 最初または最後のページのどこかにPDFに追加される画像内にファイルを隠し、何らかの形で(まだ解決する必要があります)世間の目から隠します。その場所がわかれば、PDF ライブラリを使用して比較的簡単に取得できるはずです。

  3. PDF内の行の最初の文字として「%」記号を追加すると、PDFリーダー(少なくともAdobeリーダー)によって行全体が無視される(Javaの「//」と同様)ことを学びました。エンドユーザーがそれを認識していなくても、PDFに必要な数の行を追加します(場所がわかっている場合)。そのようにして、カスタムファイル全体を PDF に実装できました。ここでの問題は、実際には Java の入力リーダーの 1 つを使用して PDF を読み取らなければならないことですが、どれがどれかわからないということです。PDF はバイナリ ファイルなので、テキスト ファイルのように読めないことは理解しています (そうですか?)。

結局、私は方法番号 3 を使用することにしました。誰かがより良いアイデアを持っていない限り、条件は次のとおりです。 1. 1 つのファイルのみ。そしてそのファイルはPDFです。2. ユーザーは追加を認識してはなりません。

問題は、PDF をファイルとして読み取る方法がわからないことです (PDF ライブラリを使用して PDF として読み取るつもりはありません)。

  1. それで、誰かがより良い考えを持っていますか?
  2. そうでない場合、PDFをFILEとして読み取るにはどうすればよいので、出力は文字の配列(改行検出付き)であり、コンテンツを追加してファイル全体を書き換えますか?
4

2 に答える 2

0

1 と 0 だけです。RandomAccessFile を使用して読み取りを開始してください。PDF 仕様では、有効な改行文字とは何かを定義しています (いくつかあります)。16 進エディターをつかんで PDF を開くと、少なくとも感覚を掴み始めることができます。ただし、行を挿入する場所には注意してください。obj エントリへの外部参照テーブルのオフセットを台無しにしないように、ファイルの末尾に行を追加する必要があります。

興味深いかもしれない関連する質問は次のとおりです。PDF解析ファイルの予告編

startxref 行の直前にコメントを入れることをお勧めします。他の場所に配置すると、物が移動して外部参照テーブル ポインタが壊れる可能性があります。

したがって、特別なコメントを挿入するための単純なアルゴリズムは次のようになります。

ファイルの最後に移動する startxref を逆方向に検索する startxref の直前に特別なコメントを挿入します - 特別なコメントの最後に必ず改行文字を挿入してください PDF を保存します

これは、16 進エディターで手動で行うことができます (また行う必要があります)。

非常に重要: ユーザーはこれらのファイルへの変更を保存しますか? つまり、フォーム フィールドに入力した場合、保存を押しますか? そうである場合、保存中にコメント行が削除される可能性があります (また、異なる PDF ビューアの異なるバージョンでは、この点で異なる動作をする可能性があります)。

XMP タグは、あなたがやろうとしていることを行うための正しい方法です。XML セグメント全体を埋め込むことができます。XML として表現できないデータ構造を考え出すのは難しいと思います。

個人的にはこれに iText を使用することをお勧めしますが、偏見があります (私は開発者の 1 人です)。iText In Action book には、PDF への XMP データの埋め込みに関する優れた章があります。本からのサンプル コードを次に示します (これをお勧めします): http://itextpdf.com/examples/iia.php?id=217

于 2012-09-07T05:04:22.423 に答える