2017-01-20 6 views
0

itext7을 사용하여 테이블을 만듭니다.테이블 헤더의 테두리를 제거하십시오. itext7 pdf

일반 셀의 색상을 변경할 수 있습니다. 테두리를 머리글 셀의 Null로 어떻게 바꿀 수 있습니까?

"false"headerCell을 만들려면 체크를 추가 할 수 없습니다. 테이블이 다중 열일 수 있으므로 셀이 각 열 꼭대기에 있어야합니다.

이 false 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는 header/footer에도 table border를 적용합니다.

또한 7.0.2+ itext를 사용하는 경우 Table 생성자를 호출하는 것이 100 % 올바르지 않다는 것을 언급하고자합니다. 열 너비가 2 29 30 (또는 그 외의 다른 비율)이되도록하려면 Table(UnitValue.createPercentArray(new float[]{2, 29, 30)) ;

으로 전화하십시오.