需要获取PDF中每个页面的偏移量和字节长度。例如,第一页偏移值为0,长度为页面的字节长度。
我需要将PDF的索引文件传递给IBM Ondemand工具,它是一个PDF存储库。我需要合并单个PDF文件计算每个PDF的偏移量和长度,使用这两个参数创建索引文件并将其传递给工具。
该工具将根据作为属性传递的偏移和长度(索引文件),使用索引文件将PDF(多个PDF合并为单个)拆分。
我使用itext来使用书签来获取页面的开头和结尾。需要计算每个页面的偏移量和字节长度。
建议是否有任何方法可以获取索引(页面开头)和页面结尾的字节数。
任何帮助将不胜感激
答案 0 :(得分:0)
你不能以任何方式做到这一点。请阅读PDF文件格式规范(此处以及其他地方http://www.adobe.com/devnet/pdf/pdf_reference.html)。
PDF文件包含"对象"并且页面具有记录在流对象中的页面描述,并且可以(并且通常将)使用很可能散布在文件周围的各种其他对象。
您误解了PDF文件的构建方式,在开始尝试实施此文件之前需要了解它,否则您将浪费大量时间。
答案 1 :(得分:0)
需要在IBM Ondemand论坛上询问此问题。我以为我可以利用Itext来破解它。正如David所说,我们无法使用Itext处理这类非结构化PDF。下面给出了解决问题的代码片段。
使用普通java合并PDF。合并后的文件将包含两个EOF,标题和预告片信息。
在Acrobat中打开时,它将读取最后一个文档信息并显示。当我们将长度和索引传递给ondemand时,它将拆分PDF并按预期显示。
public static void main(String[] args) throws IOException {
String sourceFile1Path = "C:\\sample1.PDF";
String sourceFile2Path = "C:\\sample1.PDF";
String mergedFilePath = "C:\\merged.PDF";
File[] files = new File[2];
files[0] = new File(sourceFile1Path);
files[1] = new File(sourceFile2Path);
File mergedFile = new File(mergedFilePath);
for (File file : files) {
FileWriter fstream = null;
BufferedWriter out = null;
fstream = new FileWriter(mergedFile, true);
out = new BufferedWriter(fstream);
FileInputStream fis = new FileInputStream(file);
BufferedReader in = new BufferedReader(new InputStreamReader(fis));
String aLine;
while ((aLine = in.readLine()) != null) {
out.write(aLine);
out.newLine();
}
out.close();
fstream.close();
fis.close();
in.close();
System.out.println("File Length: " + file.getName() + " : " + new File(mergedFilePath).length());
}
}