Как печатать / отображать выражения MathML?

В настоящее время я пытаюсь использовать текстовое поле с markup="html", но это не работает.

Пример

<textField isStretchWithOverflow="true" isBlankWhenNull="true">
<reportElement positionType="Float" stretchType="RelativeToTallestObject" x="100" y="0" width="450" height="25" isPrintWhenDetailOverflows="true" uuid="1aeaa5e9-4136-4239-a301-2733598340d9">
    <property name="com.jaspersoft.studio.unit.height" value="pixel"/>
    <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
</reportElement>
<textElement verticalAlignment="Middle" markup="html">
    <paragraph lineSpacing="Single" leftIndent="5" rightIndent="3"/>
</textElement>
<textFieldExpression><![CDATA[$F{question}]]></textFieldExpression>

$ F {question} содержат:

"<p id="id"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi><mo>+</mo><mo>&#160;</mo><mi>B</mi><mo>&#160;</mo><mo>&#160;</mo><msqrt><mi>c</mi><mfenced><mrow><mi>d</mi><mfenced open="[" close="]"><mi>r</mi></mfenced></mrow></mfenced></msqrt><mo>&#160;</mo><mi>&#948;</mi><mo>&#160;</mo><mo>&#8734;</mo><mi mathvariant="normal">&#960;</mi><mo>&#160;</mo></math></p>"

Ожидаемый результат:

Ожидаемый результат

Результат, который я получаю:

Результат, который я получаю


person Nayan Chitte    schedule 25.02.2021    source источник


Ответы (1)


TextField не поддерживает MathML, он поддерживает только очень простой html, и вы не можете использовать компонент html, поскольку JEditorPane, на котором он построен, также не поддерживает MathML.

Вам понадобится внешняя библиотека, например jeuclid, как только эта библиотека будет указана в пути к классам, вы можете отобразить xml в BufferedImage, используя _ 2_, а затем отобразить его в отчете jasper.

Это можно сделать без вспомогательного класса java, как в этом примере, поэтому весь код пишется непосредственно в jrxml в 1 строке (с использованием шаблона построителя ниже), но для ясности примера я буду использовать внешний вспомогательный класс.

Пример

Джава

public class MathML {
     public static BufferedImage getImage(String xml, float size) throws IOException, SAXException, ParserConfigurationException {          
        // Load the string to a node
        Element node =  DocumentBuilderFactory
                .newInstance()
                .newDocumentBuilder()
                .parse(new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)))
                .getDocumentElement();              
        //Generate the layout parameter
        MutableLayoutContext params = new LayoutContextImpl(
                LayoutContextImpl.getDefaultLayoutContext());
        params.setParameter(Parameter.MATHSIZE, size);      
        //Render the xml to a BufferedImage
        return Converter.getInstance().render(node, params);
    }
}

jrxml

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Blank_A4_12" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="8deaea2e-3739-4c4e-b2b5-8c58773ab1a0">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <title>
        <band height="50" splitType="Stretch">
            <image>
                <reportElement x="0" y="0" width="100" height="50" uuid="9ee17167-a91e-4725-b36e-a4bba5e24acb">
                </reportElement>
                <imageExpression><![CDATA[it.jdd.MathML.getImage("<math xmlns='http://www.w3.org/1998/Math/MathML'><mi>A</mi><mo>+</mo><mo>&#160;</mo><mi>B</mi><mo>&#160;</mo><mo>&#160;</mo><msqrt><mi>c</mi><mfenced><mrow><mi>d</mi><mfenced open='[' close=']'><mi>r</mi></mfenced></mrow></mfenced></msqrt><mo>&#160;</mo><mi>&#948;</mi><mo>&#160;</mo><mo>&#8734;</mo><mi mathvariant='normal'>&#960;</mi><mo>&#160;</mo></math>",70f)]]></imageExpression>
            </image>
        </band>
    </title>
</jasperReport>

Вывод (экспорт в pdf)

Экспорт в pdf

person Petter Friberg    schedule 26.02.2021