You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:52:35