Salve ragazzi,
vorrei un consiglio da voi. Devo creare dei pdf in automatico, questo pdf dovrà avere due colonne e del testo. Le immagini devo però posizionarlo o in posizioni fisse o accando a dei punti del testo.
Ho provato ad usare il multicolumntext ma se inserisco tutto il testo il getCurrentColumn non si incrementa e quindi al momento dell'inserimento del testo nn so se mi trovo nella prima o seconda colonna. Ho provato ad usare il ColumnText, posso inserire le immagini subito dopo un testo,ma se posiziono le immagini fisse, il testo viene inserito sopra l'immagine. Come potrei risolvere? posto un pò di codice delle mie prove:
Questo esempio mi permette di inserire le immagini assieme al testo,però se inserisco anche delle immagini con seAbsolutePosition (che purtroppo potrei avere) il testo continua anche sopra l'immagine.
codice:
ct = new ColumnText(writer.getDirectContent());
for (int i = 1 ;i<=50;i++){
switch(i){
case 10:
table = new PdfPTable(2);
cell= new PdfPCell(new Paragraph("(" + i + ") prova testo"));
cell.setBorder(0);
table.addCell(cell);
image = Image.getInstance(path);
image.scalePercent(80);
cell= new PdfPCell(image);
cell.setBorder(0);
table.addCell(cell);
ct.addElement(table);
ct.addElement(Chunk.NEWLINE);
break;
case 19:
table = new PdfPTable(1);
cell= new PdfPCell(new Paragraph("(" + i + ") prova testo"));
cell.setBorder(0);
table.addCell(cell);
ct.addElement(table);
image = Image.getInstance(path);
image.scalePercent(80);
ct.addElement(image);
ct.addElement(Chunk.NEWLINE);
break;
case 30:
table = new PdfPTable(2);
cell= new PdfPCell(new Paragraph("(" + i + ") prova testo"));
cell.setBorder(0);
table.addCell(cell);
image = Image.getInstance(path);
image.scalePercent(80);
cell= new PdfPCell(image);
cell.setBorder(0);
table.addCell(cell);
ct.addElement(table);
ct.addElement(Chunk.NEWLINE);
break;
default:
table = new PdfPTable(1);
cell= new PdfPCell(new Paragraph("(" + i + ") prova testo"));
cell.setBorder(0);
table.addCell(cell);
ct.addElement(table);
ct.addElement(Chunk.NEWLINE);
}
}
ct.setAlignment(Element.ALIGN_JUSTIFIED);
ct.setExtraParagraphSpace(6);
ct.setLeading(0, 1.2f);
ct.setFollowingIndent(27);
int lineWrite = 0;
int nColumn = 0;
status = ColumnText.START_COLUMN;
float[][] COLUMNS = {
{
document.left(), document.bottom(),
document.left() + 180, document.top()
},
{
document.right() - 180, document.bottom(),
document.right(), document.top()
}
};
while(ColumnText.hasMoreText(status)){
ct.setSimpleColumn(COLUMNS[nColumn][0], COLUMNS[nColumn][1], COLUMNS[nColumn][2], COLUMNS[nColumn][3]);
//ct.setYLine(COLUMNS[nColumn][3]);
status = ct.go();
lineWrite += ct.getLinesWritten();
nColumn = Math.abs(nColumn-1);
if (nColumn == 0){
document.newPage();
}
}
Ho provato anche questa soluzione, modificando le dimensioni del rettangolo per ogni colonna, ma se voglio creare degli spazi tra i rettangoli di ogni colonna il testa sballa.Non posso inserire più rettangoli di scrittura per ogni colonna?
codice:
for (int i = 1 ;i<=50;i++){
ct.addText(new Phrase("(" + i + ") prova testo ajh fjlh fjsd fjsd fjsd jf sdfjsdh fjs f fj hfjsd hfjs hfjs fsd hfjshfjs"));
}
float[] left = {
document.left() + 90f , document.top() - 80f,
document.left() + 90f, document.top() - 170f,
document.left(), document.top() - 170f,
document.left() , document.bottom() //+ 150f
};
float[] right = {
document.left() + colwidth, document.top() - 80f,
document.left() + colwidth, document.bottom()
};
float[] left2 = {
document.right() - colwidth, document.top() - 80f,
document.right() - colwidth, document.bottom()
};
float[] right2 = {
document.right(), document.top() - 80f,
document.right(), document.bottom()
};
status = ColumnText.START_COLUMN;
int i = 0;
while (ColumnText.hasMoreText(status)){
if (i == 0){
ct.setColumns(left, right);
i++;
}
else{
ct.setColumns(left2, right2);
}
ct.setYLine( document.top() - 80f);
status = ct.go();
}