【问题标题】:how to prevent long text from being truncated on next subsequent page in Jasper Report如何防止长文本在 Jasper 报告的下一页上被截断
【发布时间】:2016-09-23 03:00:42
【问题描述】:

我有一个很长的静态测试。在我的主要 jrxml(细节带)中,我创建了一个子报告来打印这个长的静态文本。输出格式为 PDF。长文本打印到页尾,然后继续到下一页。但是,有些措辞在下一页中被遗漏/截断。

例如。这是一个很长很长很长的静态1文本长静态2文本静态3静态4

PDF 输出,第 1 页,它已打印(“这是一个很长很长的静态 1”)。但在第 2 页中,它继续以 ("static3 static4") 开头。有几个词丢失/被截断

这是主要的jrxml。它定义了一个框架。在此框架内,将定义子报表。

<frame>                   
<reportElement
    x="18"
    y="472"
    width="819"
    height="198"
    key="frame-4"
    positionType="Float"/>
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
 
 
 
<subreport  isUsingCache="true">
    <reportElement
        mode="Transparent"
        x="3"
        y="31"
        width="350"
        height="12"
        key="subreport-21"
        positionType="Float"
        isRemoveLineWhenBlank="true"
        isPrintInFirstWholeBand="true"/>
    <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).dataSource("/PrintOrders/StructuredNote[NoteID='ST']")]]></dataSourceExpression>
    <subreportExpression  class="java.lang.String"><![CDATA["/print/FullPrint.jasper"]]></subreportExpression>
</subreport>
 
 
</frame>

这是子报告 jrxml

<?xml version="1.0" encoding="UTF-8"  ?>
<!-- Created with iReport - A designer for JasperReports -->
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport
         name="FullPrint"
         columnCount="1"
         printOrder="Vertical"
         orientation="Landscape"
         pageWidth="842"
         pageHeight="595"
         columnWidth="842"
         columnSpacing="0"
         leftMargin="0"
         rightMargin="0"
         topMargin="0"
         bottomMargin="0"
         whenNoDataType="NoPages"
         scriptletClass="JasperUtil"
         isTitleNewPage="false"
         isSummaryNewPage="false"
         resourceBundle="AllBundles">
    <property name="ireport.scriptlethandling" value="2" />
    <property name="ireport.encoding" value="UTF-8" />
    <import value="java.util.*" />
    <import value="net.sf.jasperreports.engine.*" />
    <import value="net.sf.jasperreports.engine.data.*" />
 
 
    <parameter name="SUBREPORT_DIR" isForPrompting="true" class="java.lang.String">
        <defaultValueExpression ><![CDATA[".\\"]]></defaultValueExpression>
    </parameter>
    <queryString language="xPath"><![CDATA[PrintOrders/PrintOrder/PurchaseOrder]]></queryString>
 
    <field name="BLBST" class="java.lang.String">
        <fieldDescription><![CDATA[./GeneralNote]]></fieldDescription>
    </field>
    <field name="PoNumber" class="java.lang.String">
        <fieldDescription><![CDATA[./PoHeader/PoNumber]]></fieldDescription>
    </field>
 
    <sortField name="BLBScheduleId" />
 
 
        <group  name="PurchaseOrder" isReprintHeaderOnEachPage="true" >
            <groupExpression><![CDATA[$F{PoNumber}]]></groupExpression>
            <groupHeader>
            <band height="0"  isSplitAllowed="true" >
            </band>
            </groupHeader>
            <groupFooter>
            <band height="0"  isSplitAllowed="true" >
            </band>
            </groupFooter>
        </group>
        <background>
            <band height="0"  isSplitAllowed="true" >
            </band>
        </background>
        <title>
            <band height="0"  isSplitAllowed="true" >
            </band>
        </title>
        <pageHeader>
            <band height="0"  isSplitAllowed="true" >
            </band>
        </pageHeader>
        <columnHeader>
            <band height="0"  isSplitAllowed="true" >
            </band>
        </columnHeader>
        <detail>
            <band height="17"  isSplitAllowed="true" >
                <textField isStretchWithOverflow="true" isBlankWhenNull="true" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
                    <reportElement
                        x="3"
                        y="2"
                        width="821"
                        height="13"
                        key="textField-279"
                        positionType="Float"
                        isRemoveLineWhenBlank="true"/>
                    <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
                    <textElement>
                        <font pdfFontName="Helvetica" size="9" isBold="false"/>
                    </textElement>
                <textFieldExpression   class="java.lang.String"><![CDATA[$P{REPORT_SCRIPTLET}.doReplaceStringWithNewlineChar($F{BLBST})]]></textFieldExpression>
                </textField>
            </band>
        </detail>
        <columnFooter>
            <band height="0"  isSplitAllowed="true" >
            </band>
        </columnFooter>
        <pageFooter>
            <band height="0"  isSplitAllowed="true" >
            </band>
        </pageFooter>
        <summary>
            <band height="0"  isSplitAllowed="true" >
            </band>
        </summary>
</jasperReport>

这是我所做的和已经设置的。

  1. 对于子报表的文本框,设置“Stretch with Overfow” = true 和“position type” = Float

  2. 对于主 jrxml 中的子报表元素,我设置“Position type”=Float 和“Stretch Type”=no

我尝试了很多其他配置组合,例如

  • 位置类型 = 浮点数
  • 拉伸类型 = 相对于最高物体或相对于带高
  • 溢出时拉伸 = true

这个论坛还有其他帖子,我已经尝试了大多数建议,除了下面这个

  • 设置字体名称与pdf字体名称相同。因为两个下拉选择列表中都没有值,所以两个下拉列表中的值相同

这是屏幕截图。最上面是第1页,有很长的文字会溢出到下一页。但是,在第二页上,连续的句子被截断了。

【问题讨论】:

  • @PetterFriberg,我使用的是默认字体属性。 net.sf.jasperreports.default.font.name=SansSerif - 默认字体名称。 net.sf.jasperreports.default.pdf.font.name=Helvetica - 默认 PDF 字体。 net.sf.jasperreports.default.pdf.encoding=Cp1252 - 默认 PDF 字符编码。
  • @PetterFriberg,有没有办法可以在运行时在 pdf 报告布局中打印出字体名称/字体版本?意味着在 PDF 生成期间
  • @cjs 你不应该使用这些属性,你应该字体扩展提供 .ttf 给 jasper 报告和 itext (pdf),这样你就可以确保指标计算正确并呈现字体。这些只是我用类似问题回答的一些帖子stackoverflow.com/questions/39304759/…stackoverflow.com/questions/39084407/…stackoverflow.com/questions/33940126/…
  • @PetterFriberg。非常感谢你。我怎样才能对你的贡献投票?

标签: jasper-reports


【解决方案1】:

@PetterFriberg 的建议已经解决了这个问题。要帮助他人,只需点击@PetterFriberg 提供的链接即可。

附加信息,我使用的是 jasper 版本 3.5.3 而这个版本没有这个类。 net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory

所以,我将我的 jar 升级到 jasperreports-4.5.0

【讨论】:

  • 我建议了一个副本,考虑接受它(有 np 有欺骗,他们实际上是作为路标,因此点击链接,其他问题同样的问题)。我认为您可以留下这个答案,因为它还声明您更新了 jar。
猜你喜欢
  • 1970-01-01
  • 2013-02-16
  • 2013-12-06
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
相关资源
最近更新 更多