스프링부트+Vue3 제스퍼 리포팅 Tool 사용
@Controller
public class JasperController {
private final BoardService boardService;
@Autowired
public JasperController(BoardService boardService) {
this.boardService = boardService;
}
@GetMapping(value="generate/{date}")
public ResponseEntity<byte[]> generateStatus(@PathVariable("date") String date) throws Exception, JRException {
// jasper에 띄울 데이터 date에 맞춰 받아오기
List<BoardStatus> result = boardService.getStatus(date);
// 받아온 데이터를 jasper datasource로 등록
JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(result);
// jasper 컴파일할 양식 설정 - 만들어둔 jrxml 파일 경로 설정
JasperReport compileReport = JasperCompileManager.compileReport(new FileInputStream("src/main/resources/StatusReport.jrxml"));
// datasource를 매핑해 양식(jrxml)에 맞게 컴파일
HashMap<String, Object> map =new HashMap<>();
JasperPrint report = JasperFillManager.fillReport(compileReport, map, beanCollectionDataSource);
// return 방식1. 컴파일된 pdf파일을 현재 폴더에 생성
// JasperExportManager.exportReportToPdfFile(report, "BoardStatus.pdf");
// return "generated";
// return 방식2. 프린트 및 adobe pdf 화면 띄우기
// *주의: 프론트에서 화면을 띄울 수 없고, 서버 url을 직접 띄워야함..
byte[] data = JasperExportManager.exportReportToPdf(report);
HttpHeaders headers = new HttpHeaders();
headers.set(HttpHeaders.CONTENT_DISPOSITION, "inline;filename=BoardStatus.pdf");
return ResponseEntity.ok().headers(headers).contentType(MediaType.APPLICATION_PDF).body(data);
}
}
ByteArrayResource 를 이용하여 PDF파일을 생성하여 return
JasperReports -> 6.20.0, JasperReports-fonts -> 6.20.0
JasperReports-jdt -> 7.0.0
위 버전을 사용하였음
<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="User Report" pageWidth="595" pageHeight="842"
columnCount="1" columnWidth="555">
<title>
<band height="50">
<textField>
<reportElement x="0" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA["User Report"]]></textFieldExpression>
<textElement>
<font fontName="NanumGothic" pdfNameFont="fonts/H2GTRM.TTF" size="12"/>
</textElement>
</textField>
</band>
</title>
</jasperReport>
pdfNameFont 이걸 설정해줘야 커스텀폰트로 한글을 출력할 수 있음
src/main/resources 밑에 jasperreports.properties 를 작성하고
net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.FontsRegistryFactory
를 입력해줌
src/main/resources 밑에 fonts폴더를 생성하고 그 밑에
fonts.xml 을 작성, 폰트파일 ttf도 같이 넣어준다.
<?xml version="1.0" encoding="UTF-8"?>
<fonts>
<font family="NanumGothic" pdfEncoding="Identity-H" isPdfEmbedded="true">
<normal>fonts/NanumGothic.ttf</normal>
<bold>fonts/NanumGothicBold.ttf</bold>
<italic>fonts/NanumGothicItalic.ttf</italic>
<boldItalic>fonts/NanumGothicBoldItalic.ttf</boldItalic>
</font>
</fonts>
요렇게해서 jrxml을 이용한 제스퍼리포트 PDF파일 출력끝