iText 7.1.2如何正确设置自定义页面尺寸?代码设置不生效
解决iText 7.1.2中自定义页面尺寸不生效的问题
嘿,这个问题我之前也踩过坑!你现在的代码其实只是在默认的A4页面上画了一个大矩形,但根本没修改页面本身的实际尺寸——这就是为什么看起来页面还是A4的原因。
问题根源
在iText 7里,调用pdf.addNewPage()时,默认会创建一个A4尺寸的页面。你后来定义的Rectangle只是用来在画布上绘制图形、限定Canvas的范围,但并没有改变PDF页面的核心尺寸(也就是MediaBox)。
正确的两种做法
1. 添加页面时直接指定自定义尺寸(推荐)
最高效的方式是在创建页面的同时就设置好自定义尺寸,这样不需要后续修改:
PdfDocument pdf = new PdfDocument(new PdfWriter(dest)); // 先定义你的自定义尺寸 Rectangle customPageSize = new Rectangle(0, 0, 2000, 800); // 添加页面时直接传入PageSize对象 PdfPage page = pdf.addNewPage(new PageSize(customPageSize)); PdfCanvas pdfCanvas = new PdfCanvas(page); // 如果你不需要页面边框的话,这里的rectangle和stroke可以去掉 // pdfCanvas.rectangle(customPageSize); // pdfCanvas.stroke(); Canvas canvas = new Canvas(pdfCanvas, pdf, customPageSize); PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN); PdfFont bold = PdfFontFactory.createFont(FontConstants.TIMES_BOLD); Text title = new Text("The Strange Case of Dr. Jekyll and Mr. Hyde").setFont(bold); Text author = new Text("Robert Louis Stevenson").setFont(font); Paragraph p = new Paragraph().add(title).add(" by ").add(author); canvas.add(p); canvas.close(); pdf.close();
2. 给已添加的页面修改尺寸
如果已经创建了页面,也可以通过setPageSize()方法修改,但要确保在绘制任何内容之前执行:
PdfDocument pdf = new PdfDocument(new PdfWriter(dest)); PdfPage page = pdf.addNewPage(); // 定义自定义尺寸并修改页面 Rectangle customPageSize = new Rectangle(0, 0, 2000, 800); page.setPageSize(customPageSize); // 后续的画布、内容绘制和之前一样 PdfCanvas pdfCanvas = new PdfCanvas(page); Canvas canvas = new Canvas(pdfCanvas, pdf, customPageSize); // ... 其余代码不变
关键知识点
PDF页面的实际尺寸由它的MediaBox决定,setPageSize()方法就是在修改这个属性。而你之前用的pdfCanvas.rectangle()只是在页面上绘制一个视觉上的矩形,不会影响页面的真实尺寸。
内容的提问来源于stack exchange,提问作者Jini Gary Lee
相关产品推荐
相关产品推荐

