【问题标题】:Detecting a PDF Package or Portfolio in code检测代码中的 PDF 包或投资组合
【发布时间】:2011-08-20 09:24:04
【问题描述】:

有没有人知道一种方法来检测给定的 PDF 文件是 PDF 包还是 PDF 包,而不是“常规”PDF?我更喜欢 Java 解决方案,尽管由于我还没有找到关于检测特定类型 PDF 的任何信息,我会尽我所能,然后他们会尝试找出 Java 解决方案.

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

【问题讨论】:

标签: java pdf package portfolio


【解决方案1】:

这个问题很老,但如果有人想知道,这是可能的。可以通过 Acrobat 和 JavaScript 使用以下命令来完成。

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

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

【讨论】:

    【解决方案2】:
    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();
                }
            }
    
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 2011-11-16
      • 2012-10-22
      • 1970-01-01
      相关资源
      最近更新 更多