【发布时间】:2018-07-25 08:19:25
【问题描述】:
当我使用 Adobe Acrobat Reader 查看 3D pdf(又名 PDF/E)时,它会在左侧显示一个缩略图:
是否可以使用 itext 从 pdf 中提取此缩略图,还是由查看器动态生成?
【问题讨论】:
当我使用 Adobe Acrobat Reader 查看 3D pdf(又名 PDF/E)时,它会在左侧显示一个缩略图:
是否可以使用 itext 从 pdf 中提取此缩略图,还是由查看器动态生成?
【问题讨论】:
这是可能的,但从我所看到的情况来看,我怀疑您的 PDF 是否有特定的缩略图图像并且只是在缩略图中呈现页面。
首先,让我们根据 PDF 规范创建一个带有缩略图的 PDF,因为我找不到。 ISO-3200-2(PDF 规范)第 12.3.4 节规定如下:
页面的缩略图应该是由页面对象中的Thumb条目指定的图像XObject...
这可以像这样使用 iText 轻松创建:
PdfWriter writer = new PdfWriter(OUTPUT_FILE);
PdfDocument pdfDocument = new PdfDocument(writer);
Document document = new Document(pdfDocument);
document.add(new Paragraph("Hello world"));
PdfImageXObject thumbnail = new PdfImageXObject(ImageDataFactory.create(getInput("itext.png")));
pdfDocument.getFirstPage().getPdfObject().put(PdfName.Thumb, thumbnail.getPdfObject());
document.close();
getInput("itext.png") 解析为我们图像的完整路径:
这给了我们output.pdf
您会注意到,Acrobat 和 Reader 都不会显示缩略图 - 它们只是呈现页面。其他读者确实使用我们的新缩略图:
由于您使用的是阅读器,我认为这意味着 PDF 中的缩略图只是呈现的页面,因为缩略图似乎被忽略了。
为了回答您的问题,获取缩略图只是上面操作的逆过程——我们获取页面的字典并查找 /Thumb 条目
PdfReader reader = new PdfReader(OUTPUT_FILE);
PdfDocument pdfDocument = new PdfDocument(reader);
PdfStream thumbnailStream = pdfDocument.getFirstPage().getPdfObject().getAsStream(PdfName.Thumb);
if (thumbnailStream != null) {
PdfImageXObject thumbnail = new PdfImageXObject(thumbnailStream);
BufferedImage image = thumbnail.getBufferedImage();
//Output to file, memory, etc
}
【讨论】: