2009-06-12 12 views
25

Sto scrivendo un programma che genera un file pdf o rtf con una tabella al suo interno, utilizzando iText. Ho usato la tabella e la cella della classe iText, piuttosto che la specifica RtfTable o pdfTable in modo che alla fine sia possibile generare un file. Avevo bisogno di impostare il riempimento della cella su un valore di -1, oppure c'era troppo spazio tra ogni riga di dati sul foglio stampato. Tuttavia, sto cercando di aggiungere bordi (in particolare al file pdf) e le celle non si allineano al testo. Il bordo inferiore di ogni cella taglia direttamente il testo. In realtà circonda il testo solo quando il riempimento della cella è impostato su 2 o superiore. Di seguito è riportato un esempio di quello che sto facendo:Confini cella iText che tagliano il testo

Document document = new Document(); 
    Paragraph paragraph = new Paragraph(); 
    Font iTextFont = new Font(Font.TIMES_ROMAN, 9, Font.NORMAL); 
    try{ 
    PdfWriter.getInstance(document, new FileOutputStream("C:/datafiles/TestiText.pdf")); 
    document.open(); 

    Table table = new Table(3); 
    table.setPadding(-1); 
    table.setWidth(90); 
    Cell cell1 = new Cell(); 
    cell1.setBorder(Rectangle.BOX); 
    cell1.setVerticalAlignment(ElementTags.ALIGN_TOP); 
    table.setDefaultCell(cell1); 
    paragraph = new Paragraph("header", iTextFont); 
    Cell cell = new Cell(paragraph); 
    cell.setHeader(true); 
    cell.setColspan(3); 
    table.addCell(cell); 
    paragraph = new Paragraph("example cell", iTextFont); 
    table.addCell(paragraph); 
    paragraph = new Paragraph("one", iTextFont); 
      table.addCell(cell); 
    paragraph = new Paragraph("two", iTextFont); 
    cell = new Cell(paragraph); 
    table.addCell(paragraph); 
    paragraph = new Paragraph("Does this start a new row?", iTextFont); 
    table.addCell(paragraph); 
    paragraph = new Paragraph("Four", iTextFont); 
    table.addCell(paragraph); 
    paragraph = new Paragraph("Five", iTextFont); 
    table.addCell(paragraph); 
    document.add(table); 
    } catch (Exception e) { 
    //handle exception 
    } 
    document.close(); 

    } 

C'è un modo per risolvere questo problema sia spostando l'intero confine giù una goccia (senza influenzare il posizionamento del testo), o per eliminare gli spazi tra le ogni riga (la spaziatura sembra essere solo un problema sopra il testo, non al di sotto) senza impostare il riempimento della cella su -1?

+0

Hai trovato una soluzione a questo? Sto avendo gli stessi problemi. Voglio che le mie celle siano meno alte, il che sembra essere causato dal padding, ma quando diminuisco il padding il testo taglia attraverso il bordo inferiore. –

+2

Non importa, sono passato a PdfPTable e va bene ora. Poiché generi solo PDF, questa soluzione è sufficiente per me. –

+0

per favore aggiungi le librerie importate in te java ho cercato di implementare il tuo esempio "fornire una classe completa" – shareef

risposta

0

si dovrebbe usare PdfPTable ha molti metodo che è utile e ben avvolto componente ho postato questa risposta così uno si trova di fronte lo stesso problema sai da dove cominciare potrebbe non essere la risposta tipica alla domanda, ma qui si tratta ...

Organizing content in tables
The PDF output

import java.io.FileOutputStream; 
import java.io.IOException; 

import com.itextpdf.text.Document; 
import com.itextpdf.text.DocumentException; 
import com.itextpdf.text.Phrase; 
import com.itextpdf.text.pdf.PdfPCell; 
import com.itextpdf.text.pdf.PdfPTable; 
import com.itextpdf.text.pdf.PdfWriter; 

public class Spacing { 

    /** The resulting PDF file. */ 
    public static final String RESULT = "results/part1/chapter04/spacing.pdf"; 

    /** 
    * Main method. 
    * @param args no arguments needed 
    * @throws DocumentException 
    * @throws IOException 
    */ 
    public static void main(String[] args) 
     throws DocumentException, IOException { 
     // step 1 
     Document document = new Document(); 
     // step 2 
     PdfWriter.getInstance(document, new FileOutputStream(RESULT)); 
     // step 3 
     document.open(); 
     // step 4 
     PdfPTable table = new PdfPTable(2); 
     table.setWidthPercentage(100); 
     Phrase p = new Phrase(
      "Dr. iText or: How I Learned to Stop Worrying " + 
      "and Love the Portable Document Format."); 
     PdfPCell cell = new PdfPCell(p); 
     table.addCell("default leading/spacing"); 
     table.addCell(cell); 
     table.addCell("absolute leading: 20"); 
     cell.setLeading(20f, 0f); 
     table.addCell(cell); 
     table.addCell("absolute leading: 3; relative leading: 1.2"); 
     cell.setLeading(3f, 1.2f); 
     table.addCell(cell); 
     table.addCell("absolute leading: 0; relative leading: 1.2"); 
     cell.setLeading(0f, 1.2f); 
     table.addCell(cell); 
     table.addCell("no leading at all"); 
     cell.setLeading(0f, 0f); 
     table.addCell(cell); 
     cell = new PdfPCell(new Phrase(
      "Dr. iText or: How I Learned to Stop Worrying and Love PDF")); 
     table.addCell("padding 10"); 
     cell.setPadding(10); 
     table.addCell(cell); 
     table.addCell("padding 0"); 
     cell.setPadding(0); 
     table.addCell(cell); 
     table.addCell("different padding for left, right, top and bottom"); 
     cell.setPaddingLeft(20); 
     cell.setPaddingRight(50); 
     cell.setPaddingTop(0); 
     cell.setPaddingBottom(5); 
     table.addCell(cell); 
     p = new Phrase("iText in Action Second Edition"); 
     table.getDefaultCell().setPadding(2); 
     table.getDefaultCell().setUseAscender(false); 
     table.getDefaultCell().setUseDescender(false); 
     table.addCell("padding 2; no ascender, no descender"); 
     table.addCell(p); 
     table.getDefaultCell().setUseAscender(true); 
     table.getDefaultCell().setUseDescender(false); 
     table.addCell("padding 2; ascender, no descender"); 
     table.addCell(p); 
     table.getDefaultCell().setUseAscender(false); 
     table.getDefaultCell().setUseDescender(true); 
     table.addCell("padding 2; descender, no ascender"); 
     table.addCell(p); 
     table.getDefaultCell().setUseAscender(true); 
     table.getDefaultCell().setUseDescender(true); 
     table.addCell("padding 2; ascender and descender"); 
     cell.setPadding(2); 
     cell.setUseAscender(true); 
     cell.setUseDescender(true); 
     table.addCell(p); 
     document.add(table); 
     // step 5 
     document.close(); 
    } 
} 
1

Scrivi una classe o metodi comuni per costruire il vostro tavolo - se si sta utilizzando tabella o P dfPTable.

Questi metodi gestiranno l'allineamento standard, la misurazione basata su ascendenti/discensori, ecc. Forniscono anche un luogo comune per aggiungere un "paragrafo vuoto 3pt" o qualsiasi altra formattazione standard, potrebbe essere necessario.

Il software OO non è concepito per il clanking di sezioni di codice ripetitive e potenzialmente incoerenti.

Spero che questo aiuti.