使用偏移量和长度分割 PDF - IBM ONDEMAND(组合 PDF)

问题描述 投票:0回答:3

需要获取PDF中每个页面的偏移量和字节长度。例如第一页偏移值将为0,长度将为页面的字节长度。

我需要将 PDF 的索引文件传递给 IBM Ondemand 工具,它是一个 PDF 存储库。我需要合并各个 PDF 文件,计算每个 PDF 的偏移量和长度,使用这两个参数创建索引文件并将其传递给工具。

该工具将利用索引文件根据作为属性(索引文件)传递的偏移量和长度来分割 PDF(将多个 PDF 合并为单个 PDF)。

我使用 itext 使用书签获取页面的开头和结尾。需要计算每页的字节偏移量和长度。

建议有什么方法可以获取索引(页面开头)和页面结尾(以字节为单位)。

如有任何帮助,我们将不胜感激

java pdf itext ondemand
3个回答
0
投票

您不能以任何方式这样做。请阅读 PDF 文件格式规范(此处以及其他地方 http://www.adobe.com/devnet/pdf/pdf_reference.html)。

PDF 文件包含“对象”,页面既具有记录在流对象中的页面描述,也可以(并且大多数会)使用很可能分散在文件周围的各种其他对象。

您误解了 PDF 文件的构建方式,在开始尝试实现此功能之前您需要先了解一下,否则您将浪费大量时间。


0
投票

这个问题需要在IBM Ondemand 论坛上提问。我想我可以利用 Itext 来破解它。正如 David 提到的,我们无法使用 Itext 处理此类非结构化 PDF。下面给出了解决问题的代码片段。

两个 PDF 都是使用纯 java 合并的。合并后的文件将有两个 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());
    }
}

0
投票

@Magesh

我不确定,这个问题你有解决办法吗? 我想我有同样的问题,需要按偏移量/长度分割 PDF。

欲了解更多说明。 我的场景是从 IBM CMOD 导出数据(索引/PDF)以在其他系统中使用。 (使用 arsdoc get ... -g -N -C ...)

如果有多个 PDF 文件(例如,arsdoc 找到 10 个索引/文件),arsdoc 将导出为 1 个大 PDF 文件,并将导出 1 个通用索引文件。但是,当我用普通 PDF 查看器打开时,只会看到第一个 PDF 文件,而通用索引将使用偏移量/长度,当 arsload 回 IBM CMOD 时,可以将 PDF 拆分回原始文件。 (例如,从一个大文件恢复为原始的 10 个 PDF 文件。)

© www.soinside.com 2019 - 2024. All rights reserved.