Разделение PDF с использованием смещения и длины — IBM ONDEMAND (комбинированный PDF)

Необходимо получить смещение и длину в байтах каждой страницы в PDF. Например, значение смещения первой страницы будет равно 0, а длина будет равна длине страницы в байтах.

У меня есть требование передать индексный файл для PDF в инструмент IBM Ondemand, это репозиторий PDF. Мне нужно объединить отдельные PDF-файлы, рассчитать смещение и длину каждого PDF-файла, создать индексный файл с этими двумя параметрами и передать его инструменту.

Инструмент будет использовать индексный файл для разделения PDF-файла (несколько PDF-файлов, объединенных в один) на основе смещения и длины, переданных в качестве свойств (индексный файл).

Я использовал itext, чтобы получить начало и конец страницы с помощью закладки. Необходимо вычислить смещение и длину байтов для каждой страницы.

Предложите, есть ли способ получить индекс (начало страницы) и конец страницы с точки зрения байтов.

Любая помощь будет оценена


person Magesh    schedule 21.03.2016    source источник
comment
Мне кажется, или этот вопрос просто бессмыслен? Не могли бы вы перефразировать это? Похоже, вы делаете некоторые предположения о формате файла PDF, которые неверны.   -  person Bruno Lowagie    schedule 21.03.2016


Ответы (2)


Вы никак не можете этого сделать. Пожалуйста, прочтите спецификацию формата файла PDF (здесь среди прочего http://www.adobe.com/devnet/pdf/pdf_reference.html).

Файл PDF содержит «объекты», а страница имеет описание страницы, записанное в объекте потока, и может (и в большинстве случаев будет) использовать различные другие объекты, которые, по всей вероятности, разбросаны по файлу.

Вы неправильно понимаете, как создаются PDF-файлы, и вам нужно понять, прежде чем вы начнете спотыкаться, пытаясь реализовать это, иначе вы потеряете много времени.

person David van Driessche    schedule 21.03.2016

Этот вопрос нужно задать на форуме IBM Ondemand. Я думал, что могу использовать Itext, чтобы взломать его. Как упоминал Дэвид, мы не можем работать с такими неструктурированными PDF-файлами с помощью Itext. Ниже приведен фрагмент кода для решения проблемы.

Оба 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());
    }
}
person Magesh    schedule 21.03.2016