J'ai une classe abstraite avec une méthode abstraite draw (Graphics2D g2), et les méthodes print(), showPreview(), printPDF(). Pour chaque document de mon programme Java, j'applique draw() pour imprimer, afficher un aperçu et créer un fichier PDF pour chaque document. Mon problème est de savoir comment créer un PDF avec plusieurs pages à partir de cet objet Graphics. Je l'ai résolu en créant un fichier PDF pour chaque page, puis fusionner les fichiers dans un nouveau fichier. Mais il doit y avoir un meilleur moyen. je code suivant pour créer des PDF avec une page:Comment créer un PDF avec plusieurs pages à partir d'un objet Graphics avec Java et itext
public void printPDF1(){
JFileChooser dialog = new JFileChooser();
String filePath = "";
int dialogResult = dialog.showSaveDialog(null);
if (dialogResult==JFileChooser.APPROVE_OPTION){
filePath = dialog.getSelectedFile().getPath();
}
else return;
try {
Document document = new Document(new Rectangle(_pageWidth, _pageHeight));
PdfWriter writer = PdfWriter.getInstance(document,
new FileOutputStream(filePath));
document.open();
PdfContentByte cb = writer.getDirectContent();
g2 = cb.createGraphics(_pageWidth, _height);
g2.translate(0, (_numberOfPages - _pageNumber) * _pageHeight);
draw(g2);
g2.dispose();
document.close();
}
catch (Exception e2) {
System.out.println(e2.getMessage());
}
}
Merci beaucoup, cela fonctionne avec les changements suivants. – Jan
Quels changements? PS: c'est la partie où vous cliquez sur cette coche à côté de la bonne réponse, laissant les autres savoir qui avait raison (et donner à cette personne une certaine réputation). "Moi" dans ce cas. En outre, si vous posez plusieurs questions et ne les marquez jamais, les autres verront votre pourcentage de réponses médiocres et seront moins enclins à s'inquiéter car ils savent que vous ne leur donnerez pas de représentant même quand ils ont raison. –
Désolé Mark, j'essaie de comprendre comment ce site fonctionne. Je ne savais pas que PdfContentByte pouvait être réutilisé pour chaque page. J'ai fait ces changements: PdfTemplate template = cb.createTemplate (_pageWidth, wholeHeight); g2 = template.createGraphics (_pageWidth, wholeHeight); ..... pour (int curPg = 1; curPg <= _numberOfPages; ++ curPg) { cb.addTemplate (hugeTempl, 0, -_pageHeight * (_numberOfPages - curPg)); document.newPage(); } – Jan