1

そのため、メタデータを埋め込んで(プログラムで)読み取り可能にしたい出力PDFファイルを作成するプログラムがあります。そして、それは非常に多くのデータです。

XMP 形式を使用してこれを行うように提案されました。しかし、それがうまくいくかどうかはわかりません。

このすべてを読みたくない場合は、最後の段落にスキップしてください。質問が理解できない場合は、ここに戻ってください...

私のファイルは次のような構造を持つ可能性があります:

Heading1
<indent>1.Question
<indent><indent>a)answer
<indent><indent>b)answer
<indent>2.Question
<indent><indent>a)answer
<indent><indent>b)answer
<indent><indent>c)answer
<indent>3.Question
<indent>4.Question
Heading2
<indent>1.Question
<indent>2.Question
<indent><indent>a)answer

すべての質問には親の見出しがあり、すべての回答には親の質問があります。このようなファイルには、無制限の数の見出し、見出しごとの無制限の数の質問、および各質問 0 ~ 5 個の回答を含めることができます。

プログラムが GUI で同じファイルをアセンブルできるようにするには、いくつかの情報が必要です。

次のことを知る必要があります。

  • 見出しの数 (整数)

  • 見出しの種類 (ブール値) (見出しには質問だけを含める必要はないため、これは必要ですが、簡単にするために例では他の種類の見出しを省略しました)

  • 各見出し/質問/回答のテキストを含む文字列

例に従って、これは私の読み取り可能なファイルがどのように見えるかです:

2                  //heading number
Q/4/headingText    //type of heading/number of question/content
2/questionText     //number of answers/content
answerText         //content
answerText         //etc...
3/questionText
answerText
answerText
answerText
0/questionText
0/questionText
Q/2/headingText
0/questionText
1/questionText
answerText

これは、ファイルが行ごとに読み取られると仮定すると可能です。最初の行は予想される見出しの数を示し、2 行目 (およびすべてのヘッダー行) は見出しの種類と次の見出しの前に予想される質問の数を示します。質問行は、回答コンテンツが含まれる後続行の数を示します。回答行にはコンテンツのみが含まれます。

これはすべて、「保存ファイル」に必要なものを説明するためのものです。

最後の段落

XMP でそれが可能なのですか? プロパティを行ごとに読み取り、複数の値を持つプロパティを関連付けることができますか、または少なくとも何らかの方法で、この機能を維持するために実装できる方法でいくつかのプロパティに分割できますか?

最も重要な質問は、XMP リーダー/ライター (iText) が XMP ファイルの非固定サイズを処理できるかどうかです。

私の代替案は、PDF ファイルの末尾にこれらの行を添付し (相互参照表を台無しにしないため)、それらをコメントアウトし (% を使用)、Java でそれらを探して解析する特別なリーダーを作成することです。行。

4

1 に答える 1

2

これが私があなたの質問を解釈する方法です。

人間が読める PDF を作成し、ヘッダー テキスト、質問、および可能な回答をレンダリングしたいと考えています。

同時に、PDF について何も知らないプログラムでも PDF を読み取れるようにしたいと考えています。プログラムが読み取るコンテンツは、何らかの構造を持っているという意味で、人間が読み取ることができるコンテンツとは異なります。

PDFへのリンクが表示されません。機械で読み取り可能なデータを PDF の添付ファイルとして保存し、プログラムでその添付ファイルを抽出します。プログラムで iText を使用できる場合、それは簡単なことです。プログラムがバイトしか読み取れない場合は、別のオプションを試すことができます。

(1) データを圧縮されていないストリームとして保存します。ある種の長い認識可能な文字列をデータの最初の行として追加して、圧縮されていないストリームを見つけます (これは、PDF 構文を解釈できないソフトウェアによって XMP ストリームが検出される方法とほぼ同じです)。

(2) データを圧縮ストリームとして保存しますが、圧縮ストリームのストリーム ディクショナリに余分なエントリを追加します。PDF ファイル内のオブジェクトをループし、その特定のカスタム キーと値のペアを含むストリーム ディクショナリを探し、ストリームを読み取って圧縮解除します。

あなたの質問を誤解した場合は、言い換えてください。

于 2012-09-07T15:51:23.890 に答える