2017-01-20 5 views
0

Je crée une table en utilisant itext7.Supprimer la bordure d'une table headerCell itext7 pdf

Je peux changer la couleur d'une cellule régulière. Comment puis-je changer la bordure à Null d'une cellule d'en-tête?

Je ne peux pas ajouter une vérification pour créer un "false" headerCell car la table peut être une multi-colonne donc je voudrais que les cellules soient au sommet de chaque colonne.

Avoir cette fausse headerCell serait juste sur la première cellule générée.

J'ai essayé:

  //does not work. 
      table.setBorder(null); 

      //---------------------------does not work. 
      table.addHeaderCell("one: ").setBorder(Border.NO_BORDER); 
      table.addHeaderCell("two: ").setBorder(null).addStyle(normal); 
      table.addHeaderCell("three: ").setBorder(null).addStyle(normal); 

minimale: (juste définir votre emplacement) application package ;

import java.io.IOException; 
import java.util.Comparator; 
import java.util.List; 
import java.util.stream.Collectors; 

import com.itextpdf.io.font.FontConstants; 
import com.itextpdf.kernel.color.Color; 
import com.itextpdf.kernel.font.PdfFont; 
import com.itextpdf.kernel.font.PdfFontFactory; 
import com.itextpdf.kernel.geom.PageSize; 
import com.itextpdf.kernel.geom.Rectangle; 
import com.itextpdf.kernel.pdf.PdfDocument; 
import com.itextpdf.kernel.pdf.PdfDocumentInfo; 
import com.itextpdf.kernel.pdf.PdfString; 
import com.itextpdf.kernel.pdf.PdfViewerPreferences; 
import com.itextpdf.kernel.pdf.PdfWriter; 
import com.itextpdf.layout.ColumnDocumentRenderer; 
import com.itextpdf.layout.Document; 
import com.itextpdf.layout.Style; 
import com.itextpdf.layout.border.Border; 
import com.itextpdf.layout.border.SolidBorder; 
import com.itextpdf.layout.element.Cell; 
import com.itextpdf.layout.element.Paragraph; 
import com.itextpdf.layout.element.Table; 
import com.itextpdf.layout.element.Text; 

import javafx.application.Application; 
import javafx.stage.Stage; 

public class Main extends Application { 


    @Override 
    public void start(Stage primaryStage) throws Exception { 
     exportRes(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 



    public void exportRes() throws IOException{    
     PdfWriter writer = new PdfWriter(--location--); 
     PdfDocument pdf = new PdfDocument(writer); 


     pdf.getCatalog().setLang(new PdfString("en-US")); 
     pdf.getCatalog().setViewerPreferences(new PdfViewerPreferences().setDisplayDocTitle(true)); 

     PdfDocumentInfo info = pdf.getDocumentInfo(); 
     info.setTitle("List"); 

     Document document = new Document(pdf,PageSize.A4); 

     PdfFont font = PdfFontFactory.createFont(FontConstants.HELVETICA); 


     Style normal = new Style(); 
     normal.setFont(font).setFontSize((float) 7.5); 

     Style notesF = new Style(); 
     notesF.setFont(font).setItalic().setFontSize((float) 7.5); 

     Style lastNameF = new Style(); 
     lastNameF.setFont(font).setFontSize((float) 7.5).setBold(); 


     Table table = new Table(new float[]{(float) 2,29,10}); 
     table.setWidthPercent(100); 
     table.setFont(font); 


     //does not work. 
     table.setBorder(null); 

     //---------------------------does not work. 
     table.addHeaderCell("one: ").setBorder(Border.NO_BORDER); 
     table.addHeaderCell("two: ").setBorder(null).addStyle(normal); 
     table.addHeaderCell("three: ").setBorder(null).addStyle(normal); 


     Cell check = new Cell().add(new Paragraph(" ").addStyle(normal).setFixedLeading(0)).setBorder(new SolidBorder(Color.LIGHT_GRAY, (float) 0.5)); 
     table.addCell(check); 

     Text lastName = new Text("Name ").setBold().addStyle(lastNameF); 

     Text address = new Text("address").addStyle(normal); 

     Cell name = new Cell().add(new Paragraph().add(lastName).add(address)).setBorder(new SolidBorder(Color.LIGHT_GRAY, (float) 0.5)); 
     table.addCell(name); 


     Cell notes = new Cell().add("notes").addStyle(notesF).setBorder(new SolidBorder(Color.LIGHT_GRAY, (float) 0.5)); 
     table.addCell(notes); 


     document.add(table); 
     document.close(); 

    } 

} 

Répondre

2

Votre code est presque correct. Le problème est très simple et se trouve dans la ligne suivante:

table.addHeaderCell("one: ").setBorder(Border.NO_BORDER); 

Notez que la méthode Tableau # addHeaderCell retourne Tableau pas Cellule objet. Alors vous appliquez Border.NO_BORDER sur la table.

La solution est:

table.addHeaderCell(new Cell().add("one: ").setBorder(Border.NO_BORDER)); 

Aussi, si vous souhaitez définir la frontière spécifique sur en-tête/pied de page (l'analogue du tableau frontière), écrivez summat table.getHeader().setBorder(your border). Notez également que itext applique également la bordure de la table sur l'en-tête/pied de page.

Je voudrais également mentionner que l'appel du constructeur Table comme vous le faites n'est pas 100% correct si vous utilisez itext 7.0.2+. Si vous souhaitez que les largeurs de colonnes soient dans un rapport 2 29 30 (ou autre), appelez Table(UnitValue.createPercentArray(new float[]{2, 29, 30)) ;