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

如何将PDF页面全部内容完整复制到更大尺寸的新PDF页面中

解决方案

原有实现丢失书签、注释的核心原因是通过CopyAsFormXObject仅迁移了页面的可视化渲染内容,没有携带文档级(书签/大纲)、页面级(注释、自定义属性)的元数据。正确实现不需要重建空白页面嵌入源内容,直接修改原有页面的尺寸定义,整体偏移内容到居中位置即可,所有原PDF属性都会完整保留。

修正后代码

public void FixSize() // 属于PDFentry类的方法
{
    // FQFName是文件全路径属性
    string tempFile = Path.GetTempFileName();
    // 绑定读写,直接保留原文档所有结构
    using PdfReader reader = new PdfReader(FQFName);
    using PdfWriter writer = new PdfWriter(tempFile);
    using PdfDocument pdfDoc = new PdfDocument(reader, writer);
    
    iText.Kernel.Geom.PageSize targetPageSize = iText.Kernel.Geom.PageSize.LETTER;
    int pageCount = pdfDoc.GetNumberOfPages();

    for (int pageNum = 1; pageNum <= pageCount; pageNum++)
    {
        PdfPage page = pdfDoc.GetPage(pageNum);
        Rectangle originalBox = page.GetMediaBox();
        
        // 计算居中偏移量
        float offsetX = (targetPageSize.GetWidth() - originalBox.GetWidth()) / 2;
        float offsetY = (targetPageSize.GetHeight() - originalBox.GetHeight()) / 2;

        // 更新页面尺寸为标准信纸大小
        page.SetMediaBox(targetPageSize);
        page.SetCropBox(targetPageSize);

        // 给整个页面内容添加偏移,前置到内容流最开头
        new PdfContentStreamPrepend(page).ConcatMatrix(1, 0, 0, 1, offsetX, offsetY);

        // 同步偏移所有注释坐标,避免注释错位
        foreach (var annotation in page.GetAnnotations())
        {
            Rectangle annotRect = annotation.GetRectangle().ToRectangle();
            annotation.SetRectangle(new PdfArray(
                new Rectangle(
                    annotRect.GetX() + offsetX, 
                    annotRect.GetY() + offsetY, 
                    annotRect.GetWidth(), 
                    annotRect.GetHeight()
                )
            ));
        }
    }
    
    pdfDoc.Close();
    // 替换原文件
    File.Copy(tempFile, FQFName, true);
    File.Delete(tempFile);
}

方案说明

  • 直接基于原文档结构修改,无需重建页面,书签、大纲等所有文档级属性自动完整保留
  • 同步处理注释坐标偏移,不会出现内容与注释错位的问题
  • 完全保留原有内容画质,无二次渲染损耗
  • 仅需处理页面尺寸和偏移逻辑,执行效率远高于转FormXObject的实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:54:02