Java实现将彩色PDF转为灰度PDF的示例代码

 更新时间:2022年03月22日 14:44:33   作者:E-iceblue  
本文以Java代码为例介绍如何实现将彩色PDF文件转为灰度(黑白)的PDF文件,文中的示例代码讲解详细,感兴趣的小伙伴快跟随小编一起学习一下吧

本文以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"));

到此这篇关于Java实现将彩色PDF转为灰度PDF的示例代码的文章就介绍到这了,更多相关Java彩色PDF转灰度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 简单谈谈java的异常处理(Try Catch Finally)

    简单谈谈java的异常处理(Try Catch Finally)

    在程序设计中,进行异常处理是非常关键和重要的一部分。一个程序的异常处理框架的好坏直接影响到整个项目的代码质量以及后期维护成本和难度。
    2016-03-03
  • Java8中Optional的使用方法详解

    Java8中Optional的使用方法详解

    这篇文章主要介绍了Java8中Optional的使用方法详解,传统的写代码方式经常会遇到NullPointerException,这就需要我们在代码中经常判空,而判空的写法又会显得很累赘,这里就可以用到Optional来简化代码,需要的朋友可以参考下
    2024-01-01
  • 深入浅析Spring-boot-starter常用依赖模块

    深入浅析Spring-boot-starter常用依赖模块

    这篇文章主要介绍了Spring-boot-starter常用依赖模块及spring boot的两大优点,需要的朋友可以参考下
    2018-01-01
  • SpringBoot整合Mybatis与thymleft实现增删改查功能详解

    SpringBoot整合Mybatis与thymleft实现增删改查功能详解

    MybatisPlus是国产的第三方插件, 它封装了许多常用的CURDapi,免去了我们写mapper.xml的重复劳动。本文将整合MybatisPlus实现增删改查功能,感兴趣的可以了解一下
    2022-12-12
  • IDEA创建yml文件不显示小树叶创建失败问题的解决方法

    IDEA创建yml文件不显示小树叶创建失败问题的解决方法

    这篇文章主要介绍了IDEA创建yml文件不显示小树叶创建失败问题的解决方法,需要的朋友可以参考下
    2020-07-07
  • Java截取字符串的方法

    Java截取字符串的方法

    这篇文章主要介绍了Java截取字符串的方法,实例分析了java中substring方法的使用技巧,需要的朋友可以参考下
    2015-05-05
  • java键盘录入的方法举例详解

    java键盘录入的方法举例详解

    这篇文章主要给大家介绍了关于java键盘录入的相关资料,我们在写程序的时候,数据值都是固定的,但是实际开发中,数据值肯定是变化的,所以,把数据改进为键盘录入,提高程序的灵活性,需要的朋友可以参考下
    2023-10-10
  • Java中两个List之间的比较方法(差集、交集和并集)

    Java中两个List之间的比较方法(差集、交集和并集)

    在业务的开发过程中会经常用到两个List集合相互取值的情况,下面这篇文章主要给大家介绍了关于Java中两个List之间的比较方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Java Spring分别实现定时任务方法

    Java Spring分别实现定时任务方法

    这篇文章主要为大家详细介绍了Java与Spring设置动态定时任务的方法,定时任务的应用场景十分广泛,如定时清理文件、定时生成报表、定时数据同步备份等
    2022-07-07
  • SpringBoot项目使用slf4j的MDC日志打点功能(最新推荐)

    SpringBoot项目使用slf4j的MDC日志打点功能(最新推荐)

    这篇文章主要介绍了SpringBoot项目使用slf4j的MDC日志打点功能,本文通过示例代码给大家介绍非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06

最新评论