Java更改 PDF 页面大小

article/2025/11/7 19:21:31

在日常工作中,我们可能经常面临更改 PDF 页面大小的情况。 例如,一个包含不同大小页面的合并 PDF 文件,我们需要将页面大小调整为相同大小以便于阅读和打印。 在本文中,将详细为您介绍在 Java 应用程序中更改 PDF 文件的页面大小,以下是详细步骤及思路,并附上Java代码以供参考。

  • ​将 PDF 页面大小更改为标准纸张大小
  • 将 PDF 页面大小更改为自定义纸张大小​

程序环境:

在程序中导入jar,如下两种方法:

方法1:

手动引入。将 ​ ​Free Spire.PDF for Java​ ​下载到本地,解压,找到lib文件夹下的Spire.PDF.jar文件。在IDEA中打开如下界面,将本地路径中的jar文件引入Java程序:

方法2:

如果您想通过 ​ ​ Maven​ ​安装,则可以在 pom.xml 文件中添加以下代码导入 JAR 文件。

<repositories><repository><id>com.e-iceblue</id><url>https://repo.e-iceblue.cn/repository/maven-public/</url></repository></repositories>
<dependencies><dependency><groupId>e-iceblue</groupId><artifactId>spire.pdf.free</artifactId><version>5.1.0</version></dependency>
</dependencies>

将 PDF 页面大小更改为标准纸张大小

  • ​初始化 PdfDocument 实例并用 PdfDocument.loadFromFile() 方法加载原 PDF 文件。
  • 初始化另一个 PdfDocument 实例以创建新的 PDF 文件。
  •  循环遍历原 PDF 中的页面。
  • 使用 PdfDocument.getPages().add() 方法将所需大小的页面添加到新的 PDF 文件。
  • 初始化一个 PdfTextLayout 实例并使用 PdfTextLayout.setLayout() 方法将文本布局设置为一页。
  • 使用 PdfPageBase.createTemplate() 方法基于原 PDF 中的页面创建模板。
  • 使用 PdfTemplate.draw() 方法将模板绘制到具有指定文本布局的新 PDF 文件的页面上。
  • 使用PdfDocument.saveToFile()方法保存结果文件。

完整代码:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.PdfPageSize;
import com.spire.pdf.graphics.*;import java.awt.geom.Point2D;public class ChangePageSizeToStandardPaperSize {public static void main(String []args){//加载原 PDF 文档PdfDocument originPdf = new PdfDocument();originPdf.loadFromFile("都江堰.pdf");//创建一个新的PDF文档PdfDocument newPdf = new PdfDocument();//循环遍历原 PDF 中的页面for(int i = 0; i< originPdf.getPages().getCount(); i++){//将A1大小页面添加到新的 PDF 文件        PdfPageBase newPage = newPdf.getPages().add(PdfPageSize.A1, new PdfMargins((0)));//初始化一个 PdfTextLayout 实例PdfTextLayout layout = new PdfTextLayout();//将文本布局设置为一页(如果不设置,内容将无法适应页面大小)layout.setLayout(PdfLayoutType.One_Page);//基于原始PDF中的页面创建模板PdfTemplate template = originPdf.getPages().get(i).createTemplate();//在新的PDF中将模板绘制到页面上template.draw(newPage, new Point2D.Float(0,0), layout);}//保存结果文档newPdf.saveToFile("更改页面至标准纸张大小.pdf");

效果图:

将 PDF 页面大小更改为自定义纸张大小

  • 初始化 PdfDocument 实例并使用 PdfDocument.loadFromFile() 方法加载原PDF文件。
  • 初始化另一个 PdfDocument 实例以创建新的 PDF 文件。
  • 初始化 PdfUnitConvertor 实例,然后用 PdfUnitConvertor.convertUnits() 方法将自定义大小以英寸为单位转换为points。
  • 从自定义大小初始化 Dimension2D 实例。
  • 循环遍历原PDF 中的页面。
  • 使用 PdfDocument.getPages().add() 方法将自定义大小的页面添加到新的 PDF 文件。
  • 创建一个 PdfTextLayout 实例并使用 PdfTextLayout.setLayout() 方法将文本布局设置为一页。
  • 使用 PdfPageBase.createTemplate() 方法基于原PDF中的页面创建模板。
  • 使用 PdfTemplate.draw() 方法将模板绘制到具有指定文本布局的新 PDF 文件的页面上。
  • 使用 PdfDocument.saveToFile() 方法保存结果文件。

完整代码:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.*;import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;public class ChangePageSizeToCustomPaperSize {public static void main(String []args){//加载原 PDF 文件PdfDocument originPdf = new PdfDocument();originPdf.loadFromFile("都江堰.pdf");//初始化一个新的 PdfDocument 实例PdfDocument newPdf = new PdfDocument();//初始化 PdfUnitConvertor 实例PdfUnitConvertor unitCvtr = new PdfUnitConvertor();//将自定义大小以英寸为单位转换为pointsfloat width = unitCvtr.convertUnits(6.5f, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point);float height = unitCvtr.convertUnits(8.5f, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point);//从自定义大小创建一个 Dimension2D 实例,然后它将用作新 PDF 的页面大小Dimension2D size = new Dimension();size.setSize(width, height);//循环遍历原PDF 中的页面for(int i = 0; i< originPdf.getPages().getCount(); i++){//将自定义大小的页面添加到新的 PDF 文件PdfPageBase newPage = newPdf.getPages().add(size, new PdfMargins((0)));//创建一个 PdfTextLayout 实例PdfTextLayout layout = new PdfTextLayout();//将文本布局设置为一页(如果未设置内容将不会缩放以适应页面大小)layout.setLayout(PdfLayoutType.One_Page);//根据原 PDF 中的页面创建模板PdfTemplate template = originPdf.getPages().get(i).createTemplate();//在新 PDF 的页面上绘制模板template.draw(newPage, new Point2D.Float(0,0), layout);}//保存结果文档newPdf.saveToFile("更改页面至自定义纸张大小.pdf");}
}

效果图:


http://chatgpt.dhexx.cn/article/1FOxt40l.shtml

相关文章

Hibernate QBC查询知识点总结

Hibernate &#xff1a;QBC查询基本步骤与常规运算符 QBC查询的基本步骤 这种方式比较面向对象方式&#xff0c;重点是有三个描述条件的对象&#xff1a;Restrictions,Order,Projections。 使用QBC查询&#xff0c;一般需要以下三个步骤&#xff1a; 1&#xff1a;使用Sessio…

Hibernate-6.QBC

QBC:Query By Criteria 条件查询&#xff0c;即面向对象的查询方式6.1查询所有 6.2分页 6.3排序 6.4条件查询 6.5多条件查询 6.6模糊查询 6.7 In 6.8 And 6.9 OR 6.10聚合函数 6.11 Max 6.12 内连接 6.13 左连接 6.14 离线查询 …

Qt 编译方式之 qbs

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 QBS简介 QBS&#xff08;Qt Build Suite&#xff09;同 qmake、cmake 之类一样都是构建工具。QBS 号称是下一代的构建工具(博主的理解上…

QBC查询及语法

QBC(Query By Criteria)查询方式是Hibernate提供的“更加面向对象”的一种检索方式。QBC在条件查询上比HQL查询更为灵活&#xff0c;而且支持运行时动态生成查询语句。 在Hibernate应用中使用QBC查询通常经过3个步骤 (1)使用Session实例的createCriteria()方法创建Criteria对…

Hibernate 之QBC

一、Hibernate 中聚合函数的使用 Criteria接口的Projections类主要用于帮助Criteria接口完成数据的分组查询和统计功能: List cats session.createCriteria(Cat. class ) .setProjection(Projections.projectionList() .add(Projections.rowCount…

Qt6 中如何使用 qsb

【写在前面】 Qt 5 的图形体系结构非常依赖 OpenGL 作为底层 3D 图形 API。但过去 8 年来随着 Metal 和 Vulkan 的推出&#xff0c;市场发生了巨大变化。现在&#xff0c;Qt 6 加入了大量不同平台的图形 API&#xff0c;以确保用户可以在所有平台上以最高性能运行 Qt。 在 Qt Q…

MyBatis十:逆向工程(QBC风格)

逆向工程 一、创建逆向工程 创建依赖pom.xml <packaging>jar</packaging><!-- 依赖MyBatis核心包 --> <dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5…

QBC 查询

当使用 hibernate 的 QBC 进行查询的时候&#xff0c;无需写 sql 语句&#xff0c;使用的是 Criteria 对象中的方法进行的实现&#xff0c;创建 Criteria 对象的时候&#xff0c;需要传入一个实体类.class&#xff0c;会自动关联该实体类对应的数据库表。 一&#xff1a;查询所…

Hibernate--QBC举例+详解(一)

QBC检索 QBC&#xff08;Query By Criteria&#xff09;是Hibernate提供的另一种检索对象的方式&#xff0c;它主要由Criteria接口、Criterion接口和Expression类组成。 Criteria接口是Hibernate API中的一个查询接口&#xff0c;它需要由session进行创建。一个单独的查询就是…

统一软件开发过程(RUP)的概念和方法

统一软件开发过程&#xff08;Rational Unified Process,RUP)是一种面向对象且基于网络的程序开发方法论。 根据Rational(Rational Rose和统一建模语言的开发者)的说法&#xff0c;好像一个在线的指导者&#xff0c;它可以为所有方面和层次的程序开发提供指导方针&#xff0c;…

程序员技术开发委托合同模板 私活模板

---需要电子word版&#xff0c;请关注--------- 回复&#xff1a;私活 含税与不含税计算工具&#xff1a; 假设税率是6% 不含税金额&#xff1d;总金额/1.06 税额&#xff1d;不含税金额0.06 增值税在线计算器&#xff1a;http://www.ab126.com/goju/7332.html 大小写转换&…

软件开发模型

1.1大爆炸模型 大爆炸默认是相对简单的开发模型&#xff0c;在开发过程中&#xff0c;没有什么规范和计划&#xff0c;更没有测试 1.2 边做边改模型 相对于大爆炸模型&#xff0c;考虑到了项目需求&#xff0c;然后开发来回的编写&#xff0c;测试&#xff0c;修改缺陷的过程…

10种软件开发模型整理

准备整理一下软件模型&#xff0c;但是百度到都是零散信息&#xff0c;所以文章准备从概念、模型核心思想、优点、缺点、生命周期等体现各个软件模型 什么是软件模型 软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、…

系统软件开发基础知识

系统软件开发基础知识 最近最火的是孩子考了多少分&#xff0c;能上那个好大学&#xff0c;出现了我的大学的我的梦。 他们的大学他们的梦&#xff0c;我是啥&#xff0c;我的软件我的梦。 下面了解到的基础知识做一个归纳&#xff0c;本人了解这方面的知识点可能很片面&…

软件开发测试验收通知书,软件项目开发-客户告知书

为确保项目进度快速进行&#xff0c;在域名备案、开通相关第三方接口、确认功能文档、UI设计沟通和验收等阶段&#xff0c;恳请贵方百忙之中抽出时间积极配合&#xff0c;同时也为避免以后双方产生不必要的纠纷&#xff0c;特此告知贵方在项目进行过程中提供如下必要的配合条件…

利用Windows注册Dll或其他文件

注册Dll文件 前章 有时候&#xff0c;我要使用ActiveX控件&#xff0c;但是。如果别人给了一个Dll没注册进去怎么办。 注册 在电脑开始界面->运行->输入regsvr32“Dll文件所在路径”&#xff08;也可以用winR快捷键输出&#xff09;&#xff0c;如下图&#xff1a;

DLL注入——使用注册表

1.简介 整个系统的配置都保存在注册表中&#xff0c;我们可以通过调整其中的设置来改变系统的行为。 该方式依赖User32.dll&#xff0c;也就是说&#xff0c;需要可执行程序调用到这个系统动态库&#xff0c;我们注入的dll才会被执行到。基本上所有基于GUI的应用程序都使用了…

如何手动运行dll文件,非注册dll

遇到一个dll文件的恶意样本&#xff0c;cuckoo沙箱给出的运行命令如下&#xff1a; cd C:\Windows\System32\ rundll32.exe C:\coreshell.dll,DllMain 方法&#xff1a;rundll32.exe 文件位置,DllMain but会弹出警告 另外一种方法&#xff0c;在专家的文章中有提到 DllM…

怎样在计算机上注册dll文件,win10如何注册dll文件_win10系统dll文件怎样安装

在win10系统中&#xff0c;有着大量的dll文件&#xff0c;这是一种计算机上的一类文件&#xff0c;而且一个DLL文件也可能被不同的应用程序使用&#xff0c;但是许多用户可能都不知道win10注册dll文件的操作&#xff0c;那么win10如何注册dll文件呢&#xff1f;接下来就来告诉大…

Win10注册DLL办法

测试环境&#xff1a;win7 64位系统自动升级到win10 64位系统 经验提升&#xff1a;不要在开始-运行-CMD里面执行&#xff0c;不起作用。 注册步骤如下&#xff1a; 1、准备要注册的DLL文件到指定目录 2、新建一个BAT文件&#xff0c;写入注册命令 3、右键已管理员身份运行注…