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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:01:11