【问题标题】:How to add indentation on bullet list?如何在项目符号列表上添加缩进?
【发布时间】:2017-11-10 15:13:47
【问题描述】:

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

即使设置 "styled" 标记并在段落顶部添加<ul> 标签,如下所示:

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

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

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

我也尝试过手动配置,认为创建样式对 Jaspersoft 来说不太舒服,并在文本字段中设置了这样的配置:

因此,将 left padding 属性设置为 10 px 值,所有文本都应向右移动一个小位移。将 first line indentation 属性设置为 -10 px 段落的第一行应该会根据边距自动到达 0 px 位置的页面。 这应该是我的全部缩进,JasperSoft 似乎因此而理解这一点:

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

有人知道我忘记了什么吗?

【问题讨论】:

    标签: jasper-reports indentation


    【解决方案1】:

    这将是一种快速制作项目符号列表的方法,而无需使用属性标签 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"
    

    然后你可以设置leftPadding="10"firstLineIndent="-10",如Indentation in generated PDF using JasperReports中描述的那样

    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>
    

    输出

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

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

    解决方法是在本例中将字符串转换为JRDatasource

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

    然后使用jr:list,与&lt;field name="_THIS" class="java.lang.String"/&gt;

    完整的 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>
    

    输出与上面相同,但我们没有使用可能在某些导出上产生问题的负值。

    【讨论】:

    • 感谢 Petter 的回答,我会尝试您的建议,如果他们解决了我的问题,我会通知您,这对我来说是最佳解决方案。也感谢您给我的指南,它们一定会很有趣。
    • 嗨@PetterFriberg Friberg,我有时间尝试你的第一个建议(unicode 符号 \u2022 和 leftPadding="10" 和 firstLineIndent="-10")但结果对我来说仍然是负面的.这就是我试图做的: 1. 我用你的规范格式化了我的文本,但这没有用(imgur.com/a/zIAAO)。 2. 我复制了您作为示例放置的 XML 代码,用我的文本更改了文本表达式,但这不起作用。 3.我把与示例相同的值,看看它是否是我的文本格式问题,但仍然无法正常工作。我希望我还是忘记了什么。
    • @Roberto 试试我的例子,你可以用 EmptyDatasource 运行它你得到了什么?我也尝试过使用旧的 iReport,它也按预期呈现。
    • 反正我不是很喜欢这个解决方案,我会编辑帖子并告诉你我会使用什么解决方案
    • @EriksonRodriguez 直接编辑 jrxml 就可以了,反正也有不需要的解决方案。
    【解决方案2】:

    如果不需要文本重排,非常简单的方法:

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

    缺点:

    • 您必须手动换行
    • 不支持段落之间的良好间距。只能有完整的空行。

    【讨论】:

    • 短文本很简单,但如果是长文本,那就很难了jejeje
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多