는 자신의 위치/크기에 대한 요소 및 정보는 당신이 PdfPTable
요소에 calculateWidths
를 호출 할 수있는, 약간 혼합했다.
iText7에서이 기능은 분리되어있어 렌더링/레이아웃 요소에 다양한 종류의 유연성을 부여합니다.
따라서 모델 요소는 Table
인스턴스의 예이며, 위치 나 크기에 대해서는 알지 못합니다. 그리고 table.getHeight
을 호출하면 에 이전에 HEIGHT
속성이 설정되어 있지 않으므로 null
이됩니다.
테이블 높이를 계산하려면 렌더링 기능을 사용해야합니다.
모델 요소의 경우이 모델 요소와 모든 자식을 나타내는 렌더러의 하위 트리를 가져올 수 있으며 주어진 영역에 layout
을 가져올 수 있습니다. 테이블의 높이를 실제로 알기 위해서는 엘리먼트의 전체 내용을 배치하기에 충분할만큼 의도적으로 충분한 영역을 생성하기를 원할 것입니다. 내게 인쇄 22.982422O
상기
는
PdfDocument pdfDoc = ...
Document doc = ...
Table table = new Table(2)
.addCell(new Cell().add(new Paragraph("cell 1, 1")))
.addCell(new Cell().add(new Paragraph("cell 1, 2")));
LayoutResult result = table.createRendererSubTree().setParent(doc.getRenderer()).layout(
new LayoutContext(new LayoutArea(1, new Rectangle(0, 0, 400, 1e4f))));
System.out.println(result.getOccupiedArea().getBBox().getHeight());
코드 있지만 결과 및 구성 요소의 특성에 따라 달라질 수있다.
내가 코드의 두 가지 중요한 부분을 지적하고 싶으면는 :
우리는이 전체 테이블을 배치하기에 충분 것을 고려하여 LayoutArea
의 높이로 1e4f
를 전달합니다. 테이블을 그 높이에 놓을 수 없다면, 결과는이 주어진 높이를 초과 할 수 없으므로, 당신의 유스 케이스 (테이블의 전체 높이를 아십시오)에 맞지 않을 것입니다. 따라서 전체 테이블을 배치하기에 충분한 높이를 전달하십시오.
.setParent(doc.getRenderer())
부분은 여기에서 중요하며 상속 속성을 검색하는 데 사용됩니다. table
요소, 심지어 글꼴로 많은 속성을 설정하지 않았지만이 정보는이 요소가 차지할 영역을 아는 데 필수적입니다. 따라서이 정보는 layout
동안 상위 체인에서 상속됩니다. document.setFont(newFont);
, 또는 글꼴 크기 : 문서의 글꼴을 변경하여 테스트 할 수 있습니다 결과 높이 변화
당신은 높이가 너비를 알 수없는 경우 계산 될 수 없다는 인식을
document.setFontSize(24);
를 시청, 당신은? 폭이 좁은 테이블은 넓은 테이블보다 더 높은 높이가 필요합니다. 폭을 설정했다는 것을 증명하는 코드를 보여줄 수 있습니까? –안녕하세요, Brian, 답장을 보내 주시면 대단히 기쁩니다. – Schoner
나는 당신의 의미를 안다. 그러나 iText5에서 우리는 이것에 대해 걱정할 필요가 없다. 그냥 메서드를 호출하면된다. 다음은 간단한 예제입니다. alused는 테이블의 너비를 설정하고 하나의 문자열 만 추가하지만 여전히 높이 값을 가져올 수 없습니다. 테이블 테이블 = 새 테이블 (1); table.setWidth (300); table.addCell ("1"); // 결과 : 높이 = null System.out.println ("height ="+ table.getHeight()); – Schoner