hswork.win

스프링부트+Vue3 제스퍼 리포팅 Tool 사용

2024-09-24 · 모바일

@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파일 출력끝

← 개발 기록 목록