Tengo una clase abstracta con un método abstracto draw (Graphics2D g2) y los métodos print(), showPreview(), printPDF(). Para cada documento en mi programa Java, implemento draw(), así que puedo imprimir, mostrar vista previa y crear un archivo PDF para cada documento. Mi problema es cómo crear un PDF con múltiples páginas desde ese objeto Graphics. Lo resolví creando un archivo PDF para cada página, y luego fusioné los archivos en un archivo nuevo. Pero debe haber una mejor manera. He siguiente código para crear PDF con una página:Cómo crear un PDF con varias páginas desde un objeto Graphics con Java e 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());
}
}
Muchas gracias, funciona con los siguientes cambios. – Jan
¿Qué cambios? PD: esta es la parte donde haces clic en esa marca hueca junto a la respuesta correcta, para que otras personas sepan quién tenía la razón (y darle cierta reputación a esa persona). "Yo" en este caso. Además, si hace varias preguntas y nunca las marca, otras personas verán su porcentaje de respuestas pobres y será menos probable que se molesten, ya que saben que no les darán rep a pesar de que tengan razón. –
Lo siento Mark, trato de entender cómo funciona este sitio web. No me di cuenta de que el PdfContentByte se puede reutilizar para cada página. Hice los cambios: PdfTemplate template = cb.createTemplate (_pageWidth, entireHeight); g2 = template.createGraphics (_pageWidth, entireHeight); ..... for (int curPg = 1; curPg <= _numberOfPages; ++ curPg) { cb.addTemplate (hugeTempl, 0, -_pageHeight * (_numberOfPages - curPg)); document.newPage(); } – Jan