/** * Gets all embedded OLE2 objects from the Workbook. * * @return the list of embedded objects (a list of {@link HSSFObjectData} objects.) */ public List<HSSFObjectData> getAllEmbeddedObjects() { List<HSSFObjectData> objects = new ArrayList<>(); for (HSSFSheet sheet : _sheets) { getAllEmbeddedObjects(sheet, objects); } return Collections.unmodifiableList(objects); }
/** * Gets all embedded OLE2 objects from the Workbook. * * @param sheet embedded object attached to * @param objects the list of embedded objects to populate. */ private void getAllEmbeddedObjects(HSSFSheet sheet, List<HSSFObjectData> objects) { HSSFPatriarch patriarch = sheet.getDrawingPatriarch(); if (null == patriarch){ return; } getAllEmbeddedObjects(patriarch, objects); } /**
/** * Recursively iterates a shape container to get all embedded objects. * * @param parent the parent. * @param objects the list of embedded objects to populate. */ private void getAllEmbeddedObjects(HSSFShapeContainer parent, List<HSSFObjectData> objects) { for (HSSFShape shape : parent.getChildren()) { if (shape instanceof HSSFObjectData) { objects.add((HSSFObjectData) shape); } else if (shape instanceof HSSFShapeContainer) { getAllEmbeddedObjects((HSSFShapeContainer) shape, objects); } } } @Override
/** * Gets all embedded OLE2 objects from the Workbook. * * @return the list of embedded objects (a list of {@link HSSFObjectData} objects.) */ public List<HSSFObjectData> getAllEmbeddedObjects() { List<HSSFObjectData> objects = new ArrayList<>(); for (HSSFSheet sheet : _sheets) { getAllEmbeddedObjects(sheet, objects); } return Collections.unmodifiableList(objects); }
/** * Gets all embedded OLE2 objects from the Workbook. * * @param sheet embedded object attached to * @param objects the list of embedded objects to populate. */ private void getAllEmbeddedObjects(HSSFSheet sheet, List<HSSFObjectData> objects) { HSSFPatriarch patriarch = sheet.getDrawingPatriarch(); if (null == patriarch){ return; } getAllEmbeddedObjects(patriarch, objects); } /**
/** * Recursively iterates a shape container to get all embedded objects. * * @param parent the parent. * @param objects the list of embedded objects to populate. */ private void getAllEmbeddedObjects(HSSFShapeContainer parent, List<HSSFObjectData> objects) { for (HSSFShape shape : parent.getChildren()) { if (shape instanceof HSSFObjectData) { objects.add((HSSFObjectData) shape); } else if (shape instanceof HSSFShapeContainer) { getAllEmbeddedObjects((HSSFShapeContainer) shape, objects); } } } @Override
/** * Gets all embedded OLE2 objects from the Workbook. * * @return the list of embedded objects (a list of {@link HSSFObjectData} objects.) */ public List<HSSFObjectData> getAllEmbeddedObjects() { List<HSSFObjectData> objects = new ArrayList<HSSFObjectData>(); for (int i = 0; i < getNumberOfSheets(); i++) { getAllEmbeddedObjects(getSheetAt(i), objects); } return objects; }
/** * Gets all embedded OLE2 objects from the Workbook. * * @return the list of embedded objects (a list of {@link HSSFObjectData} objects.) */ public List<HSSFObjectData> getAllEmbeddedObjects() { List<HSSFObjectData> objects = new ArrayList<HSSFObjectData>(); for (int i = 0; i < getNumberOfSheets(); i++) { getAllEmbeddedObjects(getSheetAt(i).getSheet().getRecords(), objects); } return objects; }
import java.io.*; import java.net.URL; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.poifs.filesystem.*; import org.apache.poi.util.IOUtils; public class EmbeddedPdfInExcel { public static void main(String[] args) throws Exception { NPOIFSFileSystem fs = new NPOIFSFileSystem(new URL("http://jamesshaji.com/sample.xls").openStream()); HSSFWorkbook wb = new HSSFWorkbook(fs.getRoot(), true); for (HSSFObjectData obj : wb.getAllEmbeddedObjects()) { String oleName = obj.getOLE2ClassName(); DirectoryNode dn = (DirectoryNode)obj.getDirectory(); if(oleName.contains("Acro") && dn.hasEntry("CONTENTS")){ InputStream is = dn.createDocumentInputStream("CONTENTS"); FileOutputStream fos = new FileOutputStream(obj.getDirectory().getName()+".pdf"); IOUtils.copy(is, fos); fos.close(); is.close(); } } fs.close(); } }
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(args[0])); try (HSSFWorkbook workbook = new HSSFWorkbook(fs)) { for (HSSFObjectData obj : workbook.getAllEmbeddedObjects()) {
public static void loadEmbedded(HSSFWorkbook workbook) throws IOException { for (HSSFObjectData obj : workbook.getAllEmbeddedObjects()) {