我正在使用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文件提供链接。
答案 0 :(得分:2)
示例PDF使用字体Helvetica(由PDF查看器提供),当一般预编译报告时,JasperReports肯定不会使用该字体。
如果使用不同的字体(具有不同的字体指标),输出中的字段可能会变得太大或太小。因此,我建议明确设置字体,并使用指示相同TTF字体的fontName
和pdfFontName
属性来执行此操作。或者,可以使用JasperReports字体扩展更干净地完成此操作。参看JasperReports - Fonts Sample了解详情。
fontName
和pdfFontName
,例如,假设您在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是上面提到的文件。)