[jira] [Commented] (FOP-3306) Multiple Artifacts for fo:leader dots in the accessible PDF

"Alexander Dyuzhev (Jira)" <[email protected]> Fri, 29 May 2026 14:27:00 +0000 (UTC)
Newsgroups gmane.text.xml.fop.devel
Message-ID <[email protected]>
    [ https://issues.apache.org/jira/browse/FOP-3306?page=3Dcom.atlassian.j=
ira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=3D180843=
83#comment-18084383 ]=20

Alexander Dyuzhev commented on FOP-3306:
----------------------------------------

[~jgoncalves] thank you for the update.

For
{code:xml}
<fo:leader leader-pattern=3D"rule" leader-length=3D"100%" rule-style=3D"dot=
ted"></fo:leader>  {code}
the exception occurs:
=C2=A0
{code:java}
SEVERE: Exception
org.apache.fop.apps.FOPException: java.lang.UnsupportedOperationException: =
getContentAreaIPD() called when it should have been overridden
javax.xml.transform.TransformerException: java.lang.UnsupportedOperationExc=
eption: getContentAreaIPD() called when it should have been overridden
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.cli.InputHandler.transformTo(=
InputHandler.java:298)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.cli.InputHandler.renderTo(Inp=
utHandler.java:117)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.cli.Main.startFOP(Main.java:1=
80)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.cli.Main.startFOP(Main.java:1=
42)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.cli.Main.main(Main.java:211)
Caused by: javax.xml.transform.TransformerException: java.lang.UnsupportedO=
perationException: getContentAreaIPD() called when it should have been over=
ridden
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at com.sun.org.apache.xalan.internal.xsltc.trax=
.TransformerImpl.transform(TransformerImpl.java:739)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at com.sun.org.apache.xalan.internal.xsltc.trax=
.TransformerImpl.transform(TransformerImpl.java:345)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.cli.InputHandler.transformTo(=
InputHandler.java:295)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ... 4 more
Caused by: java.lang.UnsupportedOperationException: getContentAreaIPD() cal=
led when it should have been overridden
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.AbstractBaseLayoutM=
anager.getContentAreaIPD(AbstractBaseLayoutManager.java:208)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.AbstractBaseLayoutM=
anager.getParentAreaIPD(AbstractBaseLayoutManager.java:149)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.AbstractBaseLayoutM=
anager.getBaseLength(AbstractBaseLayoutManager.java:87)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.inline.LeaderLayout=
Manager.getBaseLength(LeaderLayoutManager.java:353)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.datatypes.LengthBase.getBaseL=
ength(LengthBase.java:128)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.fo.properties.PercentLength.g=
etNumericValue(PercentLength.java:90)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.fo.properties.PercentLength.g=
etValue(PercentLength.java:112)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.fo.properties.LengthRangeProp=
erty.checkConsistency(LengthRangeProperty.java:225)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.fo.properties.LengthRangeProp=
erty.getOptimum(LengthRangeProperty.java:292)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.inline.LeaderLayout=
Manager.getLeaderAllocIPD(LeaderLayoutManager.java:108)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.inline.LeaderLayout=
Manager.getAllocationIPD(LeaderLayoutManager.java:98)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.inline.LeaderLayout=
Manager.getNextKnuthElements(LeaderLayoutManager.java:277)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.inline.InlineLayout=
Manager.getNextKnuthElements(InlineLayoutManager.java:332)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.inline.LineLayoutMa=
nager.collectInlineKnuthElements(LineLayoutManager.java:711)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.inline.LineLayoutMa=
nager.getNextKnuthElements(LineLayoutManager.java:627)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.BlockLayoutManager.=
getNextChildElements(BlockLayoutManager.java:141)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.BlockStackingLayout=
Manager.getNextKnuthElements(BlockStackingLayoutManager.java:292)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.BlockLayoutManager.=
getNextKnuthElements(BlockLayoutManager.java:113)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.BlockLayoutManager.=
getNextKnuthElements(BlockLayoutManager.java:105)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.BlockLayoutManager.=
getNextChildElements(BlockLayoutManager.java:141)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.BlockStackingLayout=
Manager.getNextKnuthElements(BlockStackingLayoutManager.java:292)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.BlockLayoutManager.=
getNextKnuthElements(BlockLayoutManager.java:113)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.BlockLayoutManager.=
getNextKnuthElements(BlockLayoutManager.java:105)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.BlockLayoutManager.=
getNextChildElements(BlockLayoutManager.java:141)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.BlockStackingLayout=
Manager.getNextKnuthElements(BlockStackingLayoutManager.java:292)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.BlockLayoutManager.=
getNextKnuthElements(BlockLayoutManager.java:113)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.BlockLayoutManager.=
getNextKnuthElements(BlockLayoutManager.java:105)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.FlowLayoutManager.g=
etNextChildElements(FlowLayoutManager.java:223)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.FlowLayoutManager.a=
ddChildElements(FlowLayoutManager.java:148)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.FlowLayoutManager.g=
etNextKnuthElements(FlowLayoutManager.java:116)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.FlowLayoutManager.g=
etNextKnuthElements(FlowLayoutManager.java:69)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.PageBreaker.getNext=
KnuthElements(PageBreaker.java:252)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.AbstractBreaker.get=
NextBlockList(AbstractBreaker.java:704)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.PageBreaker.getNext=
BlockList(PageBreaker.java:179)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.PageBreaker.getNext=
BlockList(PageBreaker.java:159)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.AbstractBreaker.doL=
ayout(AbstractBreaker.java:387)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.PageBreaker.doLayou=
t(PageBreaker.java:113)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.layoutmgr.PageSequenceLayoutM=
anager.activateLayout(PageSequenceLayoutManager.java:143)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.area.AreaTreeHandler.endPageS=
equence(AreaTreeHandler.java:267)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.fo.DelegatingFOEventHandler.e=
ndPageSequence(DelegatingFOEventHandler.java:115)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.accessibility.fo.FO2Structure=
TreeConverter.endPageSequence(FO2StructureTreeConverter.java:186)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.fo.pagination.PageSequence.en=
dOfNode(PageSequence.java:140)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.fo.FOTreeBuilder$MainFOHandle=
r.endElement(FOTreeBuilder.java:390)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.fo.FOTreeBuilder$3.run(FOTree=
Builder.java:207)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.fo.FOTreeBuilder$3.run(FOTree=
Builder.java:204)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at java.security.AccessController.doPrivileged(=
Native Method)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at org.apache.fop.fo.FOTreeBuilder.endElement(F=
OTreeBuilder.java:203)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at com.sun.org.apache.xml.internal.serializer.T=
oXMLSAXHandler.endElement(ToXMLSAXHandler.java:263)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at com.sun.org.apache.xerces.internal.parsers.A=
bstractSAXParser.endElement(AbstractSAXParser.java:610)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at com.sun.org.apache.xerces.internal.xinclude.=
XIncludeHandler.endElement(XIncludeHandler.java:1086)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at com.sun.org.apache.xerces.internal.impl.XMLD=
ocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.ja=
va:1784)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at com.sun.org.apache.xerces.internal.impl.XMLD=
ocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentSc=
annerImpl.java:2969)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at com.sun.org.apache.xerces.internal.impl.XMLD=
ocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at com.sun.org.apache.xerces.internal.impl.XMLN=
SDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:113)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at com.sun.org.apache.xerces.internal.impl.XMLD=
ocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java=
:507)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at com.sun.org.apache.xerces.internal.parsers.X=
ML11Configuration.parse(XML11Configuration.java:867)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at com.sun.org.apache.xerces.internal.parsers.X=
ML11Configuration.parse(XML11Configuration.java:796)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at com.sun.org.apache.xerces.internal.parsers.X=
MLParser.parse(XMLParser.java:142)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at com.sun.org.apache.xerces.internal.parsers.A=
bstractSAXParser.parse(AbstractSAXParser.java:1216)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at com.sun.org.apache.xerces.internal.jaxp.SAXP=
arserImpl$JAXPSAXParser.parse(SAXParserImpl.java:644)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at com.sun.org.apache.xalan.internal.xsltc.trax=
.TransformerImpl.transformIdentity(TransformerImpl.java:661)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 at com.sun.org.apache.xalan.internal.xsltc.trax=
.TransformerImpl.transform(TransformerImpl.java:730)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ... 6 more
---------
 {code}
=C2=A0

May this occurs due the parent element:
{code:xml}
<fo:block role=3D"TOCI" text-align-last=3D"justify">
{code}
Without 'leader-length':
{code:xml}
<fo:leader leader-pattern=3D"rule" rule-style=3D"dotted"></fo:leader>  {cod=
e}
the PDF generated: [^test_2026-05-29.pdf], but the dots render too closely =
together (see 2nd Introduction in the ToC). It there a way to change the di=
stance between the dots?

Updated .fo: [^test_2026-05-29.fo] =C2=A0

> Multiple Artifacts for fo:leader dots in the accessible PDF
> -----------------------------------------------------------
>
>                 Key: FOP-3306
>                 URL: https://issues.apache.org/jira/browse/FOP-3306
>             Project: FOP
>          Issue Type: Improvement
>            Reporter: Alexander Dyuzhev
>            Assignee: Joao Goncalves
>            Priority: Major
>         Attachments: fop.xconf, test.fo, test.pdf, test_2026-05-29.fo, te=
st_2026-05-29.pdf
>
>
> I have a simple XSL-FO with \{{<fo:leader leader-pattern=3D"dots"/>}}.
> In the generated PDF, each dot is individually marked as Artifact:
> {code:java}
>   =C2=A0 EMC
> =C2=A0 =C2=A0 /Link << /MCID 1 >> BDC
> =C2=A0 =C2=A0 =C2=A0 BT
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 /F1 12 Tf
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 1 0 0 -1 0 24.666 Tm
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 [ (Introduction ) -115.6667 () ] TJ
> =C2=A0 =C2=A0 =C2=A0 ET
> =C2=A0 =C2=A0 EMC
> =C2=A0 =C2=A0 /Artifact BMC
> =C2=A0 =C2=A0 =C2=A0 BT
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 /F1 12 Tf
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 1 0 0 -1 67.424 24.666 Tm
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 [ (.) ] TJ
> =C2=A0 =C2=A0 =C2=A0 ET
> =C2=A0 =C2=A0 EMC
> =C2=A0 =C2=A0 /Artifact BMC
> =C2=A0 =C2=A0 =C2=A0 BT
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 /F1 12 Tf
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 1 0 0 -1 70.76 24.666 Tm
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 [ (.) ] TJ
> =C2=A0 =C2=A0 =C2=A0 ET
> =C2=A0 =C2=A0 EMC
> =C2=A0 =C2=A0 /Artifact BMC
> =C2=A0 =C2=A0 =C2=A0 BT
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 /F1 12 Tf
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 1 0 0 -1 74.096 24.666 Tm
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 [ (.) ] TJ
> =C2=A0 =C2=A0 =C2=A0 ET
> =C2=A0 =C2=A0 EMC
> =C2=A0 =C2=A0 /Artifact BMC
> =C2=A0 =C2=A0 =C2=A0 BT
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 /F1 12 Tf
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 1 0 0 -1 77.432 24.666 Tm
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 [ (.) ] TJ
> =C2=A0 =C2=A0 =C2=A0 ET
> =C2=A0 =C2=A0 EMC
>   =C2=A0 /Artifact BMC
> ...{code}
> (I use PDFBox's PDFDebugger tool)
> =C2=A0
> How to mark the entire run of dots as a single artifact?
> {code:java}
> =C2=A0 =C2=A0 /Artifact BMC
> =C2=A0 =C2=A0 =C2=A0 BT
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 /F1 12 Tf
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 1 0 0 -1 410.67 24.666 Tm
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 [ (..................) ] TJ
> =C2=A0 =C2=A0 =C2=A0 ET
> =C2=A0 =C2=A0 EMC{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)