【发布时间】:2015-10-25 16:59:02
【问题描述】:
我有一个包含文件夹、子文件夹和文件的投资组合 pdf。我需要在 java 中使用 iText 提取与文件夹、子文件夹和文件相同的结构。我只得到带有 EMBEDEDFILES 的文件。获取文件夹的方式也是什么。
请找到我正在使用的代码。这段代码只给了我文件夹中存在的文件。
public static void extractAttachments(String src, String dir) throws IOException
{
File folder = new File(dir);
folder.mkdirs();
PdfReader reader = new PdfReader(src);
PdfDictionary root = reader.getCatalog();
PdfDictionary names = root.getAsDict(PdfName.NAMES);
System.out.println(""+names.getKeys().toString());
PdfDictionary embedded = names.getAsDict(PdfName.EMBEDDEDFILES);
System.out.println(""+embedded.toString());
PdfArray filespecs = embedded.getAsArray(PdfName.NAMES);
System.out.println(filespecs.getAsString(root1));
for (int i = 0; i < filespecs.size();)
{
extractAttachment(reader, folder, filespecs.getAsString(i++),
filespecs.getAsDict(i++));
}
}
protected static void extractAttachment(PdfReader reader, File dir, PdfString name, PdfDictionary filespec)
throws IOException
{
PRStream stream;
FileOutputStream fos;
String filename;
PdfArray parent;
PdfDictionary refs = filespec.getAsDict(PdfName.EF);
//System.out.println(""+refs.getKeys().toString());
for (Object key : refs.getKeys())
{
stream = (PRStream) PdfReader.getPdfObject(refs.getAsIndirectObject((PdfName) key));
filename = filespec.getAsString((PdfName) key).toString();
// System.out.println("" + filename);
fos = new FileOutputStream(new File(dir, filename));
fos.write(PdfReader.getStreamBytes(stream));
fos.flush();
fos.close();
}
}
【问题讨论】:
-
您好,欢迎来到 StackOverflow!请花点时间阅读 ho 提出一个好问题:stackoverflow.com/help/how-to-ask
-
您是否使用iText RUPS查看了PDF?您是否能够发现 PDF 中的文件夹结构是如何定义的?正如@Mauker 解释的那样,您的问题需要做更多的工作。
-
嗨,我没有查看 iText RUPS,如果有任何方法或类帮助我从 iText Rups 中提取文件夹结构,请分享,即使我在您的推荐后搜索相同但没有得到任何事情,其次,当我搜索 PdfName 变量时,我只了解结构在 PDF 中定义为 COLLECTION 作为 KEY 的东西,没有任何提供 /Folders 的变量,即使我通过 new PdfName("Folders") 尝试过但没有得到任何东西而不是每次都出现空指针异常。
-
@Nitesh 正如 Mauker 和 Bruno 所暗示的那样,您的问题需要更多细节。请分享 A 一个示例 PDF 组合和 B 您迄今为止尝试提取文件夹结构的代码。您之前的评论表明有问题的投资组合不包含文件夹(根据 PDF 规范的 Adobe ExtensionLevel 3),而只是看起来像文件夹的东西,或者您的代码是错误的。因此,PDF 和代码都需要。
-
你能分享给我你的邮件ID,以便我可以分享pdf文件。在这里不可能附加相同的。我将附上相同 pdf 的屏幕截图和文件夹以寻求帮助
标签: pdf itext directory portfolio