Как создать линеаризованный (быстрый веб-просмотр) 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 месяцев. Поэтому я могу сказать, что ни один разработчик с открытым исходным кодом не сделает этого, потому что в большинстве случаев это очень скучно и бесполезно. Причина, по которой я это делаю: компания платит мне зарплату. π_π