在代码中检测PDF包或产品组合

时间:2011-05-06 18:03:58

标签: java pdf package portfolio

有没有人知道如何检测给定的PDF文件是PDF包还是PDF包,而不是“常规”PDF?我更喜欢Java解决方案,虽然因为我还没有找到关于检测特定类型的PDF的任何信息,我将采取我可以得到的东西,然后他们试图找出Java解决方案

(在搜索过去的问题时,似乎有很多人不知道像PDF包和PDF包这样的东西。通常,它们都是Adobe允许多个独立的PDF打包成一个单个PDF文件。在Reader中打开PDF包,向用户显示嵌入式PDF的列表,并允许从那里进一步查看.PVF组合看起来有点复杂 - 它们还包括用于嵌入文件的基于Flash的浏览器,以及然后允许用户从那里提取离散的PDF。我的问题,以及我希望能够在代码中检测它们的原因是因为OS X的内置Preview.app无法读取这些文件 - 所以我想至少警告一下我的网络应用程序的用户,上传它们会导致跨平台的兼容性降低。)

2 个答案:

答案 0 :(得分:0)

这个问题很老,但有人想知道,这是可能的。可以使用以下命令使用Acrobat和JavaScript完成此操作。

 if (Doc.collection() != null)
 {
     //It Is Portfolio
 }

Acrobat JavaScript API说:“从Doc.collection属性获取集合对象。当没有PDF集合(也称为PDF包和PDF包)时,Doc.collection返回空值。集合对象用于在集合中设置初始文档,设置集合的初始视图,以及获取,添加和删除集合字段(或类别)。“

答案 1 :(得分:0)

I'm also facing same problem while extracting data through kofax,  but i got solution and its working fine need to add extra jar for Document class.

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

public class PDFPortfolio {

    /**
     * @param args
     */
    public static void main(String[] args) {

        com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document("e:/pqr1.pdf");
        // get collection of embedded files
        com.aspose.pdf.EmbeddedFileCollection embeddedFiles = pdfDocument.getEmbeddedFiles();
        // iterate through individual file of Portfolio
        for(int counter=1; counter<=pdfDocument.getEmbeddedFiles().size();counter++)
        {
            com.aspose.pdf.FileSpecification fileSpecification = embeddedFiles.get_Item(counter);
            try {
                InputStream input = fileSpecification.getContents();
                File file = new File(fileSpecification.getName());
                // create path for file from pdf
              //  file.getParentFile().mkdirs();
                // create and extract file from pdf
                java.io.FileOutputStream output = new java.io.FileOutputStream("e:/"+fileSpecification.getName(), true);
                byte[] buffer = new byte[4096];
                int n = 0;
                while (-1 != (n = input.read(buffer)))
                output.write(buffer, 0, n);

                // close InputStream object
                input.close();
                output.close();
                } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

}