信息发布→ 登录 注册 退出

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

发布时间:2026-01-11

点击量:
目录
  • 配置程序环境
  • 转彩色PDF为灰度
    • 实现代码(Java)
  • 补充

    本文以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"));
    在线客服
    服务热线

    服务热线

    4008888355

    微信咨询
    二维码
    返回顶部
    ×二维码

    截屏,微信识别二维码

    打开微信

    微信号已复制,请打开微信添加咨询详情!