There is indeed something not quite right, I think. As long as I play with cell content or with min-height on table-cell (FOP Trunk/1.0), the behaviour seems to be what's expected. However, if you start setting min-height on the second table-row, nothing happens. The layouter doesn't seem to allocate height for the "virtual" second row which causes the "C" cell to begin at the same Y coordinate as the "D" row which is probably undesired. I also think that if a block-progression-dimension (or min/max-height) is on a table-row and that has no effect, that could really be a bug. But without the height constraint, I think the current result is correct.
To force what I think you expect, you can set min-height="2.4em" on the "A" cell. (2.4em ~ 2 * line-height) On 20.09.2010 09:17:29 Pascal Sancho wrote: > Hi, > height applies to fo:table-row, and FOP is compliant with that, but... > > as said in FO-REC 1.1, §3.7.9 (see [1]): > "The fo:table-row formatting object does not generate any areas. The > fo:table-row formatting object returns the sequence of areas created by > concatenating the sequences of areas returned by each of the children of > the fo:table-row". > IMHO: > According to that, while there is a fo:table-cell [child of the > fo:table-row] that has the wished height, then the behavior conforms to > spec. > Other FOP guy can confirm? > > That can make some unexpected behavior like this you described. Expected > behavior should be: a rows-spanned cell should have the height equal to > the sum of spanned rows heights. > > [1] http://www.w3.org/TR/xsl/#fo_table-row > -- > Pascal > > Le 18/09/2010 02:44, Alexey Neyman a écrit : > > Hi Pascal, > > > > So, is "height" property supported on fo:table-row by FOP? > > > > FOP compliance page says "yes" (not "partial") on "height" support, and > > XSL-FO > > specification says this property is applicable to fo:table-row. Yet, I > > cannot > > get it to work. Am I doing something wrong? > > > > Regards, > > Alexey. > > > > On Wednesday, September 15, 2010 10:08:29 am Alexey Neyman wrote: > >> Hi Pascal, > >> > >> Just tried. While there is no exception, <fo:table-row min-height="1em"> > >> still does not work in FOP 1.0 (still no effect whatsoever). See quoted > >> email as to why <fo:table-cell height="..."> is not sufficient to solve > >> this issue. > >> > >> Regards, > >> Alexey. > >> > >> On Wednesday, September 15, 2010 12:35:00 am Pascal Sancho wrote: > >>> Hi Alexey > >>> > >>> this Exception issue seems to be fixed in FOP 1.0 (I've noticed in the > >>> pdf attached to your initial post that you used FOP 0.95). > >>> I suggest you to upgrade, at least min-height will work as expected > >>> without any Exception. > >>> > >>> Pascal > >>> > >>> Le 14/09/2010 22:10, Alexey Neyman a écrit : > >>>> Hi Pascal, > >>>> > >>>> I see your point, although this advice is not particularly useful to > >>>> what I am doing. As I mentioned, this table is generated by DocBook, > >>>> and its templates for tables are probably the most convoluted in the > >>>> whole stylesheet. I was trying to avoid heavy customizations of these > >>>> templates. > >>>> > >>>> Another issue is that what I really want is "min-height" property in > >>>> this case: at XSLT stage, it is not known whether text inside the > >>>> table cell will occupy 1, 2, 3 or 15 rows. I tried using min-height in > >>>> the test case I posted before, but this causes an exception in FOP > >>>> (see below). According to spec, using min-height is perfectly legal: > >>>> it should set minimum height, while retaining optimum and maximum > >>>> height as "auto". > >>>> > >>>> An finally, what you suggested won't work if another cell is more than > >>>> 1 row. With the example I posted: > >>>> > >>>> AB > >>>> AC > >>>> DC > >>>> > >>>> If I set height to 2em, it looks okay. But, if cell B contains a text > >>>> that wraps into 2nd line, the table again looks as > >>>> > >>>> AB > >>>> DC > >>>> > >>>> but now the whole row containing C and D cells is 2em in height. Given > >>>> that DocBook stylesheet does not know how many lines of text there will > >>>> be in each cell - that is determined by FO processor - I cannot > >>>> calculate the height value beforehand. > >>>> > >>>> So, I tried to set height/min-height on a fo:table-row instead. Setting > >>>> min-height= on fo:table-row results in a different exception (also, see > >>>> below). Setting height= on fo:table-row does not have any effect at > >>>> all. According to XSL-FO spec, block-progression-dimension property > >>>> (that is set through height property) is allowed on fo:table-row. Is > >>>> this a FOP bug/missing feature? > >>>> > >>>> Regards, > >>>> Alexey. > >>>> > >>>> Exception with min-height= on fo:table-cell: > >>>> ---->8----->8----->8----->8----->8----->8----->8 > >>>> Sep 14, 2010 12:37:47 PM org.apache.fop.cli.Main startFOP > >>>> SEVERE: Exception > >>>> java.lang.NullPointerException > >>>> > >>>> at > >>>> org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:2 > >>>> 1 7) at > >>>> org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:125) > >>>> at org.apache.fop.cli.Main.startFOP(Main.java:166) > >>>> at org.apache.fop.cli.Main.main(Main.java:197) > >>>> > >>>> Caused by: java.lang.NullPointerException > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.table.RowGroupLayoutManager.computeRowHeights( > >>>> Ro wGroupLayoutManager.java:165) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.table.RowGroupLayoutManager.createElementsForR > >>>> ow Group(RowGroupLayoutManager.java:127) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.table.RowGroupLayoutManager.getNextKnuthElemen > >>>> ts (RowGroupLayoutManager.java:60) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.table.TableContentLayoutManager.getKnuthElemen > >>>> ts ForRowIterator(TableContentLayoutManager.java:220) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.table.TableContentLayoutManager.getNextKnuthEl > >>>> em ents(TableContentLayoutManager.java:172) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.table.TableLayoutManager.getNextKnuthElements( > >>>> Ta bleLayoutManager.java:247) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.BlockStackingLayoutManager.getNextKnuthElement > >>>> s( BlockStackingLayoutManager.java:294) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.BlockLayoutManager.getNextKnuthElements(BlockL > >>>> ay outManager.java:116) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.FlowLayoutManager.getNextKnuthElements(FlowLay > >>>> ou tManager.java:107) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.PageBreaker.getNextKnuthElements(PageBreaker.j > >>>> av a:145) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.AbstractBreaker.getNextBlockList(AbstractBreak > >>>> er .java:552) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.PageBreaker.getNextBlockList(PageBreaker.java: > >>>> 13 7) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.AbstractBreaker.doLayout(AbstractBreaker.java: > >>>> 30 2) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.AbstractBreaker.doLayout(AbstractBreaker.java: > >>>> 26 4) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.PageSequenceLayoutManager.activateLayout(PageS > >>>> eq uenceLayoutManager.java:106) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.area.AreaTreeHandler.endPageSequence(AreaTreeHandler.jav > >>>> a: 234) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.fo.pagination.PageSequence.endOfNode(PageSequence.java:1 > >>>> 23 ) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.fo.FOTreeBuilder$MainFOHandler.endElement(FOTreeBuilder. > >>>> ja va:340) > >>>> > >>>> at > >>>> org.apache.fop.fo.FOTreeBuilder.endElement(FOTreeBuilder.java:1 > >>>> 6 9) at > >>>> > >>>> org.apache.xalan.transformer.TransformerIdentityImpl.endElement(Transfo > >>>> rm erIdentityImpl.java:1102) > >>>> > >>>> at > >>>> org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown > >>>> > >>>> Source) > >>>> > >>>> at > >>>> org.apache.xerces.xinclude.XIncludeHandler.endElement(Unknown > >>>> > >>>> Source) > >>>> > >>>> at > >>>> > >>>> org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown > >>>> Source) > >>>> > >>>> at > >>>> > >>>> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDi > >>>> sp atcher.dispatch(Unknown Source) > >>>> > >>>> at > >>>> > >>>> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unkn > >>>> ow n Source) > >>>> > >>>> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown > >>>> Source) at > >>>> org.apache.xerces.parsers.XML11Configuration.parse(Unknown > >>>> Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown > >>>> Source) at > >>>> org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown > >>>> Source) at > >>>> org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknow > >>>> n > >>>> > >>>> Source) > >>>> > >>>> at > >>>> > >>>> org.apache.xalan.transformer.TransformerIdentityImpl.transform(Transfor > >>>> me rIdentityImpl.java:485) > >>>> > >>>> at > >>>> org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:2 > >>>> 1 4) ... 3 more > >>>> > >>>> ---->8----->8----->8----->8----->8----->8----->8 > >>>> > >>>> > >>>> Exception with min-height= on fo:table-row: > >>>> ---->8----->8----->8----->8----->8----->8----->8 > >>>> Sep 14, 2010 12:53:10 PM org.apache.fop.cli.Main startFOP > >>>> SEVERE: Exception > >>>> java.lang.NullPointerException > >>>> > >>>> at > >>>> org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:2 > >>>> 1 7) at > >>>> org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:125) > >>>> at org.apache.fop.cli.Main.startFOP(Main.java:166) > >>>> at org.apache.fop.cli.Main.main(Main.java:197) > >>>> > >>>> Caused by: java.lang.NullPointerException > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.MinOptMaxUtil.toMinOptMax(MinOptMaxUtil.java:1 > >>>> 06 ) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.table.RowGroupLayoutManager.computeRowHeights( > >>>> Ro wGroupLayoutManager.java:155) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.table.RowGroupLayoutManager.createElementsForR > >>>> ow Group(RowGroupLayoutManager.java:127) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.table.RowGroupLayoutManager.getNextKnuthElemen > >>>> ts (RowGroupLayoutManager.java:60) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.table.TableContentLayoutManager.getKnuthElemen > >>>> ts ForRowIterator(TableContentLayoutManager.java:220) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.table.TableContentLayoutManager.getNextKnuthEl > >>>> em ents(TableContentLayoutManager.java:172) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.table.TableLayoutManager.getNextKnuthElements( > >>>> Ta bleLayoutManager.java:247) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.BlockStackingLayoutManager.getNextKnuthElement > >>>> s( BlockStackingLayoutManager.java:294) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.BlockLayoutManager.getNextKnuthElements(BlockL > >>>> ay outManager.java:116) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.FlowLayoutManager.getNextKnuthElements(FlowLay > >>>> ou tManager.java:107) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.PageBreaker.getNextKnuthElements(PageBreaker.j > >>>> av a:145) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.AbstractBreaker.getNextBlockList(AbstractBreak > >>>> er .java:552) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.PageBreaker.getNextBlockList(PageBreaker.java: > >>>> 13 7) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.AbstractBreaker.doLayout(AbstractBreaker.java: > >>>> 30 2) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.AbstractBreaker.doLayout(AbstractBreaker.java: > >>>> 26 4) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.layoutmgr.PageSequenceLayoutManager.activateLayout(PageS > >>>> eq uenceLayoutManager.java:106) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.area.AreaTreeHandler.endPageSequence(AreaTreeHandler.jav > >>>> a: 234) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.fo.pagination.PageSequence.endOfNode(PageSequence.java:1 > >>>> 23 ) > >>>> > >>>> at > >>>> > >>>> org.apache.fop.fo.FOTreeBuilder$MainFOHandler.endElement(FOTreeBuilder. > >>>> ja va:340) > >>>> > >>>> at > >>>> org.apache.fop.fo.FOTreeBuilder.endElement(FOTreeBuilder.java:1 > >>>> 6 9) at > >>>> > >>>> org.apache.xalan.transformer.TransformerIdentityImpl.endElement(Transfo > >>>> rm erIdentityImpl.java:1102) > >>>> > >>>> at > >>>> org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown > >>>> > >>>> Source) > >>>> > >>>> at > >>>> org.apache.xerces.xinclude.XIncludeHandler.endElement(Unknown > >>>> > >>>> Source) > >>>> > >>>> at > >>>> > >>>> org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown > >>>> Source) > >>>> > >>>> at > >>>> > >>>> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDi > >>>> sp atcher.dispatch(Unknown Source) > >>>> > >>>> at > >>>> > >>>> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unkn > >>>> ow n Source) > >>>> > >>>> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown > >>>> Source) at > >>>> org.apache.xerces.parsers.XML11Configuration.parse(Unknown > >>>> Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown > >>>> Source) at > >>>> org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown > >>>> Source) at > >>>> org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknow > >>>> n > >>>> > >>>> Source) > >>>> > >>>> at > >>>> > >>>> org.apache.xalan.transformer.TransformerIdentityImpl.transform(Transfor > >>>> me rIdentityImpl.java:485) > >>>> > >>>> at > >>>> org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:2 > >>>> 1 4) ... 3 more > >>>> > >>>> ---->8----->8----->8----->8----->8----->8----->8 > >>>> > >>>> On Tuesday, September 14, 2010 01:04:02 am Pascal Sancho wrote: > >>>>> Hi, > >>>>> > >>>>> I think the behaviour is correct here: > >>>>> Cells height is not sufficient to see the effect you want. > >>>>> try to increase the height of vertically spanned cells (by setting the > >>>>> height property to 2em) and you will see what I mean. > >>>>> > >>>>> Pascal > >>>>> > >>>>> Le 13/09/2010 22:39, Alexey Neyman a écrit : > >>>>>> <fo:table table-layout="fixed" width="100%" > >>>>>> > >>>>>> border-top="solid black 0.5pt" border-left="solid black 0.5pt"> > >>>>>> > >>>>>> <fo:table-body> > >>>>>> > >>>>>> <fo:table-row> > >>>>>> > >>>>>> <fo:table-cell border-bottom="solid black 0.5pt" > >>>>>> > >>>>>> border-right="solid black 0.5pt" > >>>>>> number-rows-spanned="2" > >>>>>> number-columns-spanned="2"> > >>>>>> > >>>>>> <fo:block>A</fo:block> > >>>>>> > >>>>>> </fo:table-cell> > >>>>>> <fo:table-cell border-bottom="solid black 0.5pt" > >>>>>> > >>>>>> border-right="solid black 0.5pt"> > >>>>>> > >>>>>> <fo:block>B</fo:block> > >>>>>> > >>>>>> </fo:table-cell> > >>>>>> > >>>>>> </fo:table-row> > >>>>>> <fo:table-row> > >>>>>> > >>>>>> <fo:table-cell border-bottom="solid black 0.5pt" > >>>>>> > >>>>>> border-right="solid black 0.5pt" number-rows-spanned="2"> > >>>>>> > >>>>>> <fo:block>C</fo:block> > >>>>>> > >>>>>> </fo:table-cell> > >>>>>> > >>>>>> </fo:table-row> > >>>>>> <fo:table-row> > >>>>>> > >>>>>> <fo:table-cell border-bottom="solid black 0.5pt" > >>>>>> > >>>>>> border-right="solid black 0.5pt"> > >>>>>> > >>>>>> <fo:block>D</fo:block> > >>>>>> > >>>>>> </fo:table-cell> > >>>>>> <fo:table-cell border-bottom="solid black 0.5pt" > >>>>>> > >>>>>> border-right="solid black 0.5pt"> > >>>>>> > >>>>>> <fo:block>E</fo:block> > >>>>>> > >>>>>> </fo:table-cell> > >>>>>> > >>>>>> </fo:table-row> > >>>>>> > >>>>>> </fo:table-body> > >>>>>> > >>>>>> </fo:table> Jeremias Maerki --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
