【发布时间】: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>
这是我所做的和已经设置的。
对于子报表的文本框,设置“Stretch with Overfow” = true 和“position type” = Float
对于主 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