我讀如果缺少PDF字體,jasper報告爲什麼不拋出JRFontNotFoundException?
- https://stackoverflow.com/a/4028080/5277820
- https://stackoverflow.com/a/35549391/5277820
- http://community.jaspersoft.com/questions/543275/fonts-problem-while-using-jasper-reports-402-version
- http://refermycode.com/remove-font-dependency-in-jasper-report/
,我預計,Jasper報表拋出一個JRFontNotFoundException
如果字體不在計算機上安裝。
但我的應用程序不會拋出JRFontNotFoundException
,雖然我沒有在任何(Jaspersoft Studios,JasperReports,Adobe Acrobat Reader)機器上安裝使用過的字體「Helvetica」。
JRXML:
<parameter name="timestamp" class="java.util.Date"/>
[...]
<textField>
<reportElement x="0" y="0" width="50" height="16" uuid="0007846a-26f1-457a-a198-67a2f7c8417c">
<property name="local_mesure_unitwidth" value="pixel"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
<property name="local_mesure_unitx" value="pixel"/>
<property name="com.jaspersoft.studio.unit.x" value="px"/>
<property name="local_mesure_unity" value="pixel"/>
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="local_mesure_unitheight" value="pixel"/>
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
<box padding="2"/>
<textElement textAlignment="Left" verticalAlignment="Top">
<font size="8" pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression><![CDATA[DATEFORMAT($P{timestamp},"dd.MM HH:mm")]]></textFieldExpression>
</textField>
Maven依賴:
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>5.6.0</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-functions</artifactId>
<version>5.6.0</version>
</dependency>
的Java:
private byte[] createPdf() {
try {
InputStream is = getClass().getResourceAsStream("MyReport.jasper");
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(is);
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("timestamp", new Date());
JRDataSource jrDataSource = new JRBeanCollectionDataSource(new Vector(), false);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, jrDataSource);
byte[] pdf = JasperExportManager.exportReportToPdf(jasperPrint);
return pdf;
} catch (JRException e) {
throw new RuntimeException("Could not create PDF.", e);
}
}
原因爲t帽子JRFontNotFoundException
如果在屬性fontName
字體未安裝只拋出:
異常時用作值在報告模板的
fontName
屬性的字體名稱,未在任何運行時可用JasperReports的字體的發現提出擴展名以及Java虛擬機可用的字體名稱之間。
如果未安裝屬性pdfFontName
中的字體(而不是使用任何其他已安裝字體),是否有任何方法可以中止生成PDF?