Как использовать свойство ‘пробел’ в fop xsl-fo?

#apache-fop

#apache-fop

Вопрос:

Я использую FOP 2.2 для того, чтобы сгенерировать PDF-файл из XML-документов. Документация FOP находится здесь http://xmlgraphics.apache.org/fop /

PDF-документ сгенерирован нормально. Тем не менее, я продолжаю получать это сообщение об ошибке.

     ERROR: Invalid property value encountered in white-space="pre-wrap": org.apache.fop.fo.expr.PropertyException: null:118:-1: No conversion defined pre-wrap; property:'white-space' (See position 119:-1)
org.apache.fop.fo.expr.PropertyException: null:118:-1: No conversion defined pre-wrap; property:'white-space'
    at org.apache.fop.fo.properties.PropertyMaker.make(PropertyMaker.java:446)
    at org.apache.fop.fo.PropertyList.convertAttributeToProperty(PropertyList.java:499)
    at org.apache.fop.fo.PropertyList.addAttributesToList(PropertyList.java:386)
    at org.apache.fop.fo.FObj.processNode(FObj.java:124)
    at org.apache.fop.fo.flow.table.TableFObj.processNode(TableFObj.java:232)
    at org.apache.fop.fo.flow.table.TableRow.processNode(TableRow.java:82)
    at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.startElement(FOTreeBuilder.java:291)
    at org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java:179)
    at net.sf.saxon.event.ContentHandlerProxy.startContent(ContentHandlerProxy.java:252)
    at net.sf.saxon.event.ProxyReceiver.startContent(ProxyReceiver.java:169)
    at net.sf.saxon.event.NamespaceReducer.startContent(NamespaceReducer.java:187)
    at net.sf.saxon.event.ReceivingContentHandler.startElement(ReceivingContentHandler.java:195)
    at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown 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(Unknown Source)
    at net.sf.saxon.event.Sender.sendSAXSource(Sender.java:262)
    at net.sf.saxon.event.Sender.send(Sender.java:128)
    at net.sf.saxon.IdentityTransformer.transform(IdentityTransformer.java:28)
  

шаблон xsl содержит приведенный ниже код:

 <xsl:attribute name="style">
    <xsl:text>white-space: pre-wrap;</xsl:text>
</xsl:attribute>
  

Ответ №1:

(Я предполагаю, что вы конвертируете HTML в XSL-FO, используя XSLT, поскольку style это недопустимый атрибут FO)

В сообщении об ошибке сообщается, что это pre-wrap недопустимое значение для свойства white-space ; единственными допустимыми значениями являются normal , pre и nowrap .

Однако в XSL-FO white-space это просто «сокращенное свойство» для быстрого управления набором свойств, связанных с пробелами, поэтому вы должны быть в состоянии достичь желаемого результата, непосредственно устанавливая эти свойства вместо этого:

 linefeed-treatment="preserve" 
white-space-collapse="false" 
white-space-treatment="preserve"