pdf转图片 java乱样式_PDF转图片实现方式+转换后Linux部署图片乱码解决方案

本文介绍了使用Apache PDFBox库在Java中将PDF转换为图片的工具类,包括自定义图片格式和大小的方法。同时,文章讨论了在Linux环境下部署时可能出现的图片乱码解决方案。
摘要由CSDN通过智能技术生成

一、依赖

org.apache.pdfbox

fontbox

2.0.9

org.apache.pdfbox

pdfbox

2.0.9

二、工具类

package cn.richinfo.admin.common.util;

import java.awt.image.BufferedImage;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.IOException;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import javax.imageio.ImageIO;

import org.apache.commons.fileupload.FileItem;

import org.apache.pdfbox.pdmodel.PDDocument;

import org.apache.pdfbox.rendering.PDFRenderer;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

* 将pdf文件转换成图片工具类

*

* @author yangcongshang

* @since 2019-11-20

*/

public class PdfToPictureUtil {

private static final Logger logger = LoggerFactory.getLogger(PdfToPictureUtil.class);

public static class Picture {

private String name;

private InputStream data;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public InputStream getData() {

return data;

}

public void setData(InputStream data) {

this.data = data;

}

}

/**

*

* @param fileItem

* @param type

* @return

*/

public static List pdf2Picture(FileItem fileItem, String type, String customFileName) {

// 将pdf装图片 并且自定义图片的格式、大小

List files = new ArrayList<>();

Picture file;

if (NullJudgeUtil.isEmpty(fileItem)) {

return files;

}

try {

PDDocument doc = PDDocument.load(fileItem.getInputStream());

PDFRenderer renderer = new PDFRenderer(doc);

int pageCount = doc.getNumberOfPages();

for (int i = 0; i < pageCount; i++) {

BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

ImageIO.write(image, type, outputStream);

file = new Picture();

file.setName(customFileName + "_页面_" + (i + 1) + "." + type);

file.setData(new ByteArrayInputStream(outputStream.toByteArray()));

files.add(file);

}

} catch (IOException e) {

logger.error(e.getMessage(), e);

return null;

}

return files;

}

public static void pdf2Picture(String fileAddress, String filename, String type) {

// 将pdf装图片 并且自定义图片得格式大小

File file = new File(fileAddress + "\\" + filename + ".pdf");

try {

PDDocument doc = PDDocument.load(file);

PDFRenderer renderer = new PDFRenderer(doc);

int pageCount = doc.getNumberOfPages();

for (int i = 0; i < pageCount; i++) {

BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI

ImageIO.write(image, type,

new File(fileAddress + "\\" + filename + "_" + (i + 1) + "." + type));

}

} catch (IOException e) {

logger.error(e.getMessage(), e);

}

}

/**

* 自由确定起始页和终止页

*

* @param fileAddress 文件地址

* @param filename pdf文件名

* @param indexOfStart 开始页 开始转换的页码,从0开始

* @param indexOfEnd 结束页 停止转换的页码,-1为全部

* @param type 图片类型

*/

public static void pdf2Picture(String fileAddress, String filename, int indexOfStart, int indexOfEnd, String type) {

// 将pdf装图片 并且自定义图片得格式大小

File file = new File(fileAddress + "\\" + filename + ".pdf");

try {

PDDocument doc = PDDocument.load(file);

int numberOfPages = doc.getNumberOfPages();

PDFRenderer renderer = new PDFRenderer(doc);

int pageCount;

if (indexOfEnd == -1) {

pageCount = numberOfPages;

}

else {

pageCount = numberOfPages >= indexOfEnd ? indexOfEnd : numberOfPages;

}

for (int i = indexOfStart; i < pageCount; i++) {

BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI

// BufferedImage srcImage = resize(image, 240, 240);//产生缩略图

ImageIO.write(image, type,

new File(fileAddress + "\\" + filename + "_" + (i + 1) + "." + type));

}

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

long start = System.currentTimeMillis();

System.out.println(start);

PdfToPictureUtil.pdf2Picture("F:\\大后台需求\\测试合同", "简单一点点的", "jpg");

System.out.println(System.currentTimeMillis() - start);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以尝试使用第三方库来解决JavaPDF图片乱码问题。一个常用的库是Apache PDFBox,它提供了强大的PDF处理功能。你可以通过以下步骤来进行转换: 1. 首先,确保你已经添加了Apache PDFBox库到你的项目中。你可以从官方网站上下载最新版本的jar文件,并将其添加到你的项目的依赖中。 2. 使用PDFBox库加载PDF文件,并将其转换图片。你可以使用以下代码示例: ```java import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; public class PdfToImageConverter { public static void main(String[] args) { try { PDDocument document = PDDocument.load(new File("input.pdf")); PDFRenderer pdfRenderer = new PDFRenderer(document); for (int page = 0; page < document.getNumberOfPages(); ++page) { BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 300); ImageIO.write(bim, "PNG", new File("output" + page + ".png")); } document.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们使用PDFRenderer类将PDF文件的每一页转换为BufferedImage对象,并将其保存为PNG格式的图片。 3. 运行代码后,你将得到多个以数字命名的图片文件,表示PDF文件中的每一页。你可以根据需要对这些图片进行进一步处理或展示。 请注意,如果PDF文件中包含中文或其他非ASCII字符,你可能会遇到乱码问题。为了解决这个问题,你可以尝试使用其他的PDF处理库,比如iText或PDFBox的子项目PDFBox-Layout,它们提供了更好地支持中文字符的功能。 希望以上信息对你有帮助!如有任何疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值