2009-06-12 26 views
25

iText kullanarak bir masaya sahip bir pdf veya rtf dosyası oluşturan bir program yazıyorum. Daha spesifik RtfTable veya pdfTable yerine iText sınıf tablosunu ve hücresini kullandım, böylece her iki dosya da sonunda oluşturulabilir. Hücre dolgulamayı -1 değerine ayarladım ya da yazdırılan sayfadaki her veri satırı arasında çok fazla boşluk vardı. Bununla birlikte, artık sınırları (özellikle pdf dosyasına) eklemeye çalışıyorum ve hücreler metinle sıraya girmiyor. Her hücrenin alt sınırı doğrudan metin boyunca kesilir. Sadece hücre dolgusu 2 veya daha yüksek olarak ayarlandığında metni çevreler.Metin ile kesilen iText hücre sınırları

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

    } 

ya (metin yerleşimini etkilemeden) bir damla bütün sınır aşağı hareket ettirerek bu sorunu gidermek için, ya da bunların arasında boşluk kurtulmak için bir yol var mı: Aşağıda ne yaptığımı bir örnektir Her bir satır (boşluk sadece 1'in altında değil, hücre dolgusu ayarlanmadan metnin üzerinde bir sorun gibi görünüyor)?

+0

Bunun için bir çözüm buldunuz mu? Aynı problemleri yaşıyorum. Hücrelerimin daha az yüksek olmasını istiyorum, bu da dolgudan kaynaklanıyor gibi görünüyor, ancak dolguyu azalttığımda, metin kesimleri alt sınırı zorluyor. –

+2

Nevermind, PdfPTable'a geçtim ve şimdi iyi. Sadece PDF üretirken, bu çözüm benim için yeterli. –

+0

Lütfen java'da içe aktarılmış kütüphaneleri ekleyiniz. – shareef

cevap

0

sen işte geliyor herhangi biri aynı sorunla karşı karşıya böylece başlatmak için nereye sorusuna tipik cevabı olmayabilir o ben bu cevabı yayınlanmıştır bileşen kullanışlı ve iyi sarılı olan birçok yöntem vardır PdfPTable biliyorum kullanmak ancak gerektiği ...

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

tablonuzu oluşturmak için bir sınıf veya ortak yöntemler yazın - Eğer tablo veya P kullanarak ister dfPTable.

Bu yöntemler, standart hizalamayı, sizin için yükselenlere/inişlere dayalı ölçümleri, vb. Ele alacaktır. Ayrıca, "3pt boş paragraf" eklemek için ortak bir yer veya ihtiyacınız olan başka herhangi bir standart biçimlendirme sağlar. OO yazılımının, tekrar eden ve potansiyel olarak tutarsız kod bölümlerini kuşatma ile ilgili olmadığı kastedilmemiştir.

Bu yardımcı olur umarım.