如何使用ITextRenderer从Thymeleaf HTML模板生成A4尺寸PDF
如何用ITextRenderer设置A4页面尺寸适配Thymeleaf生成的PDF
我来帮你搞定这个页面尺寸的问题!ITextRenderer默认的页面尺寸可能不是标准A4,你只需要在加载HTML文档之前配置PDFWriter的页面大小即可。下面是修改后的完整代码,关键部分我标出来了:
import com.lowagie.text.PageSize; // 记得导入这个类 import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context; import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; import com.lowagie.text.DocumentException; import org.xhtmlrenderer.pdf.ITextRenderer; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.IOException; public class PdfGenerator { public static void main(String[] args) throws IOException, DocumentException { ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver(); templateResolver.setSuffix(".html"); templateResolver.setTemplateMode("HTML5"); TemplateEngine templateEngine = new TemplateEngine(); templateEngine.setTemplateResolver(templateResolver); Context context = new Context(); context.setVariable("name", "Thomas"); String html = templateEngine.process("templates/Quote", context); OutputStream outputStream = new FileOutputStream("message.pdf"); ITextRenderer renderer = new ITextRenderer(); // 关键步骤:设置A4页面尺寸,必须在setDocumentFromString之前调用 renderer.getPDFWriter().setPageSize(PageSize.A4); renderer.setDocumentFromString(html); renderer.layout(); renderer.createPDF(outputStream, true); outputStream.close(); } }
重点说明:
- 一定要导入
com.lowagie.text.PageSize类,这是ITextRenderer依赖的iText旧版本的包(注意不是com.itextpdf.text.PageSize,因为XHTMLRenderer用的是iText 2.x分支) - 必须在调用
setDocumentFromString()之前设置页面尺寸,否则配置不会生效——因为一旦加载了HTML文档,渲染器就已经确定了页面布局规则 PageSize.A4是预定义的标准A4尺寸(210mm × 297mm),如果需要横向A4,可以用PageSize.A4.rotate()
内容的提问来源于stack exchange,提问作者Ketan Navadiya
相关产品推荐
相关产品推荐

