温馨提示:本文翻译自stackoverflow.com,查看原文请点击:jasper reports - JasperReports: weird behaviour on textfield when convert to PDF
jasper-reports export-to-pdf

jasper reports - JasperReports:转换为PDF时文本字段上的异常行为

发布于 2020-05-23 20:33:07

1需要在JSON数组的Jasper报告中显示大量文本。这是我的JSON数组:

{
"data": {
    "contractualConditions": [
        {
            "text": "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam feugiat neque nec felis fringilla, sed eleifend odio dictum. Suspendisse arcu ligula, gravida condimentum fringilla ac, tincidunt nec orci. Suspendisse et ullamcorper magna. Aliquam suscipit posuere dolor at sagittis. In sed nisl sit amet lorem elementum tempor a in justo. Nam facilisis tellus ut semper lacinia. Cras eu nibh nisl. Maecenas egestas posuere dignissim.</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam feugiat neque nec felis fringilla, sed eleifend odio dictum. Suspendisse arcu ligula, gravida condimentum fringilla ac, tincidunt nec orci. Suspendisse et ullamcorper magna. Aliquam suscipit posuere dolor at sagittis. In sed nisl sit amet lorem elementum tempor a in justo. Nam facilisis tellus ut semper lacinia. Cras eu nibh nisl. Maecenas egestas posuere dignissim.</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam feugiat neque nec felis fringilla, sed eleifend odio dictum. Suspendisse arcu ligula, gravida condimentum fringilla ac, tincidunt nec orci. Suspendisse et ullamcorper magna. Aliquam suscipit posuere dolor at sagittis. In sed nisl sit amet lorem elementum tempor a in justo. Nam facilisis tellus ut semper lacinia. Cras eu nibh nisl. Maecenas egestas posuere dignissim.</p>"
        },
        {
            "text": "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam feugiat neque nec felis fringilla, sed eleifend odio dictum. Suspendisse arcu ligula, gravida condimentum fringilla ac, tincidunt nec orci. Suspendisse et ullamcorper magna. Aliquam suscipit posuere dolor at sagittis. In sed nisl sit amet lorem elementum tempor a in justo. Nam facilisis tellus ut semper lacinia. Cras eu nibh nisl. Maecenas egestas posuere dignissim.</p>"
        },
        {
            "text": "<p>Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi nibh diam, tincidunt nec condimentum quis, pulvinar nec sem. Curabitur nec vehicula purus. Pellentesque ac metus in sem aliquet pretium vitae non tellus. Aenean quis mi euismod orci euismod facilisis. Aliquam quis velit nisi. Ut hendrerit malesuada ligula id venenatis. Sed sagittis dolor mauris, nec elementum dui ornare nec. Fusce vel elementum dui. Donec tempor scelerisque sagittis. Nulla facilisi. Nam ac sagittis justo. Maecenas felis sapien, mollis quis feugiat at, mollis at justo. Proin leo dui, consequat eu pretium quis, eleifend sed sapien. Integer tellus eros, interdum ut molestie id, elementum et justo.</p>"
        }
    ]
}}

这是我的档案Jasper

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.11.0.final using JasperReports Library version 6.11.0-0c4056ccaa4d25a5a8c45672d2f764ea3498bebb  -->
<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="ClauseSubReport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="c75e022d-0c3e-47e1-b8fb-bbe084875130">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="sectionFive.xml"/>
    <queryString language="json">
        <![CDATA[data.contractualConditions]]>
    </queryString>
    <field name="text" class="java.lang.String">
        <property name="net.sf.jasperreports.jsonql.field.expression" value="text"/>
    </field>
    <detail>
        <band height="10">
            <property name="com.jaspersoft.studio.layout"/>
            <frame borderSplitType="DrawBorders">
                <reportElement stretchType="ElementGroupHeight" x="0" y="0" width="555" height="10" uuid="0048bcd5-74f4-44e8-8aae-cb4fb6b9a5ec"/>
                <box>
                    <pen lineColor="#98FC26"/>
                    <topPen lineWidth="1.0" lineStyle="Solid" lineColor="#98FC26"/>
                    <leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#98FC26"/>
                    <bottomPen lineWidth="1.0" lineStyle="Solid" lineColor="#98FC26"/>
                    <rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#98FC26"/>
                </box>
                <textField textAdjust="StretchHeight">
                    <reportElement x="60" y="1" width="490" height="9" forecolor="#1F497D" uuid="6448707a-6f36-4bef-96a1-6bc7634e72c3">
                        <property name="com.jaspersoft.studio.spreadsheet.connectionID" value="34deaa54-ac6e-42dd-8c82-c125d6810c22"/>
                    </reportElement>
                    <box>
                        <topPen lineWidth="1.0" lineStyle="Solid" lineColor="#1F497D"/>
                        <leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#1F497D"/>
                        <bottomPen lineWidth="1.0" lineStyle="Solid" lineColor="#1F497D"/>
                        <rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#1F497D"/>
                    </box>
                    <textElement textAlignment="Justified" markup="html">
                        <font size="7"/>
                    </textElement>
                    <textFieldExpression><![CDATA[$F{text}]]></textFieldExpression>
                </textField>
            </frame>
        </band>
    </detail>
</jasperReport>

结果是...

Jasper的PDF报告

因此,如您所见,每个文本字段的底部都有一个“随机”边距。1想删除此边距变得疯狂,但是1不知道如何去做。如果此预览在JasperStudio 1上看起来不错,但问题出在1导出为PDF时。

当然,绿/蓝线仅用于调试文本边距。

当文本到达页面末尾时,还有另一种怪异的行为,该行在某个位置中断,而不是您在此图像上看到的到达末尾的行(顶部是第1页,第2页底部):

贾斯珀(Jasper)的PDF

谢谢!

查看更多

提问者
Pipeline
被浏览
33
Pipeline 2020-03-08 18:03

感谢Alex K在评论中回答!他给了我钥匙,这是关于字体的。出于任何原因,如果1没有为我的文本字段定义任何字体,则它们之间的间隔是随机的。因此,修复了以下问题:

<textElement textAlignment="Justified" markup="html">
    <font fontName="Arial" size="7"/>
</textElement>

这仅使用Jaspersoft Studio解决了我的问题,但是我的 Spring Boot Linux应用程序部署到了停靠容器中并抛出异常,因为在JVM上找不到Tahoma字体。

net.sf.jasperreports.engine.util.JRFontNotFoundException: Font 'Arial' is not available to the JVM.

1表示平均值后,将Arial字体嵌入到我的Spring Boot proyecto中:https ://medium.com/@seymorethrottle/jasper-reports-adding-custom-fonts-589b55a52e7c 仔细阅读,特别注意此段:

请注意,字体(TTF)和PDF元素的CDATA是相对于jar根目录的字体文件的路径。那条路是怎么到达那里的?在导出罐子之前,我们将其输入“ PDF字体名称”字段。直观吧?1非常直观,以至于浪费了一个小时的工作,并用尽了浏览器选项卡上的半GB RAM,想找出导出的JAR文件为什么在Java中引发错误。

再次感谢Alex K提供的密钥!