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

Apache PDFBox 2.0.17如何创建内容正常显示的横向PDF

问题原因

你当前的写法错误在于混淆了页面旋转参数和页面尺寸的作用:setRotation(90)是告知PDF阅读器展示页面时整体旋转90度,它不会自动调整页面内部的内容坐标系,你按竖版A4的坐标规则写入内容,阅读器旋转页面后内容自然会跟着转90度,这不是PDFBox的功能缺陷。

正确实现方式

生成横向PDF不需要设置页面旋转,直接将页面媒体框(MediaBox)的宽高调换,使用横向尺寸的页面规格即可:

// 生成A4横向尺寸:A4竖版尺寸为宽595pt、高842pt,横向直接交换宽高值
PDRectangle a4Landscape = new PDRectangle(PDRectangle.A4.getHeight(), PDRectangle.A4.getWidth());
PDPage page = new PDPage(a4Landscape);
// 不需要调用page.setRotation()

用这种方式创建的页面,坐标系本身就是横向适配的,你写入的文本、图形等内容不会出现旋转错位的问题,和竖版模式下的内容写入逻辑完全一致。

特殊场景说明

如果你的业务场景必须保留setRotation(90)的参数设置(比如兼容已有模板逻辑),那么写入内容前需要手动调整PDF内容流的坐标系,抵消页面旋转带来的偏移:

  • 将坐标系原点平移到旋转后的正确位置
  • 反向旋转90度坐标系后再写入内容

这种方式需要手动计算坐标偏移,日常生成普通横向PDF不推荐使用,直接调整MediaBox尺寸是最简单、兼容性最好的方案。

内容的提问来源于stack exchange,提问作者Sathish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:39:38