java – 贾斯珀报告PDF格式的字符编码
|
我想在jasper报告中使用自定义字体. Myanmar3是缅甸的标准字体.
一切都还可以,但ReportTitle必须是缅甸的缅甸字体3. 谷歌还将缅甸3用于缅甸地区. 将报告导出为html文件时.它可以显示报告标题.但是,导出的PDF文件无法正确显示. 在浏览器中. 在PDF中 public void report() throws Exception {
List<SalesReport> saleReports = salesReportService.findSalesReport(new SalesReportCriteria());
InputStream inputStream = new FileInputStream("report-template/saleReportTemplate.jrxml");
String outputFilePdf = "D:/temp/BasicReport.pdf";
String outputFileHtml = "D:/temp/BasicReport.html";
Map paramMap = new HashMap();
paramMap.put("ReportTitle","u1005u101Bu1004u103Au1038u1021u1004u103Au1038u1019u103Bu102Cu1038u1011u100Au103Au101Eu103Du1004u103Au1038u1001u103Cu1004u103Au1038");
paramMap.put("TableDataSource",new JRBeanCollectionDataSource(saleReports));
JasperDesign jasperDesign = JRXmlLoader.load(inputStream);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,paramMap,new JRBeanCollectionDataSource(saleReports));
JasperExportManager.exportReportToPdfFile(jasperPrint,outputFilePdf);
JasperExportManager.exportReportToHtmlFile(jasperPrint,outputFileHtml);
}
saleReportTemplate.jrxml <?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name="TableReport" pageWidth="842" pageHeight="595" orientation="Landscape" whenNoDataType="AllSectionsNoDetail" columnWidth="802"
leftMargin="20" rightMargin="20" topMargin="30" bottomMargin="30" isFloatColumnFooter="true" whenResourceMissingType="Empty" uuid="a255c602-4ff1-4db8-ab72-65b5c3ff9bdd">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<style name="Myanmar3" isDefault="true" fontName="Myanmar3" fontSize="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false"/>
<style name="Table">
<box leftPadding="0">
<pen lineWidth="1.0" lineColor="#000000"/>
</box>
</style>
<style name="TableHeader" mode="Opaque" backcolor="#808080"/>
<style name="TableFooter" mode="Opaque" backcolor="#C0C0C0"/>
<subDataset name="TableData" uuid="41cd3dac-2d22-41b9-9872-8fdb465d0f85">
<field ... for table generation/>
</subDataset>
<parameter name="TableDataSource" class="net.sf.jasperreports.engine.JRDataSource"/>
<parameter name="ReportTitle" class="java.lang.String" isForPrompting="false"/>
<title>
<band height="153">
<textField isBlankWhenNull="true">
<reportElement uuid="b44cb7c1-f7d5-467c-8982-b95f65dcb849" x="106" y="0" width="573" height="59"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="22" isBold="true" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression><![CDATA[$P{ReportTitle}]]></textFieldExpression>
</textField>
<componentElement>
-->other tag for table....
</componentElement>
</band>
</title>
</jasperReport>
我已经添加了MYANMAR3.TTF文件并在jasperreports-fonts-5.1.0.jar中为myanmar3字体配置. 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=net/sf/jasperreports/fonts/fonts.xml net.sf.jasperreports.extension.simple.font.families.myanmar3=net/sf/jasperreports/fonts/fonts.xml font.xml ...other default config.
<fontFamily name="Myanmar3">
<normal>net/sf/jasperreports/fonts/myanmar3/MYANMAR3.TTF</normal>
<bold>net/sf/jasperreports/fonts/myanmar3/MYANMAR3.TTF</bold>
<italic>net/sf/jasperreports/fonts/myanmar3/MYANMAR3.TTF</italic>
<boldItalic>net/sf/jasperreports/fonts/myanmar3/MYANMAR3.TTF</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
</fontFamily>
我已经测试了很多配置,参考和示例.但是,对PDF文件没有影响. 如果您有任何建议并提供,请告诉我. 解决方法
这是
iText(版本测试5.5.4)和ttf字体的问题,itext不支持连字,请参阅下面的评论
由于jasper-reports使用itext作为其库来呈现pdf,因此在jasper报告中无法解决此问题. 仅使用iText的示例代码将呈现与jasper报告相同的输出 public class FontTest {
/** The resulting PDF file. */
public static final String RESULT = "pdf/fontTest.pdf";
/** Test text. */
public static final String TEST = "u1005u101Bu1004u103Au1038u1021u1004u103Au1038u1019u103Bu102Cu1038u1011u100Au103Au101Eu103Du1004u103Au1038u1001u103Cu1004u103Au1038";
public void createPdf(String filename) throws IOException,DocumentException {
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream(filename));
document.open();
BaseFont bf = BaseFont.createFont(
"lib/myanmar3.ttf",BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
Font font = new Font(bf,20);
ColumnText column = new ColumnText(writer.getDirectContent());
column.setSimpleColumn(36,730,569,36);
column.addElement(new Paragraph(TEST,font));
column.go();
document.close();
}
public static void main(String[] args) throws IOException,DocumentException {
new FontTest().createPdf(RESULT);
}
}
我在itext部分发布了一个跟进question,以了解为什么itext无法正确呈现字体. 这是@Bruno Lowagie(iText的原始开发者)的评论
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
