Créer un PDF complexe
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 :
-
Ajoutez une image à la
Pageavecpage.addImage(...)et un rectangle de destinationRectangle. -
Créez un objet
TextFragmentpour l’en-tête et définissez sa police, sa taille de police, son alignement et saPosition. -
Créez un deuxième objet
TextFragmentpour le paragraphe de description. -
Créez un tableau
Tableavec des bordures, des marges internes de cellule et un style d’en-tête. -
Ajoutez les lignes d’horaires générées au tableau
Table. -
Ajoutez le tableau
Tableà la collection de paragraphes de la pagePage. -
Enregistrez l’objet
Documentau 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;
}