J'essaie d'ajouter du contenu à un fichier PDF existant en utilisant iText7. J'ai pu créer de nouveaux fichiers PDF et leur ajouter du contenu en utilisant des paragraphes et des tableaux. Cependant, une fois que je vais rouvrir un fichier PDF que j'ai créé et que j'essaie d'y écrire davantage de contenu, le nouveau contenu remplace l'ancien contenu. Je souhaite que le nouveau contenu soit ajouté au document après l'ancien contenu. Comment puis-je atteindre cet objectif?Génération de PDF en utilisant iText7 avec Java
Modifier
Ceci est la classe qui met en place des méthodes communes qui seront exécutées à chaque changement effectué à un document PDF.
public class PDFParent {
private static Document document;
private static PdfWriter writer;
private static PdfReader reader;
private static PageSize ps;
private static PdfDocument pdfDoc;
public static Document getDocument() {
return document;
}
public static void setDocument(Document document) {
PDFParent.document = document;
}
public static void setupPdf(byte[] inParamInPDFBinary){
writer = new PdfWriter(new ByteArrayOutputStream());
try {
reader = new PdfReader(new ByteArrayInputStream(inParamInPDFBinary));
} catch (IOException e) {
e.printStackTrace();
}
pdfDoc = new PdfDocument(reader, writer);
ps = PageSize.A4;
document = new Document(pdfDoc, ps);
}
public static byte[] writePdf(){
ByteArrayOutputStream stream = (ByteArrayOutputStream) writer.getOutputStream();
return stream.toByteArray();
}
public static void closePdf(){
pdfDoc.close();
}
Et voilà comment je suis d'ajouter le contenu au format pdf
public class ActAddParagraphToPDF extends PDFParent{
// output parameters
public static byte[] outParamOutPDFBinary;
public static ActAddParagraphToPDF mosAddParagraphToPDF(byte[] inParamInPDFBinary, String inParamParagraph) throws IOException {
ActAddParagraphToPDF result = new ActAddParagraphToPDF();
setupPdf(inParamInPDFBinary);
//---------------------begin content-------------------//
getDocument().add((Paragraph) new Paragraph(inParamParagraph));
//---------------------end content-------------------//
closePdf();
outParamOutPDFBinary = writePdf();
return result;
}
Quand je vais exécuter cette seconde classe, il semble traiter le document original comme si elle est vide. Puis écrit le nouveau paragraphe sur le contenu original. Je sais qu'il me manque quelque chose, mais je ne sais pas ce que c'est.
Qu'avez-vous essayé (montrez le code pivot), comment cela a-t-il échoué (a-t-il écrasé le contenu sur la première page existante ou la dernière)? – mkl
@mkl J'ai édité ma question avec vos suggestions – hubertw