복잡한 PDF 만들기

Contents
[ ]

Hello World 예제는 가장 간단한 PDF 생성 경로를 다룹니다. 이 예는 해당 워크플로를 기반으로 그래픽, 텍스트 및 표 형식의 콘텐츠를 결합하는 보다 풍부한 문서를 만듭니다.

Java로 더 복잡한 PDF 문서를 생성하려면:

  1. Document를 생성하고 Page를 추가하세요.
  2. page.addImage(...) 및 대상 Rectangle을 사용하여 Page에 이미지를 추가하세요.
  3. 헤더 TextFragment를 만들고 글꼴, 크기, 정렬 및 Position을 설정하세요.
  4. 설명 단락에 대한 두 번째 TextFragment를 만드세요.
  5. 테두리, 패딩, 머리글 스타일을 적용하여 Table을 만드세요.
  6. 생성된 일정 행을 Table에 추가하세요.
  7. Page 단락에 Table을 추가하세요.
  8. 출력된 PDF Document를 저장하세요.

다음 Java 코드는 GetStartedExamples.java를 기반으로 합니다.

public static void complexExample(Path imageFile, Path outputFile) {
    try (Document document = new Document()) {
        Page page = document.getPages().add();

        page.addImage(imageFile.toString(), new Rectangle(20, 730, 120, 830, true));

        TextFragment header = new TextFragment("New ferry routes in Fall 2029");
        header.getTextState().setFont(FontRepository.findFont("Arial"));
        header.getTextState().setFontSize(24);
        header.setHorizontalAlignment(HorizontalAlignment.Center);
        header.setPosition(new Position(130, 720));
        page.getParagraphs().add(header);

        String descriptionText = "Visitors must buy tickets online and tickets are limited to 5,000 per day. "
                + "Ferry service is operating at half capacity and on a reduced schedule. "
                + "Expect lineups.";
        TextFragment description = new TextFragment(descriptionText);
        description.getTextState().setFont(FontRepository.findFont("Times New Roman"));
        description.getTextState().setFontSize(14);
        description.setHorizontalAlignment(HorizontalAlignment.Left);
        page.getParagraphs().add(description);

        page.getParagraphs().add(createScheduleTable());

        document.save(outputFile.toString());
    }
}

동일한 예에서는 도우미 메서드를 사용하여 헤더 형식 및 생성된 출발 시간이 포함된 일정 테이블을 준비합니다.

private static Table createScheduleTable() {
    Table table = new Table();
    table.setColumnWidths("200 200");
    table.setBorder(new BorderInfo(BorderSide.Box, 1.0f, Color.getDarkSlateGray()));
    table.setDefaultCellBorder(new BorderInfo(BorderSide.Box, 0.5f, Color.getBlack()));
    table.setDefaultCellPadding(new MarginInfo(4.5, 4.5, 4.5, 4.5));
    table.getMargin().setBottom(10);
    table.getDefaultCellTextState().setFont(FontRepository.findFont("Helvetica"));

    Row headerRow = table.getRows().add();
    Cell departsCityCell = headerRow.getCells().add("Departs City");
    Cell departsIslandCell = headerRow.getCells().add("Departs Island");
    styleHeaderCell(departsCityCell);
    styleHeaderCell(departsIslandCell);

    Duration time = Duration.ofHours(6);
    Duration increment = Duration.ofMinutes(30);
    for (int index = 0; index < 10; index++) {
        Row dataRow = table.getRows().add();
        dataRow.getCells().add(formatTime(time));
        time = time.plus(increment);
        dataRow.getCells().add(formatTime(time));
    }

    return table;
}