• 一、开发前准备
  1. 所需jar:https://download.csdn.net/download/zqq3436/10588117
  2. jdk版本:1.6
  3. 测试代码文件夹目录结构(pdf文件夹下有一些.pdf文件,转换好的图片,放在images目录下)

  • 二、代码实现内容
  1. pdf转图片,可实现将图片设置为黑白图片
  2. 循环File文件夹,批量pdf转图片
  3. 将本地目录下图片保存到另外位置,并转为黑白图片
  • 三、代码

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;import javax.imageio.ImageIO;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;import com.itextpdf.text.pdf.PdfReader;import sun.awt.image.ImageWatched.Link;public class TestItext {public static void main(String[] args) {//遍历文件夹下所有pdf,并转为图片iterateFolder("D:/测试pdf转图片");//test.jpg图片保存到D:\根目录,并转为黑白片Image2Gray(new File("C:\\Users\\zqq3436\\Desktop\\test.jpg"), "D:\\testdagl.jpg");}/*** 遍历文件夹* * @param path*            文件目录*/public static void iterateFolder(String path) {File file = new File(path);// 遍历path下的文件和目录,放在File数组中File[] files = file.listFiles();String appNo = "";// 遍历filesfor (File f : files) {if (f.isDirectory()) {// 不遍历iamges文件夹if ("images".equals(f.getName())) {continue;}// System.out.println("文件夹:" + f.getName());// 递归获取文件iterateFolder(path + "/" + f.getName());} else {System.out.println("文件:" + f.getName());File fParent = f.getParentFile().getParentFile();pdf2Image(f.getAbsolutePath(), f.getParentFile().getParent() + "/images", 300, fParent.getName());}}}/**** PDF文件转PNG图片,全部页数* * @param PdfFilePath*            pdf完整路径* @param imgFilePath*            图片存放的文件夹* @param dpi*            dpi越大转换后越清晰,相对转换速度越慢* @param appNo*            申请案号码,用于图片名称* @return*/public static void pdf2Image(String PdfFilePath, String dstImgFolder, int dpi, String appNo) {File file = new File(PdfFilePath);PDDocument pdDocument;try {// 获取文件所在文件夹String imgPDFPath = file.getParent();int dot = file.getName().lastIndexOf('.');// 获取图片文件名String imagePDFName = file.getName().substring(0, dot);// 获取图片存放文件夹String imgFolderPath = null;if (dstImgFolder.equals("")) {// 图片基础路径+(图片文件名)imgFolderPath = imgPDFPath;// + File.separator + imagePDFName;} else {imgFolderPath = dstImgFolder;// + File.separator + imagePDFName;}if (createDirectory(imgFolderPath)) {pdDocument = PDDocument.load(file);PDFRenderer renderer = new PDFRenderer(pdDocument);// dpi越大转换后越清晰,相对转换速度越慢PdfReader reader = new PdfReader(PdfFilePath);// 获取pdf的总页数int pages = reader.getNumberOfPages();StringBuffer imgFilePath = null;for (int i = 0; i < pages; i++) {// 每个pdf文件对应一个文件夹String imgFilePathPrefix = appNo + "_" + imagePDFName;// + File.separator + imagePDFName;imgFilePath = new StringBuffer(imgFilePathPrefix);imgFilePath.append("_");imgFilePath.append(String.valueOf(i + 1));imgFilePath.append(".jpg");File dstFile = new File(imgFolderPath, imgFilePath.toString());// 每页生成一个图片BufferedImage image = renderer.renderImageWithDPI(i, dpi);/*//以下代码实现将图片转为黑白图片,有需求,可以将注释打开image.getGraphics().drawImage(image, 0, 0, null);for (int y = 0; y < image.getHeight(); y++) {for (int x = 0; x < image.getWidth(); x++) {Color pixel = new Color(image.getRGB(x, y));image.setRGB(x, y, new Color(getGray(pixel), getGray(pixel), getGray(pixel)).getRGB());}}*/ImageIO.write(image, "JPEG", dstFile);}System.out.println("PDF文档转jpg图片成功!");pdDocument.close();} else {System.out.println("PDF文档转jpg图片失败:" + "创建" + imgFolderPath + "失败");}} catch (IOException e) {e.printStackTrace();}}/*** 创建目录* * @param folder* @return*/private static boolean createDirectory(String folder) {File dir = new File(folder);if (dir.exists()) {return true;} else {return dir.mkdirs();}}/*** 获取像素点的灰度* * @param pixel* @return*/public static int getGray(Color color) {return (color.getRed() * 30 + color.getGreen() * 60 + color.getBlue() * 10) / 100;}/*** 读取文件,并保存* * @param originalFile*            源文件* @param result*            目标文件*/public static void createImage(File originalFile, File result) {try {if (result.exists()) {// 校验该文件是否已存在result.delete();// 删除对应的文件,从磁盘中删除}if (!result.exists()) {// 如果文件不存在result.createNewFile();// 会在磁盘下创建文件,但此时大小为0K}FileInputStream in = new FileInputStream(originalFile);FileOutputStream out = new FileOutputStream(result);// 指定要写入的图片int n = 0;// 每次读取的字节长度byte[] bb = new byte[1024];// 存储每次读取的内容while ((n = in.read(bb)) != -1) {out.write(bb, 0, n);// 将读取的内容,写入到输出流当中}// 执行完以上后,磁盘下的该文件才完整,大小是实际大小out.close();// 关闭输入输出流in.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/*** 读取图片,并保存为黑白图片*/public static void Image2Gray(File file, String linkpath) {try {BufferedImage image = ImageIO.read(file);for (int y = 0; y < image.getHeight(); y++) {for (int x = 0; x < image.getWidth(); x++) {Color pixel = new Color(image.getRGB(x, y));image.setRGB(x, y, new Color(getGray(pixel), getGray(pixel), getGray(pixel)).getRGB());}}ImageIO.write(image, "JPEG", new File(linkpath));} catch (IOException e) {e.printStackTrace();}}}

java实现pdf转图片,并可生成黑白图片相关推荐

  1. Java读取pdf模板,并动态生成pdf文件,如动态生成准考证

    Java读取pdf模板,并动态生成pdf文件,如动态生成准考证 ​ 前几天遇到了一个生成准考证的需求,并提供用户下载,然后百度了一圈还是觉得使用itextpdf这个框架好用点.但是还需要找到一个能创建 ...

  2. Photoshop根据图片模板批量生成动态图片

    需求:给定图片模板,在图片上面维护相关数据,把Excel表中的信息一个一个作到图中. 就技术角度而言,这样的操作并没有多少技术含量,然而却需要耗费大量的时间.如果提供的数据是上百条甚至上千条,你是否仍 ...

  3. (十)老照片修复、图像超分、图片提高分辨率、图片高清化、图片清晰化、黑白图片上色、人脸祛斑、美颜、人体瘦身、图像去噪、人像抠图、批量处理、视频提高分辨率、视频逐帧修复

    (十)老照片修复.图像超分.图片提高分辨率.图片高清化.图片清晰化.黑白图片上色.人脸祛斑.美颜.人体瘦身.图像去噪.人像抠图.批量处理.视频提高分辨率.视频逐帧修复 本文的代码的功能是:可以对图片文 ...

  4. html2canvas图片坐标,html2canvas生成的图片偏移不完整的解决方法

    情景一: 问题背景:生成的图片在一个弹窗里面,如果页面没有滚动条就是正常的,但是一旦出现滚动条并且页面发生滚动时html2canvas绘制成的图片就会偏移出对应滚动高度的白边,如下: 解决办法: 楼主 ...

  5. Python之将彩色图片批量转化为黑白图片

    一.前言 最近遇到了一个新的情景,需要将彩色图片转化为黑白图片,如果手动地去转化一张一张图片,那就真的太原始,效率太低. 用 Python,只需要几行代码就可以在几秒内转化上千张图片.而且,这个功能的 ...

  6. python将图像转换为8位单通道_使用Python将图片转换为单通道黑白图片

    本文介绍如何使用python将图片转换为纯黑白的单通道图片.文中用到的脚本支持彩色.灰度.带alpha通道的输入图片以及SVG矢量图,支持调整输出图片大小以及设置灰度阈值. 最后介绍如何输出SSD13 ...

  7. java设置pdf不可编辑_Java动态生成pdf文件(使用itext编辑pdf)

    一.创建pdf模板 使用PDFelement制作pdf模板(数据域的名称对应后面插入的key) 二.导入maven依赖 com.itextpdf itextpdf 5.5.13 com.itextpd ...

  8. Java iText PDF:用 iText 包生成简单的 pdf 文件

    有点兴趣想要看看 Java 怎么生成 PDF 文件,搜索了一下,据说 iText 包比较好,到 这里下载 iText.jar 包,顺便把源代码.文档都一起下载了吧.但是,仅仅有这么一些材料想要写代码生 ...

  9. java 操作pdf 模板_java使用模板生成PDF

    (1)先用word做出模板界面 (2)文件另存为pdf格式文件 (3)通过Adobe Acrobat pro软件打开刚刚用word转换成的pdf文件 (4)点击右边的"准备表单"按 ...

最新文章

  1. ubuntu18.04.4 安装 qq x64 版本
  2. knockoutJS学习笔记06:ko数组与模板绑定
  3. 给VBox中的linux添加虚拟硬盘(扩容)
  4. Kaggle 数据挖掘比赛经验分享(转)
  5. openshift 在win7上的实现
  6. 2012-2013年度大总结
  7. 深入理解asp.net里的IHttpHandler
  8. 二十二、软件安装RPM、SRPM与YUM
  9. 关于Pycharm进行pytorch分布式训练代码
  10. 零基础快速做一个语音控制系统
  11. 在 Python 中使用计算机视觉实现哈利波特的隐形斗篷
  12. 时域OCT与频域OCT的区别
  13. 《SteamVR实战之PMCore》(Yanlz+Unity+XR+SteamVR+VR+AR+MR+Valve+Oculus+立钻哥哥+==)
  14. 用xpath解析网页
  15. IDEA 2018.3版本Spring Boot 热部署
  16. 电脑无法连接WiFi,一直显示无法连接此网络
  17. 【系统集成项目管理工程师】信息与信息化
  18. 转区系统开放艾欧尼亚转入服务器,【英雄联盟】转区系统开放艾欧尼亚转入服务...
  19. 树莓派之老的方式重刷Raspbian系统-2015
  20. 线性回归模型的公式推导

热门文章

  1. ECCV2020 | SNE-RoadSeg:一种基于表面法向量提取的道路可行驶区域分割方法
  2. java随堂练习05,编写一个程序,为一个给定的年份找出其对应的中国生肖
  3. 股票数据 mysql_获取股票数据(历史数据,Python + MySQL)
  4. Chapter one 的末尾——浙大计算机考研
  5. Sublime 概述
  6. 校园超市购物小程序 计算机毕业设计
  7. 插值与多项式逼近的数值计算方法——《数值计算方法》
  8. 项目管理要定目标、看结果、追过程
  9. cnki登录显示服务器或网络异常,知网查重官网为什么无法登录?
  10. Spring Boot入门(15):Spring Boot 整合 MyBatis-Plus AutoGenerator代码生成器实现自动生成项目骨架代码 | 超级详细,建议收藏