본문 바로가기

오픈소스 가이드

[JasperReports] #3 spring 안에서 jasper 생성하기

spring 으로 구성된 서버 프로젝트에서 jasper pdf 를 생성해보자.

jasper studio 에서 미리보기 하는것과 동일하게 생각하면 된다.

 

gradle 의존성 추가

// jasperreports
implementation("net.sf.jasperreports:jasperreports:$jasperreportsVersion") // 6.12.2
implementation("com.lowagie:itext:$itextVersion") // 2.1.7

// 리파지토리에서 com.lowagie:itext 를 못가져오는 경우, 직접 메이븐 리파지토리에서 다운로드 후 라이브러리 폴더에 저장
// 대신 jasper 의존성 추가하는 부분에서는 제외해야 함
implementation("net.sf.jasperreports:jasperreports:6.12.2") {
	exclude group: "com.lowagie"
}

 

.jasper 파일을 읽어서 pdf 로 출력하는 함수

fun jasperToPdf(inputStream: InputStream, parameters: Map<String, Any>, fields: Collection<Map<String, Any>>, outputStream: OutputStream) {
	var jasperPrint = JasperFillManager.fillReport(inputStream, parameters, JRMapCollectionDataSource(fields))
  	JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream)
}

입력스트림(jasper 파일입력스트림) 의 내용을 읽어서 parameter(1 row 데이터)를 세팅하고, fields(many rows 데이터) 를 채우고 출력스트림(pdf 파일출력스트림) 으로 출력한다.

 

테스트 함수

@Test
fun jasperToPdf() {
    val inputFilepath = "localpath/sample.jasper"
    FileInputStream(inputFilepath).use { fis ->
        FileOutputStream("$inputFilepath.pdf").use { fos ->
            PdfTransformer.jasperToPdf(
                inputStream = fis,
                outputStream = fos,
                parameters = mapOf(
                    "name" to "홍길동",
                    "age" to 77
                ),
                fields = listOf(
                    mapOf(
                        "drugName" to "아스피린",
                        "quantity" to 1
                    ),
                    mapOf(
                        "drugName" to "베아제",
                        "quantity" to 3
                    )
                )
            )
        }
    }
}

'오픈소스 가이드' 카테고리의 다른 글

[JasperReports] #2 한글폰트 설정  (0) 2020.07.17
[JasperReports] #1 Jasper studio  (3) 2020.05.12