Java实现将彩色PDF转为灰度PDF的示例代码
作者:E-iceblue 发布时间:2022-11-26 19:47:41
本文以Java代码为例介绍如何实现将彩色PDF文件转为灰度(黑白)的PDF文件,即:将PDF文档里面的彩色图片或者文字等通过调用PdfGrayConverter.toGrayPdf()方法转为文档页面为灰色调、无彩色效果的文档,可实现缩小文档大小的目的。下面是程序运行环境及代码示例。
配置程序环境
IntelliJ IDEA
Spire.PDF for Java 5.3.1
PDF文档
关于如何引入jar文件:
1.通过Maven仓库下载,如下配置Pom.xml:
<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</artifactId>
<version>5.3.1</version>
</dependency>
</dependencies>
2.手动添加jar
下载jar包到本地,然后解压,找到lib文件夹下的Spire.Pdf.jar。然后在IDEA中打开如下界面,将本地路径下的jar文件添加至Java程序。
转彩色PDF为灰度
这里转换只需用到以下两个步骤:
使用 PdfGrayConverter类加载PDF文件。
调用 PdfGrayConverter.toGrayPdf() 方法将 PDF 转换为灰度。
实现代码(Java)
import com.spire.pdf.conversion.*;
public class ToGrayPDF {
public static void main(String[] args) {
//创建一个PdfGrayConverter实例并加载PDF文档
PdfGrayConverter converter = new PdfGrayConverter("Booklet.pdf");
//将彩色PDF转换为灰度
converter.toGrayPdf("ToGray.pdf");
converter.dispose();
}
}
转换结果:
补充
Java不仅能将彩色PDF转换为灰度的PDF,还能实现将彩色图像转换为灰度图像,下面是实现步骤
黑白图像只有黑白两种颜色,所以用灰度值0-255来表示黑白的比例。
在彩色图像中有RGB三种颜色的分量来表示颜色,当R=G=B时,就显示出灰色。
由RGB来求得灰度值的方法有好几种,可以取RGB的比例3:6:1,这样算出的灰度应用到图像中就能生成不错的黑白图像。
下面放出2张效果图,分别是原图和转换的黑白图:
根据上面的RGB比例公式得出一个计算灰度值得函数
//计算像素点的灰度
public static int getGray(Color pixel) {
return (pixel.getRed()*30+pixel.getGreen()*60+pixel.getBlue()*10)/100;
}
接下来就是读取一个图片到BufferedImage然后遍历面一个像素点的颜色,用getGray算出灰度值再赋值成为该点新的颜色值(R=G=B=算出的灰度值)
代码如下
JFileChooser jChooser = new JFileChooser();
//设置默认的打开目录,如果不设的话按照window的默认目录(我的文档)
jChooser.setCurrentDirectory(new File("f:/"));
//打开一个对话框
int index = jChooser.showDialog(null, "打开文件");
if (index == JFileChooser.APPROVE_OPTION) {
path=jChooser.getSelectedFile().getAbsolutePath();
}
Image img = new ImageIcon(path).getImage();
BufferedImage bfi = new BufferedImage(img.getWidth(null),img.getHeight(null),BufferedImage.TYPE_INT_RGB);
bfi.getGraphics().drawImage(img, 0, 0,null);
for(int y=0;y<bfi.getHeight();y++)
for(int x=0;x<bfi.getWidth();x++) {
Color pixel = new Color(bfi.getRGB(x, y));
bfi.setRGB(x, y,new Color(getGray(pixel),getGray(pixel),getGray(pixel)).getRGB());
}
ImageIO.write(bfi, "JPEG", new File("1.jpg"));
来源:https://www.cnblogs.com/Yesi/p/16038524.html


猜你喜欢
- @Scheduled不执行的原因1. 今天用@Schedule做了一个定时任务希望凌晨1点执行,代码如下@Servicepublic cla
- 前言现在的项目一般是拆分成一个个独立的模块,当在其他项目中想要使用独立出来的这些模块,只需要在其pom.xml使用<dependenc
- 本文实例讲述了C#使用RichTextBox实现替换文字及改变字体颜色功能。分享给大家供大家参考,具体如下:替换文字private void
- 一个Java程序的执行要经过编译和执行(解释)这两个步骤,同时Java又是面向对象的编程语言。当子类和父类存在同一个方法,子类重写了父类的方
- CDMA猫真是!@#¥#%(*,连PDU都不支持,只能发文本短信。而且发中文短信居然是UNICODE,无法在超级终端里输入。只能写程序。 网
- java可以通过Runtime.getRuntime().exec()执行一个操作系统的命令,在操作系统层面执行命令也就创建了一个进程,Ja
- Android 2.3提供一个称为严苛模式StrictMode的调试特性,Google称该特性已经使数百个Android上的Google应用
- 访问权限符:(1)public:对于成员来说:任何其他类都可以访问它们,不管在同一个包中还是在另外的包中。对于类来说:  
- 一、背景目前的Springboot,当发生了任何修改之后,必须关闭后再启动Application类才能够生效,显得略微麻烦。Springbo
- 在项目中用到了MapStruct,对其可以转换JavaBean特别好奇,因为之前都是使用Vo的方式手动set转换,但是接触到MapStruc
- 实习一段时间了,一直想写点技术总结,但一直没找到合适的主题。刚好,最近版本中我负责的模块遇到了个线程相关问题(之前一直画界面,做点基础功能,
- 本文实例讲述了java中response对象用法。分享给大家供大家参考,具体如下:<jsp:forward>动作元素用于运行时在
- 本文实例总结了Android开发中的简单设置技巧。分享给大家供大家参考,具体如下:1开机图片:android-logo-mask.pngan
- 上篇文章给大家介绍了在idea中将创建的java web项目部署到Tomcat中的过程图文详解,可以参考下,本文给大家继续介绍如何在IDEA
- 本文实例为大家分享了C#强制转换和尝试转换的方法,供大家参考,具体内容如下将String[]类型的Object类型,转换为String[]类
- 这篇文章主要介绍了SpringBoot使用Log4j过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 注:底色透明是否生效与android版本有关,版本过低设置无效1.在main.dart内设置void main(){ runApp(new
- 现在越来越多手机支持OTG功能,通过OTG可以实现与外接入的U盘等USB设备实现数据传输。 USB OTG(On The Go)作
- 环境搭建spring boot的简介以往我们开发时用到spring总是避免不了繁琐的配置,例如我们要配置一个数据库连接,可能需要以下几步:1
- -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M 这里有几个问