Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用itextpdf从3d pdf提取缩略图_Java_Pdf_Itext - Fatal编程技术网

Java 使用itextpdf从3d pdf提取缩略图

Java 使用itextpdf从3d pdf提取缩略图,java,pdf,itext,Java,Pdf,Itext,当我使用Adobe Acrobat Reader查看3D pdf(又名pdf/E)时,它会在左侧显示一个缩略图: 是否可以使用itext从pdf中提取此缩略图,或者是由查看者动态生成的?这是可能的,但从我看到的情况来看,我怀疑您的pdf是否有特定的缩略图图像,而只是在缩略图中呈现页面 首先,我们根据PDF规范创建一个具有缩略图的PDF,因为我找不到缩略图。ISO-3200-2(PDF规范)第12.3.4节规定如下: 页面的缩略图应为页面对象中的Thumb项指定的图像XObject 使用iTex

当我使用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”)
解析为图像的完整路径:

这给了我们

您将注意到,Acrobat和Reader都不显示缩略图,它们只是呈现页面。其他读者确实使用我们的新缩略图:

由于您使用的是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
}

这是可能的,虽然从我所看到的我怀疑你的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”)
解析为图像的完整路径:

这给了我们

您将注意到,Acrobat和Reader都不显示缩略图,它们只是呈现页面。其他读者确实使用我们的新缩略图:

由于您使用的是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
}

谢谢你详尽的回答。你说得对:pdf不包含缩略图。我希望是这样,因为视图角度与pdf中预定义的角度不同(+放大时拇指看起来是像素化的)。事实证明,Acrobat DC在您第一次打开“拇指”选项卡时创建拇指。因此,如果您已经操纵了视图,它会改变拇指:)谢谢您详细的回答。你说得对:pdf不包含缩略图。我希望是这样,因为视图角度与pdf中预定义的角度不同(+放大时拇指看起来是像素化的)。事实证明,Acrobat DC在您第一次打开“拇指”选项卡时创建拇指。因此,如果您已经操纵了视图,它会更改拇指:)