2017-01-20 7 views
0

itext7を使用してテーブルを作成しています。テーブルの境界線を削除headerCell itext7 pdf

通常のセルの色を変更できます。境界線をヘッダーセルのNullに変更するにはどうすればよいですか?

"false"のheaderCellを作成するためのチェックを追加できません。テーブルが複数の列になる可能性があるので、セルが各列の先頭になるようにします。

この偽のheaderCellを持つことは、生成された最初のセル上にあるだけです。

私が試した:

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

最小を:(ちょうどあなたの場所を設定) パッケージアプリケーション。

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

    } 

} 

答えて

2

あなたのコードはほぼ正しいです。問題は非常に簡単で、次の行で見つけることができます。表#addHeaderCell方法はオブジェクトをセルではない表を返し

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

注意してください。それであなたはBorder.NO_BORDERを表に適用します。

解決策は以下のとおりです。

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

また、あなたは、ヘッダー/フッター(表の枠線のアナログ)に特定の境界線を設定したい場合は、summat table.getHeader().setBorder(your border)を書きます。また、itextはヘッダー/フッターでも表枠を適用することに注意してください。

また、7.0.2以降のitextを使用している場合、あなたが行うようにTableコンストラクタを呼び出すことは100%正しいとは言いません。列の幅を2 29 30(またはそれ以外)にする場合は、Table(UnitValue.createPercentArray(new float[]{2, 29, 30)) ;

関連する問題