PDF和“大规模”XMP数据存储

时间:2012-09-07 10:00:23

标签: java itext xmp

所以我有一个程序可以创建一个输出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创建一个特殊的读取器,寻找,并解析这些行。

1 个答案:

答案 0 :(得分:2)

这是我解释你的问题的方式。

您希望创建一个人类可读的PDF,并呈现标题文本,问题和可能的答案。

同时,您希望PDF能够被一个对PDF一无所知的程序读取。程序读取的内容不同于人类可以阅读的内容,因为它具有某种结构。

我没有看到与PDF的链接。我会将您希望机器可读的数据存储为PDF的附件,并让您的程序提取该附件。如果您的程序可以使用iText,那么它就是小菜一碟。如果您的程序只能读取字节,那么您可以尝试不同的选项:

(1)将数据存储为未压缩的流。通过添加某种长识别字符串作为第一行数据来查找未压缩的流(这或多或少是由无法解释PDF语法的软件检测XMP流的方式)。

(2)将数据存储为压缩流,但在压缩流的流字典中添加一个额外的条目。循环遍历PDF文件中的对象,查找具有该特定自定义键/值对的流字典,读取流并解压缩。

如果我误解了你的问题,请重新说明。