eh, su questo non ti saprei aiutare... ho provato ad aggiungere 10 immagini senza scalare ed ottengo un errore:
codice:
com.itextpdf.text.DocumentException: com.itextpdf.text.DocumentException: Infinite table loop; row content is larger than the page (for instance because you didn't scale an image).
at com.itextpdf.text.pdf.PdfDocument.add(PdfDocument.java:727)
at com.itextpdf.text.Document.add(Document.java:282)
at test.tables.ImageCaption.createPdf(ImageCaption.java:103)
at test.tables.ImageCaption.main(ImageCaption.java:109)
Caused by: com.itextpdf.text.DocumentException: Infinite table loop; row content is larger than the page (for instance because you didn't scale an image).
at com.itextpdf.text.pdf.PdfDocument.addPTable(PdfDocument.java:2372)
at com.itextpdf.text.pdf.PdfDocument.add(PdfDocument.java:673)
quindi non so perché ti si allarghi il tutto. Scalando invece al limite si sovrappongono un po' le immagini e le didascalie mi vanno acapo da sole...
Comunque, visto che un po' mi ci sto "appassionando" a sta iText, ho rimesso nuovamente mano al codice di cui sopra. In sostanza, sapendo quante immagini hai, quante immagini per riga vuoi, si determinano sia il numero di righe complete che l'eventuali immagini "spurie". Poi si tratta di fare un paio di cicli annidati per le righe complete ed un ciclo esterno per le immagini spurie. Tutto per ragioni "cosmetiche"
codice:
private PdfPTable tabellaRighe() throws Exception {
// Tabella Principale.
int[] cellWidth = {500, 95};
PdfPTable table = new PdfPTable(2);
table.setWidths(cellWidth);
table.setTotalWidth(PageSize.A4.getWidth() - 45);
table.setLockedWidth(true);
// Tabella secondaria
int quante_immagini = 10;
int quante_per_riga = 4;
int righe_complete = quante_immagini / quante_per_riga;
int spurie = quante_immagini % quante_per_riga;
PdfPTable imageTable = new PdfPTable(quante_per_riga);
PdfPCell cell;
Font font = new Font(FontFamily.HELVETICA, 8, Font.BOLDITALIC, new BaseColor(0, 0, 0));
int didascalia = 0; // indice didascalia
// righe complete
for (int j = 0; j < righe_complete; j++) {
// ciclo for per le immagini
for (int i = 0; i < quante_per_riga; i++) {
//Image image = Image.getInstance(imgNd);
Image img = Image.getInstance(image);
img.scaleToFit(300, 135);
cell = new PdfPCell(img);
cell.disableBorderSide(Rectangle.BOX);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
imageTable.addCell(cell);
}
// ciclo for per didascalia
for (int i = 0; i < quante_per_riga ; i++) {
Phrase p = new Phrase("Didascalia Immagine "+(didascalia+1), font);
cell = new PdfPCell(p);
cell.disableBorderSide(Rectangle.BOX);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
imageTable.addCell(cell);
didascalia++;
}
}
if (spurie != 0) {
// riga incompleta
// ciclo for per le immagini
for (int i = 0; i < quante_per_riga; i++) {
//Image image = Image.getInstance(imgNd);
Image img;
if (i < spurie) {
img = Image.getInstance(image);
img.scaleToFit(300, 135);
}
else {
img = null;
}
cell = new PdfPCell(img);
cell.disableBorderSide(Rectangle.BOX);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
imageTable.addCell(cell);
}
// ciclo for per didascalia
for (int i = 0; i < quante_per_riga ; i++) {
String text;
if (i < spurie) {
text = "Didascalia Immagine "+(didascalia+1);
}
else {
text = "";
}
Phrase p = new Phrase(text, font);
cell = new PdfPCell(p);
cell.disableBorderSide(Rectangle.BOX);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
imageTable.addCell(cell);
didascalia++;
}
}
cell = new PdfPCell(imageTable);
cell.disableBorderSide(Rectangle.BOX);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(cell);
cell = new PdfPCell();
cell.setBorderWidthBottom(1);
cell.setBorderWidthLeft(1);
cell.setBorderWidthRight(1);
cell.setBorderWidthTop(1);
table.addCell(cell);
return table;
}