解析pdf文档的字体是否嵌入、索引图、页数、内文尺寸

在网上发现并没有关于pdf文档内索引图等的解析,自己查API发现TM官方也没有关于类似的方法,只能自己迂回前进。每一步都经过debug,才会更清晰的了解对象结构。

废话不多说,直接来干货。菜鸟一枚,大神轻喷。

工具:pdfbox 2.0    eclipse;

主要代码: InputStream file = new FileInputStream(resource + new String(fileName.getBytes("UTF-8"), "UTF-8"));//获取远程pdf文件
PDDocument document = PDDocument.load(file);//获取pdf对象
PDDocumentCatalog catalog = document.getDocumentCatalog();//获取pdf对象目录
COSDictionary cd = catalog.getCOSObject();//获取对象字典(这丫到底怎么叫我也搞不清楚)

map.put("page", document.getNumberOfPages());
map.put("iskey", "false");//是否有索引图,默认false没有
map.put("embed", "true");//是否嵌入字体,默认嵌入
Set set = new HashSet();
for (PDPage p : document.getPages()) {//这是获取页面对象进行遍历
set.add(document.getPage(0).getTrimBox().getHeight() + “*” +document.getPage(0).getTrimBox().getWidth();

PDResources resourses = p.getResources();//获取页面资源(字面意思)
if (resourses != null) {
for (COSName key : resourses.getXObjectNames()) {//按照COSName取出资源里的对象,通过debug发现此对象类型类似于map
if (resourses.isImageXObject(key)) {//判断对象是否为image
PDImageXObject img = (PDImageXObject) resourses.getXObject(key);
if (img.getColorSpace().getName().equals("Indexed")) {//indexed表示索引。.getColorSpace().getName()是pdf图像属性名称
map.put("iskey", "true");
break;
}
}
}
for (COSName key : resourses.getFontNames()) {//按照COSName取出资源里的字体对象
try {
if (resourses.getFont(key) != null) {
PDFont font = resourses.getFont(key);
if (font != null && !font.isEmbedded()) {//判断是否嵌入
map.put("embed", "false");
break;
}
}
} catch (Exception r) {
continue;
}
}
}
}

每句都有注释,可能略粗糙,慢慢进步,努力学习。祝大家好运~

(转载请注明出处  谢谢)

你可能感兴趣的:(javaweb)