如何在子弹列表上添加缩进?

时间:2017-11-10 15:13:48

标签: jasper-reports indentation

我想在文本字段中添加一些缩进。我已经添加了一个项目符号样式(将<li>标记添加到文本中)但似乎JasperSoft Studio不会自动缩进文本。

即使设置“样式”标记并在段落顶部添加<ul>标记,也是如此:

"<ul><li> Example text 1... </li><li> Example text 2... </li></ul>"

JasperSoft仍然无法管理<ul>标记(不幸的是,查看文档,还有其他HTML标记..)所以结果不是我想要的。

此时我尝试在不同的论坛上搜索,我发现我可以创建一个手动报告样式并将其应用到我的文本字段(遵循本指南:Indentation in generated PDF using JasperReports)但是这对我有用。

我还尝试进行手动配置,认为创建样式对Jaspersoft来说不太舒服,并将文本字段设置为如下配置:

Border configuration   First line indentation

因此,将左边填充属性设置为 10 px 值,所有文本都应该向右移动一个小位移。在 -10 px 设置第一行缩进属性该段落的第一行应根据边距自动转到 0 px 位置的页面。 这应该是我所有的缩进,似乎JasperSoft正是因为这个而理解这一点:

JasperSoft text indentation

打印页面我得到的结果完全不同。

Here

有谁知道我忘记了什么?

2 个答案:

答案 0 :(得分:3)

这是一种快速制作子弹列表而不使用属性标记html的方法,您已正确定义为jasper-reports不能很好地支持。

使用unicode符号\u2022来表示项目符号,以下示例文本(\n是换行符)

"\u2022 Some text on line 1 that gets longer to wrap\n\u2022 This is text on line 2"

然后您可以按Indentation in generated PDF using JasperReports

中的说明设置leftPadding="10"firstLineIndent="-10"

示例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="Indentation" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="f0ac92f3-35e5-417e-aecd-5c47be379bf8">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <title>
        <band height="44" splitType="Stretch">
            <textField isStretchWithOverflow="true">
                <reportElement x="0" y="0" width="110" height="40" uuid="3563a40d-d80e-4e09-9d84-d4f1779c1895"/>
                <box topPadding="0" leftPadding="10" bottomPadding="0" rightPadding="0"/>
                <textElement markup="none">
                    <paragraph lineSpacing="Single" firstLineIndent="-10" leftIndent="0" spacingBefore="0"/>
                </textElement>
                <textFieldExpression><![CDATA["\u2022 Some text on line 1 that gets longer to wrap\n\u2022 This is text on line 2"]]></textFieldExpression>
            </textField>
        </band>
    </title>
</jasperReport>

<强>输出

result

  

然而,如果是我,我可能会将文本转换为   JRDataSource   并使用jr:list组件。有关如何从String创建数据源的示例,请参阅此How to convert a , separated String to a table layout? ,如果您想知道如何操作文本以插入unicode,请参阅How can I replace a character with an unicode image?

编辑我喜欢的添加解决方案,避免firstLineIndent="-10"黑客攻击

解决方案是在此示例中将字符串转换为JRDatasource

 new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(java.util.Arrays.asList($P{testText}.split("\n")))

然后使用jr:list<field name="_THIS" class="java.lang.String"/>

完整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="Indentation" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="f0ac92f3-35e5-417e-aecd-5c47be379bf8">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <subDataset name="ListDataset" uuid="a6053d26-ad58-4808-ac51-76e62529d7de">
        <queryString>
            <![CDATA[]]>
        </queryString>
        <field name="_THIS" class="java.lang.String"/>
    </subDataset>
    <parameter name="testText" class="java.lang.String">
        <defaultValueExpression><![CDATA["Some text on line 1 that gets longer to wrap\nThis is text on line 2"]]></defaultValueExpression>
    </parameter>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <title>
        <band height="34" splitType="Stretch">
            <componentElement>
                <reportElement x="0" y="0" width="170" height="20" uuid="a9d62b3a-cdad-4c44-a3e6-8e7688986380"/>
                <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">
                    <datasetRun subDataset="ListDataset" uuid="a21cd89b-dd5a-4135-90e0-a84ef83bd9dc">
                        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(java.util.Arrays.asList($P{testText}.split("\n")))]]></dataSourceExpression>
                    </datasetRun>
                    <jr:listContents height="20" width="170">
                        <ellipse>
                            <reportElement x="13" y="4" width="4" height="4" backcolor="#000000" uuid="c2a202b7-ca0f-4ce4-a2d8-35b314f8e1ee">
                                <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                                <property name="com.jaspersoft.studio.unit.height" value="pixel"/>
                            </reportElement>
                        </ellipse>
                        <textField isStretchWithOverflow="true">
                            <reportElement x="30" y="0" width="80" height="20" uuid="31b05be1-9d89-4928-aec8-095e15e66711"/>
                            <textElement textAlignment="Left"/>
                            <textFieldExpression><![CDATA[$F{_THIS}]]></textFieldExpression>
                        </textField>
                    </jr:listContents>
                </jr:list>
            </componentElement>
        </band>
    </title>
</jasperReport>

输出与上述相同,但我们并没有破坏负值,这可能会在某些出口产生问题。

答案 1 :(得分:0)

如果不需要文本重排或:

  • 将“标记”设置为none
  • 使用\u2022获取项目符号。
  • 手动将文本分成几行
  • \u00a0\u00a0\u00a0(不间断空格)放在没有项目符号的每行前面。这样可以很好地伪造缩进。

缺点:

  • 您必须手动断开线路
  • 不支持段落之间的间距。