Manipuler des documents PDF en Java
Aspose.PDF for Java inclut des opérations de structure de document qui vont au-delà de la simple édition de pages.
Valider la conformité PDF/A-1a
Utilisez cet exemple lorsque vous devez vérifier si un document répond à la norme d’archivage PDF/A-1a.
- Ouvrez le PDF source Document.
- Exécutez la validation par rapport à la cible PdfFormat requise.
- Enregistrez le rapport de validation dans le chemin de sortie spécifié.
public static void validatePdfaStandardA1a(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
document.validate(outputFile.toString(), PdfFormat.PDF_A_1A);
}
}
Valider la conformité PDF/A-1b
Cette variation valide le même document source par rapport au niveau de conformité PDF/A-1b.
- Ouvrez le PDF source Document.
- Appelez la méthode de validation avec la valeur PdfFormat pour PDF/A-1b.
- Écrivez le résultat de la validation dans le fichier de rapport de sortie.
public static void validatePdfaStandardA1b(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
document.validate(outputFile.toString(), PdfFormat.PDF_A_1B);
}
}
Ajouter une table des matières
Utilisez cette approche lorsque le document doit inclure une page de table des matières générée avec des liens vers des pages de contenu.
- Ouvrez le PDF source Document.
- Insérez une nouvelle TOC Page et configurez sa TocInfo.
- Créez des entrées Heading qui pointent vers les pages de destination.
- Enregistrez le document mis à jour.
public static void addTableOfContents(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
Page tocPage = document.getPages().insert(1);
TocInfo tocInfo = new TocInfo();
TextFragment title = new TextFragment("Table Of Contents");
title.getTextState().setFontSize(20);
title.getTextState().setFontStyle(FontStyles.Bold);
tocInfo.setTitle(title);
tocPage.setTocInfo(tocInfo);
String[] titles = {"First page", "Second page"};
for (int index = 0; index < titles.length && index + 2 <= document.getPages().size(); index++) {
Heading heading = new Heading(1);
TextSegment segment = new TextSegment(titles[index]);
heading.setTocPage(tocPage);
heading.getSegments().add(segment);
Page destinationPage = document.getPages().get_Item(index + 2);
heading.setDestinationPage(destinationPage);
heading.setTop(destinationPage.getRect().getHeight());
tocPage.getParagraphs().add(heading);
}
document.save(outputFile.toString());
}
}
Personnaliser les niveaux et le formatage de la table des matières
Cet exemple montre comment attribuer différents paramètres visuels à plusieurs niveaux de table des matières.
- Ouvrez le PDF source Document.
- Ajoutez une page de table des matières Page et configurez le tableau de format TocInfo.
- Créez des exemples d’entrées Heading avec différents niveaux.
- Enregistrez le document avec la table des matières formatée.
public static void setTocLevels(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
Page tocPage = document.getPages().add();
TocInfo tocInfo = new TocInfo();
tocInfo.setLineDash(TabLeaderType.Solid);
TextFragment title = new TextFragment("Table Of Contents");
title.getTextState().setFontSize(30);
tocInfo.setTitle(title);
tocPage.setTocInfo(tocInfo);
tocInfo.setFormatArrayLength(4);
tocInfo.getFormatArray()[0].getMargin().setLeft(0);
tocInfo.getFormatArray()[0].getMargin().setRight(30);
tocInfo.getFormatArray()[0].setLineDash(TabLeaderType.Dot);
tocInfo.getFormatArray()[0].getTextState().setFontStyle(FontStyles.Bold | FontStyles.Italic);
tocInfo.getFormatArray()[1].getMargin().setLeft(10);
tocInfo.getFormatArray()[1].getMargin().setRight(30);
tocInfo.getFormatArray()[1].setLineDash(3);
tocInfo.getFormatArray()[1].getTextState().setFontSize(10);
tocInfo.getFormatArray()[2].getMargin().setLeft(20);
tocInfo.getFormatArray()[2].getMargin().setRight(30);
tocInfo.getFormatArray()[2].getTextState().setFontStyle(FontStyles.Bold);
tocInfo.getFormatArray()[3].setLineDash(TabLeaderType.Solid);
tocInfo.getFormatArray()[3].getMargin().setLeft(30);
tocInfo.getFormatArray()[3].getMargin().setRight(30);
tocInfo.getFormatArray()[3].getTextState().setFontStyle(FontStyles.Bold);
try (Page page = document.getPages().add()) {
for (int level = 1; level < 5; level++) {
Heading heading = new Heading(level);
heading.setAutoSequence(true);
heading.setTocPage(tocPage);
heading.getTextState().setFont(FontRepository.findFont("Arial"));
heading.getSegments().add(new TextSegment("Sample Heading" + level));
heading.setInList(true);
page.getParagraphs().add(heading);
}
}
document.save(outputFile.toString());
}
}
Masquer les numéros de page dans la table des matières
Utilisez cet exemple lorsque la table des matières doit afficher les titres des entrées sans numéros de page.
- Ouvrez le PDF source Document.
- Ajoutez une page de table des matières Page et désactivez les numéros de page dans TocInfo.
- Créez l’entrée Heading requise et ajoutez-la à la page de contenu.
- Enregistrez le document mis à jour.
public static void hidePageNumbersInToc(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
Page page;
Heading heading;
try (Page tocPage = document.getPages().add()) {
TocInfo tocInfo = new TocInfo();
TextFragment title = new TextFragment("Table Of Contents");
title.getTextState().setFontSize(20);
title.getTextState().setFontStyle(FontStyles.Bold);
tocInfo.setTitle(title);
tocInfo.setShowPageNumbers(false);
tocPage.setTocInfo(tocInfo);
tocInfo.setFormatArrayLength(4);
tocInfo.getFormatArray()[0].getMargin().setRight(0);
tocInfo.getFormatArray()[0].getTextState().setFontStyle(FontStyles.Bold | FontStyles.Italic);
tocInfo.getFormatArray()[1].getMargin().setLeft(30);
tocInfo.getFormatArray()[1].getTextState().setUnderline(true);
tocInfo.getFormatArray()[1].getTextState().setFontSize(10);
tocInfo.getFormatArray()[2].getTextState().setFontStyle(FontStyles.Bold);
tocInfo.getFormatArray()[3].getTextState().setFontStyle(FontStyles.Bold);
page = document.getPages().add();
heading = new Heading(1);
heading.setTocPage(tocPage);
}
heading.setAutoSequence(true);
heading.setInList(true);
heading.getSegments().add(new TextSegment("this is heading of level 1"));
page.getParagraphs().add(heading);
document.save(outputFile.toString());
}
}
Personnaliser les préfixes des numéros de page de la table des matières
Cet exemple ajoute un préfixe personnalisé aux numéros de page affichés dans la table des matières générée.
- Ouvrez le PDF source Document.
- Insérez une page de table des matières Page et définissez le préfixe du numéro de page souhaité dans TocInfo.
- Créez des entrées Heading qui pointent vers chaque page.
- Enregistrez le document mis à jour.
public static void customizePageNumbersInToc(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
Page tocPage = document.getPages().insert(1);
TocInfo tocInfo = new TocInfo();
TextFragment title = new TextFragment("Table Of Contents");
title.getTextState().setFontSize(20);
title.getTextState().setFontStyle(FontStyles.Bold);
tocInfo.setTitle(title);
tocInfo.setPageNumbersPrefix("P");
tocPage.setTocInfo(tocInfo);
for (int index = 1; index <= document.getPages().size(); index++) {
Page page = document.getPages().get_Item(index);
Heading heading = new Heading(1);
heading.setTocPage(tocPage);
heading.setDestinationPage(page);
heading.setTop(page.getRect().getHeight());
heading.getSegments().add(new TextSegment("Page " + index));
tocPage.getParagraphs().add(heading);
}
document.save(outputFile.toString());
}
}
Ajouter un script d’expiration PDF
Utilisez cette approche lorsque le document doit exécuter JavaScript à l’ouverture et afficher un avertissement d’expiration après une date spécifique.
- Ouvrez le PDF source Document et ajoutez tout contenu requis.
- Créez une JavascriptAction avec la logique d’expiration.
- Attribuez le script comme action d’ouverture de document et enregistrez le fichier de sortie.
public static void setPdfExpiryDate(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
try (Page page = document.getPages().add()) {
page.getParagraphs().add(new TextFragment("Hello World..."));
}
JavascriptAction script = new JavascriptAction(
"var year=2017;"
+ "var month=5;"
+ "today = new Date(); today = new Date(today.getFullYear(), today.getMonth());"
+ "expiry = new Date(year, month);"
+ "if (today.getTime() > expiry.getTime())"
+ "app.alert('The file is expired. You need a new one.');");
document.setOpenAction(script);
document.save(outputFile.toString());
}
}
Aplatir un formulaire PDF à remplir
Cet exemple convertit les champs de formulaire interactifs en contenu de page statique afin que le document résultant ne soit plus modifiable en tant que formulaire.
- Ouvrez le PDF source Document.
- Vérifiez si le document contient des widgets de formulaire.
- Aplatissez chaque Field représenté par une WidgetAnnotation.
- Enregistrez le document aplati.
public static void flattenFillablePdf(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
if (document.getForm() != null && document.getForm().size() > 0) {
for (WidgetAnnotation annotation : document.getForm()) {
if (annotation instanceof Field field) {
field.flatten();
}
}
}
document.save(outputFile.toString());
}
}