2017-01-02 9 views
0

필자는 iText를 처음 접했고 iText 7로 곧바로 뛰어 올랐지 만 테이블의 열 너비를 설정하면 엄청나게 도전적이었습니다. 분명히 내가 얻지 못하는 기본적인 것이있다.iText 7 열 너비가 맞지 않는 이유는 무엇입니까?

웹에서 답변을 빗겨봤을 때, itext 7 (고정 폭을 하드 코딩)과 관련이없는 것으로 보이는 일부 itext 5 기반 응답을 발견했습니다. iText 7은 지식이 없다고 생각하는 것 같습니다! "상대 열 너비"- 그게 무슨 뜻입니까? 숫자가 100을 더해야합니까? 2 열 또는 4 열의 간단한 예제가 의미가 있지만 7 열 테이블로 변환하는 데 어려움이 있습니다.

나는 7 개의 열이있는 테이블을 가지고 있습니다. 첫 번째, 세 번째 및 다섯 번째 열은 상대적으로 좁아야하며 단순한 레이블입니다. 7 번째 열은 사용 가능한 공간을 차지합니다. 예를 들면 다음과 같습니다.

Col1 Col2   Col3 Col4   Col5  Col6  Col7 
CMS#: C34827284 Date: 12/5/16  End Date: 12/6/16  approved 

나는 그것을 가지고 있다고 생각했지만 최근 시도는 "요소가 현재 영역에 맞지 않습니다"라는 오류를 생성합니다. 여기에 정의 된 내용은 다음과 같습니다.

Table htable = new Table(new float[] {3, 8, 5, 10, 5, 10, 30}); 

이 숫자는 최대 71 개까지 추가되는 이유는 무엇입니까? 그들은 정확히 100을 추가해야합니까, 아니면 "100을 더합니다"아이디어로 완전히 잘못된 트랙에 있습니까?

+0

그들은 더할 필요가 없습니다. 예를 들어 [iText 7의 표] 튜토리얼의 두 번째 예를 참조하십시오 (http://developers.itextpdf.com/content/itext-7-building-blocks/chapter-5-adding-abstractelement-objects-part-2).). 나는 당신의 질문을 이해하지 못합니다. 문제를 재현하려고 노력할 것이지만 많은 소스 코드를 제공하지는 않습니다. –

답변

1

테이블의 너비를 전체적으로 정의 했습니까?

public void createPdf(String dest) throws IOException { 
    //Initialize PDF writer 
    PdfWriter writer = new PdfWriter(dest); 

    //Initialize PDF document 
    PdfDocument pdf = new PdfDocument(writer); 

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

    // Create table 
    Table htable = new Table(new float[] {3, 8, 5, 10, 5, 10, 30}); 
    htable.setFontSize(8); 
    htable.setWidthPercent(100); 
    htable.addHeaderCell(new Cell().add("Col1")); 
    htable.addHeaderCell(new Cell().add("Col2")); 
    htable.addHeaderCell(new Cell().add("Col3")); 
    htable.addHeaderCell(new Cell().add("Col4")); 
    htable.addHeaderCell(new Cell().add("Col5")); 
    htable.addHeaderCell(new Cell().add("Col6")); 
    htable.addHeaderCell(new Cell().add("Col7")); 
    htable.addCell(new Cell().add("CMS#")); 
    htable.addCell(new Cell().add("C34827284")); 
    htable.addCell(new Cell().add("Date:")); 
    htable.addCell(new Cell().add("12/5/16")); 
    htable.addCell(new Cell().add("EndDate:")); 
    htable.addCell(new Cell().add("12/6/16")); 
    htable.addCell(new Cell().add("Approved")); 
    // Add the table 
    document.add(htable); 
    // Close the document 
    document.close(); 
} 

결과는 여기에 표시됩니다 : 내가 글꼴 크기를 감소

enter image description here

참고 더 많은 텍스트가 CMS# 인 방법으로 분할되는 것을 방지하기 위해

내가 뭘하려 스플릿.

코드에 htable.setWidthPercent(100);을 추가하지 않았다면 추가하십시오. 문제는 사라져야합니다.

+0

응답 해 주셔서 감사합니다. 이전에 htable.setWidthPercent (100)를 사용했지만 코딩 반복 중 하나에서 삭제되었습니다. 그것은 왜 이전에 작동했는지 그리고 왜 고장 났는지를 설명합니다. 나는 정말로 그것을 즐기고있다. 나는 지난 금요일 이전에 PDF를 구성하는 것에 대해 아무것도 몰랐다. 새해 복 많이 받으세요! – april26

+0

한 번 더 질문 - itext 5 예제 중 하나에서 단위에 너비를 하드 코딩하는 옵션이 있다는 것을 알았습니다. 그것은 더 이상 7에 존재하지 않습니까? 아니면 다르게 구현 되는가? 나는 개념을 더 잘 이해할 수있어서 기뻤지만 일반적으로 사용했을 것이다. – april26

+0

별도의 열 너비를 더 이상 절대 값으로 설정하지 않지만 'Table' 클래스에는 [setWidth()] (http://itextsupport.com/apidocs/itext7/SNAPSHOT/com/itextpdf/layout/element)가 있습니다. /Table.html#setWidth-com.itextpdf.layout.property.UnitValue-) 메소드를 사용하여 전체 표의 너비를 설정합니다. UnitValue는 백분율 (상대) 또는 점 (절대)으로 표현할 수 있습니다. –