Add some limited XDGF documentation
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1709357 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e3365dfaeb
commit
879ca64994
@ -40,7 +40,9 @@ import com.microsoft.schemas.office.visio.x2012.main.PageContentsType;
|
|||||||
import com.microsoft.schemas.office.visio.x2012.main.ShapeSheetType;
|
import com.microsoft.schemas.office.visio.x2012.main.ShapeSheetType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Container of shapes for a page in a visio document
|
* Container of shapes for a page in a Visio diagram. Shapes are not
|
||||||
|
* necessarily literal shapes in the diagram, but is the term that is
|
||||||
|
* used to describe the basic elements that make up a Visio diagram.
|
||||||
*/
|
*/
|
||||||
public class XDGFBaseContents extends XDGFXMLDocumentPart {
|
public class XDGFBaseContents extends XDGFXMLDocumentPart {
|
||||||
|
|
||||||
@ -105,6 +107,7 @@ public class XDGFBaseContents extends XDGFXMLDocumentPart {
|
|||||||
//
|
//
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Draws the contents of a page onto a Graphics2D object
|
||||||
*
|
*
|
||||||
* @param graphics
|
* @param graphics
|
||||||
*/
|
*/
|
||||||
@ -128,8 +131,7 @@ public class XDGFBaseContents extends XDGFXMLDocumentPart {
|
|||||||
public List<XDGFShape> getTopLevelShapes() {
|
public List<XDGFShape> getTopLevelShapes() {
|
||||||
return Collections.unmodifiableList(_toplevelShapes);
|
return Collections.unmodifiableList(_toplevelShapes);
|
||||||
}
|
}
|
||||||
|
|
||||||
// get connections
|
|
||||||
public List<XDGFConnection> getConnections() {
|
public List<XDGFConnection> getConnections() {
|
||||||
return Collections.unmodifiableList(_connections);
|
return Collections.unmodifiableList(_connections);
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,10 @@ import com.microsoft.schemas.office.visio.x2012.main.CellType;
|
|||||||
*
|
*
|
||||||
* The various attributes of a Cell are constrained, and are better defined in
|
* The various attributes of a Cell are constrained, and are better defined in
|
||||||
* the XSD 1.1 visio schema
|
* the XSD 1.1 visio schema
|
||||||
|
*
|
||||||
|
* Values of a cell are often the result of a formula computation. Luckily for
|
||||||
|
* you, Visio seems to always write the result to the document file, so unless
|
||||||
|
* the values change we don't need to recompute the values.
|
||||||
*/
|
*/
|
||||||
public class XDGFCell {
|
public class XDGFCell {
|
||||||
|
|
||||||
@ -97,7 +101,10 @@ public class XDGFCell {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns a length, converts it to inches?
|
/**
|
||||||
|
* @param cell
|
||||||
|
* @return A value converted to inches
|
||||||
|
*/
|
||||||
public static Double parseVLength(CellType cell) {
|
public static Double parseVLength(CellType cell) {
|
||||||
try {
|
try {
|
||||||
return Double.parseDouble(cell.getV());
|
return Double.parseDouble(cell.getV());
|
||||||
@ -116,7 +123,7 @@ public class XDGFCell {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Internal
|
@Internal
|
||||||
CellType getXmlObject() {
|
protected CellType getXmlObject() {
|
||||||
return _cell;
|
return _cell;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,15 @@ package org.apache.poi.xdgf.usermodel;
|
|||||||
|
|
||||||
import com.microsoft.schemas.office.visio.x2012.main.ConnectType;
|
import com.microsoft.schemas.office.visio.x2012.main.ConnectType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents connections in a Visio diagram.
|
||||||
|
*
|
||||||
|
* Note that just because something appears to be visually connected in a
|
||||||
|
* document does not mean that the user actually connected the elements. It
|
||||||
|
* turns out there are a lot of ways that a careless user can neglect to
|
||||||
|
* properly make connections that will not be recorded in the diagram
|
||||||
|
* in a machine readable way.
|
||||||
|
*/
|
||||||
public class XDGFConnection {
|
public class XDGFConnection {
|
||||||
|
|
||||||
// comments on frompart/topart taken from pkgVisio
|
// comments on frompart/topart taken from pkgVisio
|
||||||
@ -126,7 +135,11 @@ public class XDGFConnection {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// see constants above
|
/**
|
||||||
|
* The ToPart property identifies the part of a shape to which another
|
||||||
|
* shape is glued, such as its begin point or endpoint, one of its edges,
|
||||||
|
* or a connection point.
|
||||||
|
*/
|
||||||
public Integer getToPart() {
|
public Integer getToPart() {
|
||||||
if (_connect.isSetToPart())
|
if (_connect.isSetToPart())
|
||||||
return _connect.getToPart();
|
return _connect.getToPart();
|
||||||
|
@ -44,7 +44,7 @@ public class XDGFDocument {
|
|||||||
|
|
||||||
|
|
||||||
public XDGFDocument(VisioDocumentType document) {
|
public XDGFDocument(VisioDocumentType document) {
|
||||||
|
|
||||||
_document = document;
|
_document = document;
|
||||||
|
|
||||||
if (!_document.isSetDocumentSettings())
|
if (!_document.isSetDocumentSettings())
|
||||||
|
@ -22,13 +22,14 @@ import org.apache.poi.util.Internal;
|
|||||||
import com.microsoft.schemas.office.visio.x2012.main.MasterType;
|
import com.microsoft.schemas.office.visio.x2012.main.MasterType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides the API to work with an underlying master
|
* Provides the API to work with an underlying master. Typically, each set of
|
||||||
|
* stencils used in a Visio diagram are found in a separate master for each.
|
||||||
*/
|
*/
|
||||||
public class XDGFMaster {
|
public class XDGFMaster {
|
||||||
|
|
||||||
private MasterType _master;
|
private MasterType _master;
|
||||||
private XDGFMasterContents _content;
|
protected XDGFMasterContents _content;
|
||||||
XDGFSheet _pageSheet = null;
|
protected XDGFSheet _pageSheet = null;
|
||||||
|
|
||||||
public XDGFMaster(MasterType master, XDGFMasterContents content,
|
public XDGFMaster(MasterType master, XDGFMasterContents content,
|
||||||
XDGFDocument document) {
|
XDGFDocument document) {
|
||||||
@ -41,7 +42,7 @@ public class XDGFMaster {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Internal
|
@Internal
|
||||||
MasterType getXmlObject() {
|
protected MasterType getXmlObject() {
|
||||||
return _master;
|
return _master;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,9 +27,12 @@ import org.apache.xmlbeans.XmlException;
|
|||||||
|
|
||||||
import com.microsoft.schemas.office.visio.x2012.main.MasterContentsDocument;
|
import com.microsoft.schemas.office.visio.x2012.main.MasterContentsDocument;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contains the actual contents of the master/stencil
|
||||||
|
*/
|
||||||
public class XDGFMasterContents extends XDGFBaseContents {
|
public class XDGFMasterContents extends XDGFBaseContents {
|
||||||
|
|
||||||
private XDGFMaster _master;
|
protected XDGFMaster _master;
|
||||||
|
|
||||||
public XDGFMasterContents(PackagePart part, PackageRelationship rel,
|
public XDGFMasterContents(PackagePart part, PackageRelationship rel,
|
||||||
XDGFDocument document) {
|
XDGFDocument document) {
|
||||||
|
@ -36,19 +36,22 @@ import com.microsoft.schemas.office.visio.x2012.main.MasterType;
|
|||||||
import com.microsoft.schemas.office.visio.x2012.main.MastersDocument;
|
import com.microsoft.schemas.office.visio.x2012.main.MastersDocument;
|
||||||
import com.microsoft.schemas.office.visio.x2012.main.MastersType;
|
import com.microsoft.schemas.office.visio.x2012.main.MastersType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A collection of masters (typically stencils) in a Visio document
|
||||||
|
*/
|
||||||
public class XDGFMasters extends XDGFXMLDocumentPart {
|
public class XDGFMasters extends XDGFXMLDocumentPart {
|
||||||
|
|
||||||
MastersType _mastersObject;
|
MastersType _mastersObject;
|
||||||
|
|
||||||
// key: id of master
|
// key: id of master
|
||||||
Map<Long, XDGFMaster> _masters = new HashMap<Long, XDGFMaster>();
|
protected Map<Long, XDGFMaster> _masters = new HashMap<Long, XDGFMaster>();
|
||||||
|
|
||||||
public XDGFMasters(PackagePart part, PackageRelationship rel, XDGFDocument document) {
|
public XDGFMasters(PackagePart part, PackageRelationship rel, XDGFDocument document) {
|
||||||
super(part, rel, document);
|
super(part, rel, document);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Internal
|
@Internal
|
||||||
MastersType getXmlObject() {
|
protected MastersType getXmlObject() {
|
||||||
return _mastersObject;
|
return _mastersObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,10 +31,10 @@ import com.microsoft.schemas.office.visio.x2012.main.PageType;
|
|||||||
*/
|
*/
|
||||||
public class XDGFPage {
|
public class XDGFPage {
|
||||||
|
|
||||||
PageType _page;
|
private PageType _page;
|
||||||
XDGFPageContents _content;
|
protected XDGFPageContents _content;
|
||||||
XDGFPages _pages;
|
protected XDGFPages _pages;
|
||||||
XDGFSheet _pageSheet = null;
|
protected XDGFSheet _pageSheet = null;
|
||||||
|
|
||||||
public XDGFPage(PageType page, XDGFPageContents content,
|
public XDGFPage(PageType page, XDGFPageContents content,
|
||||||
XDGFDocument document, XDGFPages pages) {
|
XDGFDocument document, XDGFPages pages) {
|
||||||
@ -48,7 +48,7 @@ public class XDGFPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Internal
|
@Internal
|
||||||
PageType getXmlObject() {
|
protected PageType getXmlObject() {
|
||||||
return _page;
|
return _page;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,7 +72,9 @@ public class XDGFPage {
|
|||||||
return _pages.getPageList().indexOf(this) + 1;
|
return _pages.getPageList().indexOf(this) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// height/width of page
|
/**
|
||||||
|
* @return width/height of page
|
||||||
|
*/
|
||||||
public Dimension2dDouble getPageSize() {
|
public Dimension2dDouble getPageSize() {
|
||||||
XDGFCell w = _pageSheet.getCell("PageWidth");
|
XDGFCell w = _pageSheet.getCell("PageWidth");
|
||||||
XDGFCell h = _pageSheet.getCell("PageHeight");
|
XDGFCell h = _pageSheet.getCell("PageHeight");
|
||||||
@ -84,7 +86,9 @@ public class XDGFPage {
|
|||||||
Double.parseDouble(h.getValue()));
|
Double.parseDouble(h.getValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// origin of coordinate system
|
/**
|
||||||
|
* @return origin of coordinate system
|
||||||
|
*/
|
||||||
public Point2D.Double getPageOffset() {
|
public Point2D.Double getPageOffset() {
|
||||||
XDGFCell xoffcell = _pageSheet.getCell("XRulerOrigin");
|
XDGFCell xoffcell = _pageSheet.getCell("XRulerOrigin");
|
||||||
XDGFCell yoffcell = _pageSheet.getCell("YRulerOrigin");
|
XDGFCell yoffcell = _pageSheet.getCell("YRulerOrigin");
|
||||||
@ -101,7 +105,9 @@ public class XDGFPage {
|
|||||||
return new Point2D.Double(xoffset, yoffset);
|
return new Point2D.Double(xoffset, yoffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
// bounding box of page
|
/**
|
||||||
|
* @return bounding box of page
|
||||||
|
*/
|
||||||
public Rectangle2D getBoundingBox() {
|
public Rectangle2D getBoundingBox() {
|
||||||
Dimension2dDouble sz = getPageSize();
|
Dimension2dDouble sz = getPageSize();
|
||||||
Point2D.Double offset = getPageOffset();
|
Point2D.Double offset = getPageOffset();
|
||||||
|
@ -32,8 +32,8 @@ import com.microsoft.schemas.office.visio.x2012.main.PageContentsDocument;
|
|||||||
|
|
||||||
public class XDGFPageContents extends XDGFBaseContents {
|
public class XDGFPageContents extends XDGFBaseContents {
|
||||||
|
|
||||||
Map<Long, XDGFMaster> _masters = new HashMap<Long, XDGFMaster>();
|
protected Map<Long, XDGFMaster> _masters = new HashMap<Long, XDGFMaster>();
|
||||||
XDGFPage _page;
|
protected XDGFPage _page;
|
||||||
|
|
||||||
public XDGFPageContents(PackagePart part, PackageRelationship rel, XDGFDocument document) {
|
public XDGFPageContents(PackagePart part, PackageRelationship rel, XDGFDocument document) {
|
||||||
super(part, rel, document);
|
super(part, rel, document);
|
||||||
@ -71,6 +71,9 @@ public class XDGFPageContents extends XDGFBaseContents {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Parent page
|
||||||
|
*/
|
||||||
public XDGFPage getPage() {
|
public XDGFPage getPage() {
|
||||||
return _page;
|
return _page;
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,9 @@ public class XDGFPages extends XDGFXMLDocumentPart {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ordered by page number
|
/**
|
||||||
|
* @return A list of pages ordered by page number
|
||||||
|
*/
|
||||||
public List<XDGFPage> getPageList() {
|
public List<XDGFPage> getPageList() {
|
||||||
return Collections.unmodifiableList(_pages);
|
return Collections.unmodifiableList(_pages);
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ public class XDGFRelation extends POIXMLRelation {
|
|||||||
|
|
||||||
public static final XDGFRelation DOCUMENT = new XDGFRelation(
|
public static final XDGFRelation DOCUMENT = new XDGFRelation(
|
||||||
"application/vnd.ms-visio.drawing.main+xml",
|
"application/vnd.ms-visio.drawing.main+xml",
|
||||||
"http://schemas.microsoft.com/visio/2010/relationships/document",
|
PackageRelationshipTypes.VISIO_CORE_DOCUMENT,
|
||||||
"/visio/document.xml", null);
|
"/visio/document.xml", null);
|
||||||
|
|
||||||
public static final XDGFRelation MASTERS = new XDGFRelation(
|
public static final XDGFRelation MASTERS = new XDGFRelation(
|
||||||
|
@ -173,8 +173,6 @@ public class XDGFShape extends XDGFSheet {
|
|||||||
* Shapes that have a 'Master' attribute refer to a specific master in the
|
* Shapes that have a 'Master' attribute refer to a specific master in the
|
||||||
* page, whereas shapes with a 'MasterShape' attribute refer to a subshape
|
* page, whereas shapes with a 'MasterShape' attribute refer to a subshape
|
||||||
* of a Master.
|
* of a Master.
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
protected void setupMaster(XDGFPageContents pageContents,
|
protected void setupMaster(XDGFPageContents pageContents,
|
||||||
XDGFMasterContents master) {
|
XDGFMasterContents master) {
|
||||||
@ -295,7 +293,9 @@ public class XDGFShape extends XDGFSheet {
|
|||||||
return _geometry.get(idx);
|
return _geometry.get(idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
// only available if this is a shape group
|
/**
|
||||||
|
* Only available if this shape is a shape group, may be null
|
||||||
|
*/
|
||||||
// -> May be null
|
// -> May be null
|
||||||
public List<XDGFShape> getShapes() {
|
public List<XDGFShape> getShapes() {
|
||||||
return _shapes;
|
return _shapes;
|
||||||
@ -334,7 +334,9 @@ public class XDGFShape extends XDGFSheet {
|
|||||||
return _masterShape;
|
return _masterShape;
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns the parent shape of this shape, if its in a subshape
|
/**
|
||||||
|
* @return The parent shape if this is a subshape, null otherwise
|
||||||
|
*/
|
||||||
public XDGFShape getParentShape() {
|
public XDGFShape getParentShape() {
|
||||||
return _parent;
|
return _parent;
|
||||||
}
|
}
|
||||||
@ -807,14 +809,20 @@ public class XDGFShape extends XDGFSheet {
|
|||||||
_masterShape != null ? _masterShape._geometry : null);
|
_masterShape != null ? _masterShape._geometry : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns a rectangle in local coordinates
|
/**
|
||||||
|
* @return rectangle in local coordinates
|
||||||
|
*/
|
||||||
public Rectangle2D.Double getBounds() {
|
public Rectangle2D.Double getBounds() {
|
||||||
return new Rectangle2D.Double(0, 0, getWidth(), getHeight());
|
return new Rectangle2D.Double(0, 0, getWidth(), getHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns bounds as a path in local coordinates
|
/**
|
||||||
// -> useful if you need to transform to global coordinates
|
* @return returns bounds as a path in local coordinates, which is
|
||||||
// -> Don't use for 1d objects, fails for infinite line objects
|
* userful if you need to transform to global coordinates
|
||||||
|
*
|
||||||
|
* @warning Don't use this for 1d objects, and will fail for
|
||||||
|
* infinite line objects
|
||||||
|
*/
|
||||||
public Path2D.Double getBoundsAsPath() {
|
public Path2D.Double getBoundsAsPath() {
|
||||||
|
|
||||||
Double w = getWidth();
|
Double w = getWidth();
|
||||||
@ -830,7 +838,9 @@ public class XDGFShape extends XDGFSheet {
|
|||||||
return bounds;
|
return bounds;
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns the path in local coordinates
|
/**
|
||||||
|
* @return The outline of the shape in local coordinates
|
||||||
|
*/
|
||||||
public Path2D.Double getPath() {
|
public Path2D.Double getPath() {
|
||||||
for (GeometrySection geoSection : getGeometrySections()) {
|
for (GeometrySection geoSection : getGeometrySections()) {
|
||||||
if (geoSection.getNoShow() == true)
|
if (geoSection.getNoShow() == true)
|
||||||
|
@ -92,7 +92,11 @@ public abstract class XDGFSheet {
|
|||||||
return _document;
|
return _document;
|
||||||
}
|
}
|
||||||
|
|
||||||
// A cell is really just a setting
|
/**
|
||||||
|
* A cell is really just a setting
|
||||||
|
*
|
||||||
|
* @param cellName The particular setting you want
|
||||||
|
*/
|
||||||
public XDGFCell getCell(String cellName) {
|
public XDGFCell getCell(String cellName) {
|
||||||
return _cells.get(cellName);
|
return _cells.get(cellName);
|
||||||
}
|
}
|
||||||
|
@ -52,10 +52,12 @@ public class XDGFText {
|
|||||||
// is a mixed type)
|
// is a mixed type)
|
||||||
return ((TextTypeImpl) _text).getStringValue();
|
return ((TextTypeImpl) _text).getStringValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
// these are in the shape coordinate system
|
/**
|
||||||
// -> See
|
* These are in the shape coordinate system
|
||||||
// https://msdn.microsoft.com/en-us/library/hh644132(v=office.12).aspx
|
*
|
||||||
|
* @see https://msdn.microsoft.com/en-us/library/hh644132(v=office.12).aspx
|
||||||
|
*/
|
||||||
public Rectangle2D.Double getTextBounds() {
|
public Rectangle2D.Double getTextBounds() {
|
||||||
|
|
||||||
double txtPinX = _parent.getTxtPinX();
|
double txtPinX = _parent.getTxtPinX();
|
||||||
@ -73,8 +75,10 @@ public class XDGFText {
|
|||||||
return new Rectangle2D.Double(x, y, txtWidth, txtHeight);
|
return new Rectangle2D.Double(x, y, txtWidth, txtHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns bounds as a path in local coordinates
|
/**
|
||||||
// -> useful if you need to transform to global coordinates
|
* @return Text bounds as a path in local coordinates, which is useful
|
||||||
|
* if you need to transform to global coordinates
|
||||||
|
*/
|
||||||
public Path2D.Double getBoundsAsPath() {
|
public Path2D.Double getBoundsAsPath() {
|
||||||
|
|
||||||
Rectangle2D.Double rect = getTextBounds();
|
Rectangle2D.Double rect = getTextBounds();
|
||||||
@ -90,14 +94,19 @@ public class XDGFText {
|
|||||||
|
|
||||||
return bounds;
|
return bounds;
|
||||||
}
|
}
|
||||||
|
|
||||||
// center of text in local coordinates
|
/**
|
||||||
|
* @return Center of text in local coordinates
|
||||||
|
*/
|
||||||
public Point2D.Double getTextCenter() {
|
public Point2D.Double getTextCenter() {
|
||||||
return new Point2D.Double(_parent.getTxtLocPinX(),
|
return new Point2D.Double(_parent.getTxtLocPinX(),
|
||||||
_parent.getTxtLocPinY());
|
_parent.getTxtLocPinY());
|
||||||
}
|
}
|
||||||
|
|
||||||
// assumes graphics is set properly to draw in the right style
|
/**
|
||||||
|
* When calling this to draw text, it assumes graphics is set properly
|
||||||
|
* to draw in the right style.
|
||||||
|
*/
|
||||||
public void draw(Graphics2D graphics) {
|
public void draw(Graphics2D graphics) {
|
||||||
|
|
||||||
String textContent = getTextContent();
|
String textContent = getTextContent();
|
||||||
|
@ -28,22 +28,39 @@ import org.apache.poi.POIXMLException;
|
|||||||
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
|
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
|
||||||
import org.apache.poi.openxml4j.opc.OPCPackage;
|
import org.apache.poi.openxml4j.opc.OPCPackage;
|
||||||
import org.apache.poi.openxml4j.opc.PackagePart;
|
import org.apache.poi.openxml4j.opc.PackagePart;
|
||||||
|
import org.apache.poi.openxml4j.opc.PackageRelationshipTypes;
|
||||||
import org.apache.poi.util.PackageHelper;
|
import org.apache.poi.util.PackageHelper;
|
||||||
import org.apache.xmlbeans.XmlException;
|
import org.apache.xmlbeans.XmlException;
|
||||||
|
|
||||||
import com.microsoft.schemas.office.visio.x2012.main.VisioDocumentDocument1;
|
import com.microsoft.schemas.office.visio.x2012.main.VisioDocumentDocument1;
|
||||||
import com.microsoft.schemas.office.visio.x2012.main.VisioDocumentType;
|
import com.microsoft.schemas.office.visio.x2012.main.VisioDocumentType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is your high-level starting point for working with Visio XML
|
||||||
|
* documents (.vsdx).
|
||||||
|
*
|
||||||
|
* Currently, only read support has been implemented, and the API is
|
||||||
|
* not mature and is subject to change.
|
||||||
|
*
|
||||||
|
* For more information about the visio XML format (with an XSD 1.0
|
||||||
|
* schema), you can find documentation at
|
||||||
|
* https://msdn.microsoft.com/en-us/library/hh645006(v=office.12).aspx
|
||||||
|
*
|
||||||
|
* That document lacks in some areas, but you can find additional
|
||||||
|
* documentation and an updated XSD 1.1 schema at
|
||||||
|
* https://msdn.microsoft.com/en-us/library/office/jj684209(v=office.15).aspx
|
||||||
|
*
|
||||||
|
* Each provides different details, but the SharePoint reference
|
||||||
|
* has better documentation and is more useful.
|
||||||
|
*/
|
||||||
public class XmlVisioDocument extends POIXMLDocument {
|
public class XmlVisioDocument extends POIXMLDocument {
|
||||||
|
|
||||||
public static String CORE_DOCUMENT = "http://schemas.microsoft.com/visio/2010/relationships/document";
|
protected XDGFPages _pages;
|
||||||
|
protected XDGFMasters _masters;
|
||||||
XDGFPages _pages;
|
protected XDGFDocument _document;
|
||||||
XDGFMasters _masters;
|
|
||||||
XDGFDocument _document;
|
|
||||||
|
|
||||||
public XmlVisioDocument(OPCPackage pkg) throws IOException {
|
public XmlVisioDocument(OPCPackage pkg) throws IOException {
|
||||||
super(pkg, CORE_DOCUMENT);
|
super(pkg, PackageRelationshipTypes.VISIO_CORE_DOCUMENT);
|
||||||
|
|
||||||
VisioDocumentType document;
|
VisioDocumentType document;
|
||||||
|
|
||||||
@ -98,7 +115,7 @@ public class XmlVisioDocument extends POIXMLDocument {
|
|||||||
//
|
//
|
||||||
// Useful public API goes here
|
// Useful public API goes here
|
||||||
//
|
//
|
||||||
|
|
||||||
public Collection<XDGFPage> getPages() {
|
public Collection<XDGFPage> getPages() {
|
||||||
return _pages.getPageList();
|
return _pages.getPageList();
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,11 @@ import java.util.Map.Entry;
|
|||||||
import java.util.NoSuchElementException;
|
import java.util.NoSuchElementException;
|
||||||
import java.util.SortedMap;
|
import java.util.SortedMap;
|
||||||
|
|
||||||
// iterates over the base and master
|
/**
|
||||||
|
* An iterator used to iterate over the base and master items
|
||||||
|
*
|
||||||
|
* @param <T>
|
||||||
|
*/
|
||||||
public class CombinedIterable<T> implements Iterable<T> {
|
public class CombinedIterable<T> implements Iterable<T> {
|
||||||
|
|
||||||
final SortedMap<Long, T> _baseItems;
|
final SortedMap<Long, T> _baseItems;
|
||||||
|
@ -32,15 +32,17 @@ import org.apache.poi.xdgf.usermodel.XDGFShape;
|
|||||||
*/
|
*/
|
||||||
public abstract class ShapeVisitor {
|
public abstract class ShapeVisitor {
|
||||||
|
|
||||||
ShapeVisitorAcceptor _acceptor;
|
protected ShapeVisitorAcceptor _acceptor;
|
||||||
|
|
||||||
public ShapeVisitor() {
|
public ShapeVisitor() {
|
||||||
_acceptor = getAcceptor();
|
_acceptor = getAcceptor();
|
||||||
}
|
}
|
||||||
|
|
||||||
// is only called on construction of the visitor, allows
|
/**
|
||||||
// mixing visitors and acceptors
|
* Is only called on construction of the visitor, allows
|
||||||
public ShapeVisitorAcceptor getAcceptor() {
|
* mixing visitors and acceptors
|
||||||
|
*/
|
||||||
|
protected ShapeVisitorAcceptor getAcceptor() {
|
||||||
return new ShapeVisitorAcceptor() {
|
return new ShapeVisitorAcceptor() {
|
||||||
@Override
|
@Override
|
||||||
public boolean accept(XDGFShape shape) {
|
public boolean accept(XDGFShape shape) {
|
||||||
|
@ -30,6 +30,10 @@ import org.apache.poi.xdgf.usermodel.XDGFShape;
|
|||||||
import org.apache.poi.xdgf.usermodel.XmlVisioDocument;
|
import org.apache.poi.xdgf.usermodel.XmlVisioDocument;
|
||||||
import org.apache.poi.xdgf.usermodel.shape.ShapeVisitor;
|
import org.apache.poi.xdgf.usermodel.shape.ShapeVisitor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Debugging tool useful when trying to figure out the hierarchy of the
|
||||||
|
* shapes in a Visio diagram
|
||||||
|
*/
|
||||||
public class HierarchyPrinter {
|
public class HierarchyPrinter {
|
||||||
|
|
||||||
public static void printHierarchy(XDGFPage page, File outDir)
|
public static void printHierarchy(XDGFPage page, File outDir)
|
||||||
|
@ -34,6 +34,12 @@ import org.apache.poi.xdgf.usermodel.XmlVisioDocument;
|
|||||||
import org.apache.poi.xdgf.usermodel.shape.ShapeDebuggerRenderer;
|
import org.apache.poi.xdgf.usermodel.shape.ShapeDebuggerRenderer;
|
||||||
import org.apache.poi.xdgf.usermodel.shape.ShapeRenderer;
|
import org.apache.poi.xdgf.usermodel.shape.ShapeRenderer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a Visio diagram to a PNG file.
|
||||||
|
*
|
||||||
|
* As more elements and styles are added/supported the output will get
|
||||||
|
* better, but it's very rough right now.
|
||||||
|
*/
|
||||||
public class VsdxToPng {
|
public class VsdxToPng {
|
||||||
|
|
||||||
public static void renderToPng(XDGFPage page, String outFilename,
|
public static void renderToPng(XDGFPage page, String outFilename,
|
||||||
|
Loading…
Reference in New Issue
Block a user