Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [Java] Itext multicolonna con posizionamento immagine

    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();
    			}

  2. #2
    azzardo.
    non potresti creare all'interno della cella una PDFTable così per ogni elemento crei una cella dentro un'altra cella, un pò quello che si faceva con l'HTML...
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  3. #3
    il problema è questo....potrei avere delle immagini accanto a del testo specifico o potrei avere delle immagini posizionate in modo assoluto nel documento, però senza che il testo si posizioni sopra l'immagine...
    Se specifino le posizioni del rettangolo della colonna con setColumns posso risolvere il problema del posizionarfe le immagini in assoluto,ma ho il problema che le immagini accanto al testo come le posiziono? quelle nn posso calcolarle ogni volta...
    poi se inserisco con addText il testo, il .go va a buon fine,se inserisco anche le immagini insieme al testo va in errore...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.