OpenPDF 1.3.30设置Margin Mirroring无效,所有页边距一致求助
OpenPDF镜像页边距不生效的问题排查与解决
问题描述
使用OpenPDF 1.3.30创建带镜像页边距的文档,已调用document.setMarginMirroring(true),但所有页面仍保持相同左右边距,未实现书籍式奇偶页边距镜像效果。
测试代码
package openpdf; import com.lowagie.text.Document; import com.lowagie.text.Paragraph; import com.lowagie.text.Rectangle; import com.lowagie.text.pdf.PdfWriter; import java.io.File; import java.io.FileOutputStream; public class MirrorMarginTest { public static void main(String[] args) throws Exception { Rectangle pageSize = new Rectangle(400,650); Document doc = new Document(pageSize, 125, 25, 50, 50); doc.setMarginMirroring(true); FileOutputStream fos = new FileOutputStream(new File("C:\\Tmp\\test.pdf")); PdfWriter writer = PdfWriter.getInstance(doc, fos); doc.open(); for( int i=0; i<4; i++) { doc.newPage(); doc.add(new Paragraph("Test. Test. Test. Test. Test. Test. Test. Test. Test. Test. Test. Test. Test.")); } doc.close(); fos.close(); writer.close(); } }
问题分析与修正
核心错误:配置时机错误
在OpenPDF(基于iText 2.x)中,setMarginMirroring(true)的配置需要传递给PdfWriter才能生效。原代码在创建PdfWriter实例前调用该方法,导致配置未被Writer接收,镜像逻辑未启用。
次要问题:无效空白页
doc.open()会自动创建第一页,后续立刻调用newPage()会生成空白首页,干扰奇偶页边距的观察效果。
修正后的代码
package openpdf; import com.lowagie.text.Document; import com.lowagie.text.Paragraph; import com.lowagie.text.Rectangle; import com.lowagie.text.pdf.PdfWriter; import java.io.File; import java.io.FileOutputStream; public class MirrorMarginTest { public static void main(String[] args) throws Exception { Rectangle pageSize = new Rectangle(400,650); Document doc = new Document(pageSize, 125, 25, 50, 50); FileOutputStream fos = new FileOutputStream(new File("C:\\Tmp\\test.pdf")); // 先创建PdfWriter实例 PdfWriter writer = PdfWriter.getInstance(doc, fos); // 再启用边距镜像 doc.setMarginMirroring(true); doc.open(); // 直接在自动创建的首页添加内容 doc.add(new Paragraph("Test. Test. Test. Test. Test. Test. Test. Test. Test. Test. Test. Test. Test.")); // 循环生成剩余3页 for( int i=1; i<4; i++) { doc.newPage(); doc.add(new Paragraph("Test. Test. Test. Test. Test. Test. Test. Test. Test. Test. Test. Test. Test.")); } doc.close(); fos.close(); writer.close(); } }
效果说明
修正后:
- 奇数页将使用初始设置的
左125、右25边距 - 偶数页自动交换为
左25、右125边距,实现书籍式镜像效果 - 若需同时镜像上下边距,可额外调用
doc.setMarginMirroringTopBottom(true)
内容的提问来源于stack exchange,提问作者Neil
相关产品推荐
相关产品推荐

