java jasperReports導出PDF字體加粗失效,中文顯示不出來

最近搞了一個項目,需要生成投保電子憑證的pdf文件,之前在項目也用了這個組件,只是很多年前別人開發的,我只是項目負責人而已,想起以前的項目就找了ireport這個做爲生成pdf的工具。一開始搗鼓了好久,中文不顯示出來,加粗失效問題困擾很久,終於兩天時間把他設計完了,主要是模板改的版本太多,其實這個東西真的挺簡單的。不多說了,直接上代碼。

<!-- jasperreports Start -->
		<dependency>
			<groupId>net.sf.jasperreports</groupId>
			<artifactId>jasperreports</artifactId>
			<version>6.0.0</version>
		</dependency>
		<!--字體加粗的依賴包-->
		<dependency>
			<groupId>net.sf.jasperreports</groupId>
			<artifactId>jasperreports-fonts</artifactId>
			<version>6.0.0</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.groovy</groupId>
			<artifactId>groovy</artifactId>
			<version>2.4.9</version>
		</dependency>
		<!--生成pdf組件包:iText.jar  -->
		<dependency>
			<groupId>com.lowagie</groupId>
			<artifactId>itext</artifactId>
			<version>4.2.1</version>
		</dependency>
		<!--中文字體包:iTextAsian.jar-->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itext-asian</artifactId>
			<version>5.2.0</version>
		</dependency>
	   <!-- jasperreports end -->

調用代碼

/**
 * @FileName testController.java
 * @Description:
 *
 * @Date 2020年2月22日
 * @author pangxianhe
 * 
 */
@RestController("testController")
@RequestMapping("/ireport")
@Api(value = "ireport測試", tags = "ireport測試")
public class testController extends BaseController<DtsWbRequestEntity> {
	@GetMapping("exportPdf")
	public void exportPdf(HttpServletRequest request, HttpServletResponse response) throws Exception {

		// 獲取容器資源解析器
		ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
		org.springframework.core.io.Resource[] resources = resolver.getResources("ireport/21.jasper");
		org.springframework.core.io.Resource[] resourcestb = resolver.getResources("img/tb.png");
		org.springframework.core.io.Resource[] resourceswb = resolver.getResources("img/wb.png");
		InputStream stream = resources[0].getInputStream();
		URI streamtb = resourcestb[0].getURI();
		URI streamwb = resourceswb[0].getURI();
		Map<String, Object> map=new HashMap<String, Object>();
		map.put("policyno", "9231989100");
		map.put("username", "賢哥");
		map.put("idtype", "身份證");
		map.put("idcard", "458015");
		map.put("tbimg", streamtb);
		map.put("wbimg", streamwb);
		map.put("signingdate", "2020-2-23");
		map.put("starendtime", "2020 年 02 月 25 日 00 時-2021 年 02 月 24 日 24 時");
		
		
		JasperPrint jasperPrint = JasperFillManager.fillReport(stream, map, new JREmptyDataSource());
		byte[] bytes = JasperExportManager.exportReportToPdf(jasperPrint);
		response.setContentType("application/pdf");
		response.setContentLength(bytes.length);
		ServletOutputStream ouputStream = response.getOutputStream();
		ouputStream.write(bytes, 0, bytes.length);
		ouputStream.flush();
		ouputStream.close();
	
		 
	}

}

以上代碼基本上搞定,接下來需要注意的是設計的時候的小細節了

中文顯示不出來,需要設置下這個,也可以在xml中全局添加這個

具體的代碼如下:

<style name="Base" isDefault="true" fontSize="10" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>

接下來解決加粗之後的字體不剩下的問題,具體什麼原因不顯示,大家可以百度下,接下來很簡單的一個設置即可,選擇這個類型的文本即可。

最後補充一個小技巧給大家,

static text如何設置邊框呢?然後堆成一個表格呢,接下來記住下面幾段代碼,好像在軟件中沒這個設置,我是找不到的。

z在xml中找到你要添加的邊框靜態字體的上方添加如下代碼即可生產邊框。代碼如下:

				<box>
					<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
					<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
					<bottomPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
					<rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
				</box>

效果圖我就不貼了,以上,如有說漏請留言互相交流。謝謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章