다음 코드와 같이 테이블의 내용을 변경하는 경우를 제외하고 문서를 생성 중입니다. 내가해야할 일은이 테이블이 셀의 내용량에 관계없이 절대 크기가 한 페이지를 초과하지 않도록하는 것입니다. 그것을 할 수있는 방법이 있습니까? 페이지에 맞게 PdfPTable의 크기를 조정하는 방법은 무엇입니까?
import com.itextpdf.text.Phrase; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.PageSize; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import java.awt.Desktop; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException;public void createTemplate() throws DocumentException, FileNotFoundException, IOException{ String TARGET = System.getProperty("user.home")+"\temp.pdf";
Document document = new Document(PageSize.A4); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(TARGET)); document.open();PdfPTable table = new PdfPTable(7); for (int i = 0; i < 105; i++) { Phrase p = new Phrase("some text"); PdfPCell cell = new PdfPCell(); cell.addElement(p); table.addCell(cell); } table.setTotalWidth(PageSize.A4.getWidth()-10); table.setLockedWidth(true); PdfContentByte canvas = writer.getDirectContent(); PdfTemplate template = canvas.createTemplate(table.getTotalWidth(),table.getTotalHeight()); table.writeSelectedRows(0, -1, 0, PageSize.A4.getHeight(), template); Image img = Image.getInstance(template); img.scaleToFit(PageSize.A4.getWidth(), PageSize.A4.getHeight()); img.setAbsolutePosition(0, PageSize.A4.getHeight()); document.add(img); document.close(); Desktop desktop = Desktop.getDesktop(); File file = new File(TARGET); desktop.open(file); }
편집 : @Bruno Lowagie. 이미지에 포장 된 템플릿의 힌트가 내게 들리 네요. 코드를 바꿨지 만 지금은 빈 PDF입니다. 나는 잘못된 것을하고 있습니까? 아니면 이것이 잘못된 접근입니까?
댓글을 달았지만 댓글에 코드를 올바르게 삽입하는 방법을 찾지 못해서 질문을 편집했습니다. –
첫눈에 테이블을 템플릿에 올바르게 추가하지 않습니다. 나는 잘못을 이해하기 위해 당신의 모범을 보일 것입니다. –
위치 오류는 세 곳에서 발생했습니다. 원하는대로 작동하는 방법으로 내 대답을 업데이트했습니다. –