diff options
author | arved <arved@unknown> | 2001-02-10 03:20:32 +0000 |
---|---|---|
committer | arved <arved@unknown> | 2001-02-10 03:20:32 +0000 |
commit | 78099dc6ff4a151569d958c820cce6979834c744 (patch) | |
tree | 792705d341c04bfc087bf354d2baf0ce1780f0c9 /src/org | |
parent | e8801781be4567d0d9451ff63033f7b01a56053d (diff) | |
download | xmlgraphics-fop-78099dc6ff4a151569d958c820cce6979834c744.tar.gz xmlgraphics-fop-78099dc6ff4a151569d958c820cce6979834c744.zip |
MIF Document description
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@194035 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/org')
-rw-r--r-- | src/org/apache/fop/mif/MIFDocument.java | 1185 |
1 files changed, 1185 insertions, 0 deletions
diff --git a/src/org/apache/fop/mif/MIFDocument.java b/src/org/apache/fop/mif/MIFDocument.java new file mode 100644 index 000000000..0ec698dcd --- /dev/null +++ b/src/org/apache/fop/mif/MIFDocument.java @@ -0,0 +1,1185 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber <jtauber@jtauber.com>. For more information on the Apache + Software Foundation, please see <http://www.apache.org/>. + + */ + + +//Author : Seshadri G + + + +package org.apache.fop.mif; + +// images are the one place that FOP classes outside this package get +// referenced and I'd rather not do it + +import org.apache.fop.image.FopImage; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.layout.LinkSet; +import org.apache.fop.datatypes.ColorSpace; + +import org.apache.fop.datatypes.IDReferences; +import org.apache.fop.layout.Page; +import org.apache.fop.layout.FontMetric; +import org.apache.fop.layout.FontDescriptor; +// Java +import java.io.*; +import java.io.PrintWriter; +import java.util.*; +import java.awt.Rectangle; + +/** + * class representing a MIF document. + * + * The document is built up by calling various methods and then finally + * output to given filehandle using output method. + * + */ +public class MIFDocument { + + /** the version of MIF supported */ + + + protected static final String mifVersion = "5.5"; + protected BookComponent bookComponent; + private Flow curFlow; // this is a ref to the current flow which could be a textflow or + // a table + private ID curIDCounter=new ID(); + + class ID { + + private int idCounter=1; + public int getnewID() { + + return idCounter++; + } + + } + + class FontFormat { + + public FontFormat() { } + + } + + class ParagraphFormat extends FontFormat { + + public ParagraphFormat() {} + int startIndent; + int endIndent; + + + + } + + class Document { + protected int height; + protected int width; + public Document() {} + + public void output(OutputStream stream) throws IOException { + + String mif="\n<Document " + "\n<DPageSize " + width/1000f + " " + height/1000f + " >\n>"; + byte buf[]=mif.getBytes(); + + stream.write(buf); + + } + + } + + + class PolyLine { + + public PolyLine() {} + } + + class ImportObject { + + private String url; + private int x,y,w,h; + + public ImportObject(String url,int x,int y,int w,int h) { + + this.url=url; + this.x=x; + this.y=y; + this.w=w; + this.h=h; + + } + + + public void output(OutputStream stream) throws IOException { + + + String path=this.url; + + //Strip 'file:' + path= path.substring(5); + String result=""; + int i; + do { // replace all matching '/' + + i=path.indexOf("/"); + if (i != -1) { + result=path.substring(0,i); + result += "<c\\>"; + result += path.substring(i + 1); + path=result; + } + + } while (i!= -1); + + String mif="\n<ImportObject" + "\n<ImportObFixedSize Yes>"; + mif += "\n\t<ImportObFileDI " + "`<c\\>" + path + "'" + " >"; + mif +="\n\t<ShapeRect " + this.x/1000f + " " + this.y/1000f + " " + this.w/1000f + " " + this.h/1000f + " >"; + + mif += "\n> #End ImportObj"; + stream.write(mif.getBytes()); + + } + + } + + + class Frame { + + private int ID; + private int x,y,w,h; + Vector content=new Vector(); + public Frame(int x, int y, int w, int h) { + + this.ID=curIDCounter.getnewID(); + this.x=x; + this.y=y; + this.w=w; + this.h=h; + + } + + public void addContent(ImportObject obj) { + + content.addElement(obj); + + } + + public void output(OutputStream stream) throws IOException { + + String mif="\n<Frame" + "\n\t<ID " + this.ID + " >"; + mif += "\n\t<Pen 15>\n\t<Fill 7>\n\t<PenWidth 1.0 >\n\t<Separation 0>\n\t<ObColor `Black'>\n\t<DashedPattern \n\t <DashedStyle Solid> \n >"; + + mif +="\n\t<RunaroundGap 6.0 pt>\n\t<RunaroundType None>\n\t<Angle 360.0>\n\t<Float No>\n\t<NSOffset 0.0>\n\t<BLOffset 0>\n\t<Cropped No>\n\t<FrameType Below>\n\t<AnchorAlign Center>"; + + mif += "\n\t<ShapeRect " + this.x/1000f + " " + this.y/1000f + " " + this.w/1000f + " " + this.h/1000f + " >"; + + + stream.write(mif.getBytes()); + + Enumeration e=content.elements(); + while (e.hasMoreElements()) { + + ((ImportObject) e.nextElement()).output(stream); + } + mif ="\n> #End Frame"; + stream.write(mif.getBytes()); + + + + } + public int getID() { + + return this.ID; + } + + } + + class TextRect { + private int rx,ry,w,h; + private int numCols; + private int curCol=0; //Current column being processed + private int colGap=0; + private int textRectID; + public TextRect(int numCols) { + + this.numCols=numCols; + this.curCol=0; + this.textRectID=curIDCounter.getnewID(); + + } + + + public int getTextRectID() { + + return textRectID; + + } + + + public void setTextRectProp(int left,int top,int width,int height) { + + if (curCol==0) { + + //Use the left and top margins + + rx=left; + ry=top; + w=width; // current column width , not the entire span + h=height; + curCol++; + + } + else if (curCol==1) { + // Figure out the column gap and the span of the textrect + colGap=left-rx-width; + // Next the entire width + w=numCols*width + (numCols-1)*colGap; + curCol++; + + + } + + } + + + public void output(OutputStream stream) throws IOException { + + String mif="\n<TextRect" + "\n\t<ID " + textRectID + ">" + "\n\t<ShapeRect " + rx/1000f + " " + ry/1000f + " " + w/1000f + " " + h/1000f + ">" ; + + if (numCols>1) { + mif += "\n<TRNumColumns " + numCols + ">"; + mif += "\n<TRColumnGap " + colGap/1000f + ">"; + } + + mif += "\n> #End TextRect" ; + byte buf[]=mif.getBytes(); + stream.write(buf); + } + + } + + class Page { + private String pageType; + private String pageTag; + private String pageBackground; + private Vector textRects; + public Page(String pageType, String pageTag, String pageBackground) { + + this.pageType=pageType; + this.pageTag=pageTag; + this.pageBackground=pageBackground; + this.textRects=new Vector(); + } + + public Page() { + + this.pageType="BodyPage"; + this.pageBackground="Default"; + this.textRects=new Vector(); + + } + + + public void addTextRect(int numCols) { + + TextRect textRect=new TextRect(numCols); + this.textRects.addElement(textRect); + } + + public TextRect curTextRect() { + + return (TextRect) textRects.lastElement(); + + } + + + + public void output(OutputStream stream) throws IOException { + + + String mif="\n<Page" + "\n\t<PageType " + pageType + ">" + "\n\t<PageBackground " + "`" + pageBackground + "'" + ">"; + + byte buf[]=mif.getBytes(); + + stream.write(buf); + + Enumeration e=textRects.elements(); + + while (e.hasMoreElements()) { + + ((TextRect) e.nextElement()).output(stream); + + } + mif="\n> #End Page\n"; + stream.write(mif.getBytes()); + + } + + + } + + abstract class Flow { + + public Flow() {} + public abstract Para curPara(); + public abstract void startPara(); + } + + + class TextFlow extends Flow { + + Vector paras; + private int ID; // This ID is used within ParaLine, however it is + // logical to keep it unique to a textflow + + public TextFlow() { + + + //The current textrect into which the textflow goes + //is the last created. + + this.ID=((bookComponent.curPage()).curTextRect()).getTextRectID(); + this.paras=new Vector(); + + } + + + public int getTextRectID() { + + return ID; + + } + + public Para curPara() { + + return (Para) paras.lastElement(); + } + + public void startPara() { + + this.paras.addElement(new Para(ID)); + } + + public void output(OutputStream stream) throws IOException { + String mif="\n<TextFlow"; + stream.write(mif.getBytes()); + Enumeration e=paras.elements(); + while (e.hasMoreElements()) { + + ((Para) e.nextElement()).output(stream); + } + mif="\n> #End TextFlow"; + stream.write(mif.getBytes()); + } + + } + + + class Para { + + Vector paraLines; + int ID; // Same as TextRectID + ParagraphFormat pgf=null; // This corresponds to to the block properties + public Para() { + + this.ID=0; + this.paraLines=new Vector(); + } + + + public Para(int ID) { + + this.ID=ID; + this.paraLines=new Vector(); + + } + + public ParaLine curParaLine() { + if (paraLines.isEmpty()) { + return null; + } + else { + return (ParaLine) paraLines.lastElement(); + } + } + + void startParaLine() { + + this.paraLines.addElement(new ParaLine(ID)); + + } + + + public void setBlockProp(int startIndent,int endIndent) { + + pgf=new ParagraphFormat(); + pgf.startIndent=startIndent; + pgf.endIndent=endIndent; + + + } + + + public void output(OutputStream stream) throws IOException { + + String mif="\n<Para"; + //Is there a block property? + + if (pgf != null) { + mif += "\n<Pgf" ; + mif += "\n<PgfTag `Body'>"; + mif += "\n<PgfLIndent " + pgf.startIndent/1000f + ">"; + mif += "\n<PgfRIndent " + pgf.endIndent/1000f + ">"; + mif += "\n>"; + } + stream.write(mif.getBytes()); + Enumeration e=paraLines.elements(); + while (e.hasMoreElements()) { + + ((ParaLine) e.nextElement()).output(stream); + } + mif="\n> #End ParaLine"; + stream.write(mif.getBytes()); + + } + + } + + class ParaLine { + Vector content; + int textRectID; + String tableID; + String aFrameID; + public ParaLine(int textRectID) { + + this.textRectID=textRectID; + this.content=new Vector(); + + } + public ParaLine () { + + this.textRectID=0; // There is no ID used, in tables + this.content=new Vector(); + } + + public void addContent(Object obj) { + + this.content.addElement(obj); + + } + public void output(OutputStream stream) throws IOException { + + String mif="\n<ParaLine"; + + // tables dont need the textrectid + if (textRectID != 0) + mif += "\n\t<TextRectID " + textRectID + ">"; + + stream.write(mif.getBytes()); + Enumeration e = this.content.elements(); + while (e.hasMoreElements()) { + + Object elem=(Object) e.nextElement(); + if (elem instanceof String) { + + // Output newlines as char hard return + + if (elem == "\n") { + + mif ="\n<Char HardReturn>"; + } + else { + mif="\n\t<String `" + elem + "'>"; + } + stream.write(mif.getBytes()); + + } + else + if (elem instanceof Frame) { + + mif="\n\t<AFrame " + ((Frame) elem).getID() + " >"; + stream.write(mif.getBytes()); + } + else + if (elem instanceof Tbl) { + mif="\n\t<ATbl " + ((Tbl) elem).getID() + " >"; + stream.write(mif.getBytes()); + } + } + mif="\n> #End ParaLine"; + stream.write(mif.getBytes()); + + } + } + + + class PgfCatalog { + + Vector pgfs; // Paragraph formats + public PgfCatalog() {} + + public void output(OutputStream stream) throws IOException { + String mif="\n<PgfCatalog" + "\n<Pgf" + "\n<PgfTag `Body'>" + "\n>" + "\n>"; + stream.write(mif.getBytes()); + } + + } + + class Color { + + public Color() {} + } + + class ColorCatalog { + + public ColorCatalog() {} + } + + + class Ruling { + + int penWidth; + int pen; + int lines; + public Ruling() { + // Default ruling + penWidth=1; + pen=0; + lines=1; + + + } + + public void output(OutputStream stream) throws IOException { + + String mif = "\n<Ruling \n<RulingTag `Default'>"; + mif +="\n<RulingPenWidth " + penWidth + ">"; + mif +="\n<RulingPen " + pen + ">"; + mif +="\n<RulingLines " + lines + ">"; + mif +="\n>"; + stream.write(mif.getBytes()); + } + + } + + class RulingCatalog { + // Contains multiple rulings + + Vector ruling = new Vector(); + public RulingCatalog() { + + // Add the defualt ruling to the catalog + + ruling.addElement(new Ruling()); + + } + + public void output(OutputStream stream) throws IOException { + + String mif="\n<RulingCatalog"; + stream.write(mif.getBytes()); + Enumeration e=ruling.elements(); + while (e.hasMoreElements()) { + ((Ruling) e.nextElement()).output(stream); + } + mif="\n> #End RulingCatalog"; + stream.write(mif.getBytes()); + + } + + + } + + + class TblFormat { + + public TblFormat() {} + } + + class TblCatalog { + + public TblCatalog() {} + + } + + class Tbl extends Flow { + + class TblColumn { + private int width; + public TblColumn(int width) { + + this.width=width; + + } + public void output(OutputStream stream) throws IOException { + + + String mif="\n\t<TblColumnWidth " + width + " >"; + stream.write(mif.getBytes()); + + } + + + } + + class Row { + + class Cell { + + private int rowSpan,colSpan; + private Vector paras; // Paras + public Cell(int rowSpan,int colSpan) { + + this.rowSpan=rowSpan; + this.colSpan=colSpan; + paras=new Vector(); + + } + public void startPara() { + + this.paras.addElement(new Para()); + } + public void output(OutputStream stream) throws IOException { + + String mif="\n\t\t<Cell" + "\n\t\t<CellContent"; + stream.write(mif.getBytes()); + Enumeration e=paras.elements(); + while (e.hasMoreElements()) { + ((Para) e.nextElement()).output(stream); + } + mif="\n\t\t> #End CellContent"; + mif +="\n\t> #End Cell"; + stream.write(mif.getBytes()); + } + + } + private Vector cells; + + public void addCell(int rowSpan, int colSpan) { + + cells.addElement(new Cell(rowSpan,colSpan)); + } + + public Row() { + + cells=new Vector(); + + } + public Cell curCell() { + + return (Cell) this.cells.lastElement(); + } + + public void output(OutputStream stream) throws IOException { + + String mif="\n\t<Row"; + stream.write(mif.getBytes()); + Enumeration e=cells.elements(); + while (e.hasMoreElements()) { + ((Cell) e.nextElement()).output(stream); + } + mif="\n\t> #End Row"; + stream.write(mif.getBytes()); + + } + + + } + + private int ID; + private Vector tblColumns=new Vector(); + private Vector tblBody,tblHead,tblFoot; + private Vector current; // is a reference to one of tblHead,tblBody or tblFoot + public void addColumn(int colWidth) { + + tblColumns.addElement(new TblColumn(colWidth)); + + } + public void setCurrent(String current) { + + if (current == "fo:table-body") { + this.current=this.tblBody; + } + else + if (current == "tablehead") { + this.current=this.tblHead; + } + else + if (current == "tablefoot") { + this.current=this.tblFoot; + } + } + public void startRow() { + + this.current.addElement(new Row()); + } + + public void startCell(int rowSpan,int colSpan) { + + //Add a cell into the current row + + ((Row) this.current.lastElement()).addCell(rowSpan,colSpan); + + } + + public Tbl() { + + this.ID=curIDCounter.getnewID(); + tblBody=new Vector(); + tblHead=new Vector(); + tblFoot=new Vector(); + + } + + public int getID() { + + return this.ID; + } + public Para curPara() { + + // Return the last para of the current cell + + Row curRow; + curRow= (Row) this.current.lastElement(); + return (Para) curRow.curCell().paras.lastElement(); + + + } + public void startPara() { + + // start a new para in the current cell + Row curRow; + curRow= (Row) this.current.lastElement(); + curRow.curCell().startPara(); + + } + + + public void output(OutputStream stream) throws IOException { + + String mif="\n<Tbl" + "\n\t<TblID " + ID + " >"; + + // note tbl format to be added in a later release + mif += "\n<TblTag Body>" + "\n<TblFormat"; + mif +="\n<TblColumnRuling `Default'>"; + mif +="\n<TblBodyRowRuling `Default'>"; + mif +="\n<TblLRuling `Default'>"; + mif +="\n<TblBRuling `Default'>"; + mif +="\n<TblRRuling `Default'>"; + mif +="\n<TblTRuling `Default'>"; + + mif += "\n> #End TblFormat"; + ; + mif +="\n\t<TblNumColumns " + tblColumns.size() + " >"; + stream.write(mif.getBytes()); + + if (! tblHead.isEmpty()) { + Enumeration e=tblHead.elements(); + while (e.hasMoreElements()) { + ((Row) e.nextElement()).output(stream); + } + } + if (! tblFoot.isEmpty()) { + Enumeration e=tblFoot.elements(); + while (e.hasMoreElements()) { + ((Row) e.nextElement()).output(stream); + } + } + if (! tblBody.isEmpty()) { + mif="\n\t<TblBody"; + stream.write(mif.getBytes()); + Enumeration e=tblBody.elements(); + while (e.hasMoreElements()) { + ((Row) e.nextElement()).output(stream); + } + mif="\n\t> #End tblBody"; + } + mif +="\n> #End Table"; + stream.write(mif.getBytes()); + } + + } + + class XRefFormat { + + public XRefFormat() {} + } + + class CrossRefInfo { + + public CrossRefInfo() {} + } + + class XRef { + + public XRef() {} + } + + class Marker { + + public Marker() {} + + } + + class BookComponent { + + Document document; + ColorCatalog colorCatalog; + RulingCatalog rulingCatalog; + PgfCatalog pgfCatalog; + TblCatalog tblCatalog; + Vector aFrames = new Vector(); + Vector tables = new Vector(); + Vector pages = new Vector(); + Vector textFlows = new Vector(); + + + public BookComponent() { + + document=null; // Initially no values are available + pgfCatalog = new PgfCatalog(); + rulingCatalog=new RulingCatalog(); + } + + + public Frame createFrame(int x, int y,int w,int h) { + + Frame frame=new Frame(x,y,w,h); + aFrames.addElement(frame); + return frame; + + } + + public Frame curFrame() { + + return (Frame) aFrames.lastElement(); + + } + + public TextFlow curTextFlow() { + + return (TextFlow) textFlows.lastElement(); + + } + + public Tbl createTable() { + + Tbl table=new Tbl(); + tables.addElement(table); + return table; + } + public Tbl curTable() { + + return (Tbl) tables.lastElement(); + } + + public void output(OutputStream stream) throws IOException { + String mif="<MIFFile 5.00>" + "\n<Units Upt>" ; + stream.write(mif.getBytes()); + pgfCatalog.output(stream); + rulingCatalog.output(stream); + document.output(stream); + + if (! aFrames.isEmpty()) { + + mif="\n<AFrames"; + stream.write(mif.getBytes()); + Enumeration e=aFrames.elements(); + while (e.hasMoreElements()) { + + ((Frame) e.nextElement()).output(stream); + } + + mif="\n>"; + stream.write(mif.getBytes()); + } + + if (! tables.isEmpty()) { + + mif="\n<Tbls"; + stream.write(mif.getBytes()); + Enumeration e=tables.elements(); + while (e.hasMoreElements()) { + + ((Tbl) e.nextElement()).output(stream); + } + + mif="\n>"; + stream.write(mif.getBytes()); + } + + + Enumeration e = pages.elements(); + while (e.hasMoreElements()) { + + ((Page) e.nextElement()).output(stream); + } + + e=textFlows.elements(); + while (e.hasMoreElements()) { + + ((TextFlow) e.nextElement()).output(stream); + + } + + + } + + + private Page curPage() { + + return (Page) pages.lastElement(); + + } + + + + } + + class ElementSet { + + public ElementSet() {} + + } + + + /** + * creates an empty MIF document + */ + public MIFDocument() { + + bookComponent = new BookComponent(); + + } + + public void createPage () { + + bookComponent.pages.addElement(new Page()); + + } + + + public void addToStream(String s) { + + //Add this string to the curent flow + + Para para= curFlow.curPara(); + ParaLine paraLine= para.curParaLine(); + paraLine.addContent(s); + + } + + + + + public void output(OutputStream stream) throws IOException { + + + //Output the contents of bookComponent + + this.bookComponent.output(stream); + + } + + + public void setDocumentHeightWidth (int height, int width) { + + if (bookComponent.document == null) { + + bookComponent.document=new Document(); + bookComponent.document.height=height; + bookComponent.document.width=width; + } + + else if(bookComponent.document.height != height || bookComponent.document.width != width) { + + MessageHandler.logln("Warning : FrameMaker doesnt support different page-sizes in a document"); + } + + } + + + + public void createTextRect(int numCols) { + + + //Create a textrect on the bodypage with these dimensions + //This default behaviour will later be changed to reflect on + //the master-page + + + (bookComponent.curPage()).addTextRect(numCols); + + + // Then create a textflow corresponding to this textrect + + curFlow=new TextFlow(); + bookComponent.textFlows.addElement(curFlow); + + } + + + public void setTextRectProp(int left,int top, int width,int height) { + + + (bookComponent.curPage()).curTextRect().setTextRectProp(left,top,width,height); + + + } + + + public void startLine() { + + + if (curFlow.curPara().curParaLine() != null) { + this.addToStream("\n"); + curFlow.curPara().startParaLine(); + } + else + curFlow.curPara().startParaLine(); + + + } + + + public void setBlockProp(int startIndent,int endIndent) { + + + curFlow.startPara(); //Start a para + curFlow.curPara().setBlockProp(startIndent,endIndent); + + } + + public void createFrame(int x, int y, int w, int h) { + + //Create a new anchored frame + + bookComponent.createFrame(x,y,w,h); + + } + + + + public void addImage(String url,int x,int y,int w,int h) { + + Frame frame=bookComponent.createFrame(x,y,w,h); + ImportObject imageObject=new ImportObject(url,0,0,w,h); + frame.addContent(imageObject); + if (curFlow.curPara().curParaLine() == null) { + curFlow.curPara().startParaLine(); + + } + curFlow.curPara().curParaLine().addContent(frame); + + + } + + public void createTable() { + + // First create a table with an ID, then add it to the textflow + + Tbl table=bookComponent.createTable(); + if (curFlow.curPara().curParaLine() == null) { + curFlow.curPara().startParaLine(); + + } + curFlow.curPara().curParaLine().addContent(table); + + /* The above would have added the table to the textflow + But now the flow goes into the table, so ... */ + + curFlow=table; + + } + + public void setColumnProp(int colWidth) { + + + //Get the current table + + Tbl table=bookComponent.curTable(); + table.addColumn(colWidth); + + + } + + public void setCurrent(String current) { + + //Start the table body or header or footer + Tbl table=bookComponent.curTable(); + table.setCurrent(current); + + } + + public void startRow() { + + Tbl table=bookComponent.curTable(); + table.startRow(); + + + } + + public void startCell(int rowSpan,int colSpan) { + + Tbl table=bookComponent.curTable(); + table.startCell(rowSpan,colSpan); + + } + + public void endTable() { + + // Switch the ref back to the current textflow + + curFlow=bookComponent.curTextFlow(); + + } + + + + } |