Как создать линеаризованный (быстрый веб-просмотр) PDF с использованием pdfbox 2.0 в Java?

У меня есть несколько файлов.jpg, которые я использую для создания PDF. Я искал часы за часами без особой удачи в поиске способа линеаризации PDF! Мне трудно найти какую-либо документацию или руководства о том, как это сделать, и теперь я надеюсь получить некоторую помощь здесь и сейчас. Я также изучил документацию по API pdfbox 2.0, но не смог найти ничего полезного. Я использовал pdfbox на Ocassion раньше, но в основном для разделения или объединения PDF-файлов. Вот что я написал до сих пор:

private static void createPdf()
{
    PDDocument doc = new PDDocument();
    try
    {
        File images = new File("images/");
        for (File image : images.listFiles())
        {
            PDPage page = new PDPage();
            doc.addPage(page);
            BufferedImage awtImage = ImageIO.read(image);
            PDImageXObject pdImageXObject = LosslessFactory.createFromImage(doc, awtImage);
            PDPageContentStream contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true);
            contentStream.drawImage(pdImageXObject, 0, 0, (float) (awtImage.getWidth() / 5.4), (float) (awtImage.getHeight() / 5.9));
            contentStream.close();
        }
        doc.setVersion(1.6f);
        doc.save("pdf/images_v1.6.pdf");
    }
    catch (Exception io)
    {
        System.err.println(" -- fail --" + io);
    }
    finally
    {
        try
        {
            doc.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

Любые предложения с благодарностью!

РЕДАКТИРОВАТЬ с решением: я попробовал qpdf, как предлагает Тилман Хаушерр, и это решило мою проблему. Вот пример:

file 400dpi_90.pdf qpdf --show-linearization 400dpi_90.pdf qpdf --linearize --min-version=1.6 400dpi_90.pdf 400dpi_90-out.pdf file 400dpi_90-out.pdf qpdf --check-linearization 400dpi_90-out.pdf

Результат выше показан ниже:

400dpi_90.pdf: PDF document, version 1.4 400dpi_90.pdf is not linearized 400dpi_90-out.pdf: PDF document, version 1.6 400dpi_90-out.pdf: no linearization errors

2 ответа

Решение

Извините за плохие новости, но они не доступны в PDFBox и не будут, смотрите обсуждение здесь. Я предлагаю вам вместо этого обработать файл с помощью qpdf.

К сожалению, насколько я знаю, нет библиотеки с открытым исходным кодом, поддерживающей создание линеаризованного PDF-файла.

Причина может быть: "Поддержка линеаризованного PDF будет стоить много работы, но в большинстве случаев это бесполезно".

Как мы знаем, скорость сети того времени (1996), в котором был разработан линеаризованный PDF, была очень низкой. Таким образом, линеаризованный PDF был необходим для быстрого просмотра первой страницы и быстрого перехода к произвольной странице PDF при открытии в Интернете, хотя реализация создания линеаризованного PDF очень сложна. Но скорость сети сейчас намного выше. Размеры большинства файлов PDF составляют менее 10 МБ, а загрузка одного файла PDF может занять менее одной секунды. Видите ли, в настоящее время не важно, является ли ли один PDF-файл линеаризованным. Поскольку линеаризация не нужна, и реализация линеаризованного PDF потребует много работы, поэтому нет библиотеки с открытым исходным кодом, которая бы это делала.

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

PS: Я разрабатываю функцию генерации линеаризованного PDF для компании, в которой я работаю более 2 месяцев. Поэтому я могу сказать, что ни один разработчик с открытым исходным кодом не сделает этого, потому что в большинстве случаев это очень скучно и бесполезно. Причина, по которой я это делаю: компания платит мне зарплату. π_π

Другие вопросы по тегам