/** * Create a new spread that reflects the * * @param masterSpreadName * @return * @throws Exception */ public Spread addSpread(String masterSpreadName) throws Exception { Spread spread = newSpread(masterSpreadName); // Get the corresponding master spread, clone its data source, // and use that to load the spread. spread.setTransformationMatrix(this.spreads.size()); return spread; }
/** * @param child * @return * @throws Exception */ private Spread newSpread(Class<? extends Spread> clazz, Element child) throws Exception { Spread obj = (Spread) newObject(clazz, child); this.addChild(obj); // The spreadIndex parameter is zero-index // for spread in list of spreads. obj.setSpreadIndex(spreads.size()); if (!(obj instanceof MasterSpread)) { this.spreads.add(obj); } obj.postLoad(); return obj; }
/** * @param masterSpreadName * @return * @throws Exception */ public Spread newSpread(String masterSpreadName) throws Exception { Spread newSpread = new Spread(); assignIdAndRegister(newSpread); newSpread.setParent(this); newSpread.setSpreadIndex(this.spreads.size()); this.spreads.add(newSpread); MasterSpread masterSpread = this.getMasterSpread(masterSpreadName); if (masterSpread == null) { logger.info("Master spread \"" + masterSpreadName + "\" not found. Master spreads: "); for (String key : this.masterSpreads.keySet()) { logger.info(" \"" + key + "\""); } throw new Exception("Failed to find master spread \"" + masterSpreadName + "\""); } newSpread.setTransformationMatrix(this.spreads.size()); // Note that masters apply to pages, not spreads. for (Page page : newSpread.getPages()) { page.setAppliedMaster(masterSpread); } this.addChild(newSpread); return newSpread; }
/** * Construct a new document by cloning an existing document, copying only the master spreads. Note * that this is different from a generic loadObject(InDesignObject) operation (as for * InDesignObject), which is a full copy. * * @param inddDoc * @throws Exception */ public InDesignDocument(InDesignDocument inddDoc, boolean removeSpreads) throws Exception { Document cloneSourceDoc = inddDoc.getDataSource(); if (cloneSourceDoc == null) throw new Exception("Got null data source from input InDesign document."); this.dataSource = (Document) cloneSourceDoc.cloneNode(true); logger.debug("InDesignDocument(inddDoc): setting dataSource to " + dataSource); Element clonedDataSource = this.dataSource.getDocumentElement(); if (removeSpreads) { // Now delete the components that hold actual content, namely spreads and stories: for (Element spread : DataUtil.getElementChildren(clonedDataSource, null, SPRD_TAGNAME)) { clonedDataSource.removeChild(spread); } // FIXME: For stories, we only want to delete stories that are associated with frames on // normal spreads, not master spreads. So for now just leaving them in. // for (Element story : DataUtil.getElementChildren(clonedDataSource, null, CFLO_TAGNAME)) { // clonedDataSource.removeChild(story); // } } this.load(clonedDataSource); this.spreads.clear(); // Just to make sure // Now make sure there is a spread as a document must have at least one spread. Spread spread = this.newSpread(this.getMasterSpreads().get(0).getName()); spread.addPage(1); }
public void loadObject(Element dataSource) throws Exception { super.loadObject(dataSource); }