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

如果我假设文件是​​逐行读取的,这是可能的。第一行将说明预期有多少个标题,第二行(以及每个标题行)将说明标题类型以及在下一个标题之前预期有多少问题。问题行将告诉有多少后续行包含答案内容。答案行将只包含内容。

所有这些都是为了说明我对“保存文件”的需求。

最后一段

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 回答