如何删除使用JasperReports(jrxml)生成的PDF中不必要的包装?

时间:2014-04-20 07:37:17

标签: pdf jasper-reports textfield wrapping

我正在使用jasper报告生成我的PDF报告。我在 jrxml 文件中使用了以下 textField 配置。

<textField isStretchWithOverflow="true" isBlankWhenNull="true">
                    <reportElement uuid="ec0e2f1f-82d6-46fd-ba68-394be7f6b015" positionType="Float" stretchType="RelativeToTallestObject" isPrintRepeatedValues="false" mode="Transparent" x="0" y="0" width="100" height="16" isPrintInFirstWholeBand="true" isPrintWhenDetailOverflows="true"/>
                    <box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="0">
                        <pen lineColor="#757575"/>
                        <topPen lineWidth="0.0"/>
                        <leftPen lineWidth="1.0"/>
                        <bottomPen lineWidth="1.0"/>
                        <rightPen lineWidth="0.0"/>
                    </box>
                    <textElement textAlignment="Left" verticalAlignment="Top" markup="none">
                        <font size="11"/>
                        <paragraph lineSpacing="Single"/>
                    </textElement>
                    <textFieldExpression><![CDATA[$F{firstName}]]></textFieldExpression>
                </textField>

导出PDF时,会显示以下屏幕截图中给出的记录。请参阅第一个记录,第二个中没有单个字符。即使它表现得像文本包装。我认为必须有任何解决方案。如果有人解决了这个问题,请帮帮我 Here我正在为整个PDF文件提供链接。

jasper report exported pdf file screen-sht

1 个答案:

答案 0 :(得分:2)

示例PDF使用字体Helvetica(由PDF查看器提供),当一般预编译报告时,JasperReports肯定不会使用该字体。

如果使用不同的字体(具有不同的字体指标),输出中的字段可能会变得太大或太小。因此,我建议明确设置字体,并使用指示相同TTF字体的fontNamepdfFontName属性来执行此操作。或者,可以使用JasperReports字体扩展更干净地完成此操作。参看JasperReports - Fonts Sample了解详情。

fontNamepdfFontName

,例如,假设您在Windows环境中工作并具有适当的权限(否则只需调整路径以指向您的字体副本),您可以像这样使用Arial:

<textField isStretchWithOverflow="true" isBlankWhenNull="true">
    <reportElement positionType="Float" stretchType="RelativeToTallestObject" isPrintRepeatedValues="false" mode="Transparent" x="0" y="0" width="100" height="16" isPrintInFirstWholeBand="true" isPrintWhenDetailOverflows="true" uuid="e4335197-b9f6-4d24-9ea0-ef582bcc8393"/>
    <box topPadding="2" leftPadding="5" bottomPadding="0" rightPadding="0">
        <pen lineColor="#757575"/>
        <topPen lineWidth="1.0"/>
        <leftPen lineWidth="1.0"/>
        <bottomPen lineWidth="1.0"/>
        <rightPen lineWidth="1.0"/>
    </box>
    <textElement textAlignment="Left" verticalAlignment="Top" markup="none">
        <font fontName="Arial" size="11" pdfFontName="c:\Windows\Fonts\arial.ttf" isPdfEmbedded="true"/>
    </textElement>
    <textFieldExpression><![CDATA[$F{firstName}]]></textFieldExpression>
</textField>

PDF是JasperReports中的一个特例,因为与大多数其他输出格式(使用系统字体)相比,PDF查看器最重要的是使用每个PDF查看器必须提供的标准14种字体之一或嵌入相应PDF文档中的字体;因此,PDF文件生成略有不同。

字体扩展名

更干净的方法要求您编写一个文件,用于定义您的字体系列及所有相关信息,例如

<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
    <fontFamily name="Verdana">
        <normal>admin/plugins/ireport/config/fonts/verdana.ttf</normal>
        <bold>admin/plugins/ireport/config/fonts/verdanab.ttf</bold>
        <italic>admin/plugins/ireport/config/fonts/verdanai.ttf</italic>
        <boldItalic>admin/plugins/ireport/config/fonts/verdanaz.ttf</boldItalic>
        <pdfEncoding>Identity-H</pdfEncoding>
        <pdfEmbedded>true</pdfEmbedded>
    </fontFamily>
</fontFamilies>

(从该文件引用的字体(verdana * .ttf)是Microsoft“用于Web的TrueType核心字体”集合的一部分。其使用的许可协议可以在eula.html中找到,目前可以(在2011-04-01)可在http://www.microsoft.com/typography/fontpack/eula.htm找到。)

然后你需要告诉JasperReports字体扩展从the JasperReports font extension sample中描述的那个文件中检索它的信息,即在根包中提供一个jasperreports_extension.properties文件

net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory 
net.sf.jasperreports.extension.simple.font.families.dejavu=my_path/fonts.xml 

(指向fonts.xml是上面提到的文件。)