Créer un PDF complexe

Contents
[ ]

L’exemple Hello World présente les étapes de base de la création d’un PDF. Cet exemple reprend ces étapes et crée un document plus riche combinant des graphiques, du texte et du contenu tabulaire.

Pour créer un document PDF plus complexe en Java :

  1. Créez un objet Document et ajoutez une Page.

  2. Ajoutez une image à la Page avec page.addImage(...) et un rectangle de destination Rectangle.

  3. Créez un objet TextFragment pour l’en-tête et définissez sa police, sa taille de police, son alignement et sa Position.

  4. Créez un deuxième objet TextFragment pour le paragraphe de description.

  5. Créez un tableau Table avec des bordures, des marges internes de cellule et un style d’en-tête.

  6. Ajoutez les lignes d’horaires générées au tableau Table.

  7. Ajoutez le tableau Table à la collection de paragraphes de la page Page.

  8. Enregistrez l’objet Document au format PDF.

Le code Java suivant est basé sur 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());
    }
}

Cet exemple utilise une méthode auxiliaire pour préparer le tableau des horaires, mettre en forme l’en-tête et générer les heures de départ :

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;
}