빈쿵바라기
좌충우돌 개발자의 기록
빈쿵바라기
전체 방문자
오늘
어제
  • 분류 전체보기 (53)
    • Programming (25)
      • JAVA (12)
      • Spring Boot (6)
      • JPA (7)
      • Python (0)
    • Database (12)
      • RDBMS (4)
      • NoSQL (7)
    • Server (11)
    • Elasticsearch (3)
    • ETC (2)

블로그 메뉴

    공지사항

    인기 글

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    빈쿵바라기

    좌충우돌 개발자의 기록

    Programming/JAVA

    [openhtmltopdf] HTML을 PDF로 변환하기

    2023. 1. 18. 17:06

    공식 GitHub URL : https://github.com/danfickle/openhtmltopdf

    1. Dependency 추가

    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.13.1</version>
    </dependency>
    <dependency>
        <groupId>com.openhtmltopdf</groupId>
        <artifactId>openhtmltopdf-core</artifactId>
        <version>1.0.6</version>
    </dependency>
    <dependency>
        <groupId>com.openhtmltopdf</groupId>
        <artifactId>openhtmltopdf-pdfbox</artifactId>
        <version>1.0.6</version>
    </dependency>

     

    2. Sample code

    // html 파일
    ClassPathResource resource = new ClassPathResource("pdf/industry-application.html");
    
    String outputFile = "output.pdf";
    
    // HTML 읽기
    String html = new String(Files.readAllBytes(Paths.get(resource.getFile().getAbsolutePath())));
    Document document = Jsoup.parse(html);
    
    // HTML 수정하기
    document.getElementById("name").val("빈쿵");
    
    // PDF 생성
    try (OutputStream os = new FileOutputStream(outputFile)) {
        PdfRendererBuilder builder = new PdfRendererBuilder();
    
        // 폰트 추가
        builder.useFont(new ClassPathResource("font/malgunsl.ttf").getFile(), "Malgun Gothic");
        builder.useFont(new ClassPathResource("font/NotoEmoji-Regular.ttf").getFile(), "Noto Emoji");
    
        builder.toStream(os);
        builder.withW3cDocument(new W3CDom().fromJsoup(document), "/");
        builder.run();
    }

     

    Tip

    • HTML의 style을 normalize 하고 작업할 것
    • font 파일은 os마다 없는 폰트가 존재하기 때문에 프로젝트내 resource에 위치하여 사용할 것
    • css font-family의 지정 이름과 builder.userFont()의 fontFamily parma을 맞춰줄 것
    • input 태그를 활용하려면 form 태그로 감싸줄 것
    • A4 용지 맞추기 위해서는 아래의 코드를 style에 추가해줄 것
    @page {
        margin: 0%;
        size: A4 portrait;
    }
    저작자표시 (새창열림)

    'Programming > JAVA' 카테고리의 다른 글

    JAVA SHA-256 암호화 방법  (0) 2023.05.10
    [Apache VFS] SFTP 파일 업로드  (0) 2023.03.08
    [Apache Tika] 문서파일에서 텍스트 추출하기  (0) 2022.12.15
    애니메이션 이미지인지 아닌지 체크하는 방법(Check image animated or not in JAVA)  (0) 2022.09.16
    [BufferedImage] 이미지 이진화(Image Binarize)  (0) 2022.09.16
      'Programming/JAVA' 카테고리의 다른 글
      • JAVA SHA-256 암호화 방법
      • [Apache VFS] SFTP 파일 업로드
      • [Apache Tika] 문서파일에서 텍스트 추출하기
      • 애니메이션 이미지인지 아닌지 체크하는 방법(Check image animated or not in JAVA)
      빈쿵바라기
      빈쿵바라기
      삽질하는 개발자의 좌충우돌 개발기

      티스토리툴바