对于pdf转图片linux乱码的解决

https://blog.csdn.net/atpalain_csdn/article/details/50801639

博主说的前面是可行的,不过要补充些

1、按博主的操作完成之后,必须要重启linux才行!!!,既运行命令reboot

2、如果不知道哪些字体需要,可以把所有的字体安装上去

3、博主的应该linux应该是本地物理机的,如果是阿里云服务器什么的就不用u盘,当然也用不起,直接winscp什么的工具移动字体文件就是了。

 

亲测可行

附pdf转图片代码

package com.coolsn.modules.tb.pdf2image;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;

import com.coolsn.common.weixin.common.log.Log;
/**
 * @author Think
 * 作者:yanjiaxin1996 
 * 来源:CSDN 
 * 原文:https://blog.csdn.net/yanjiaxin1996/article/details/80561071 
 * 
 * 完善:tb
 * 时间:2018-12-11
 * 
 */
public class PDF2Image {
	
	static Logger log = Logger.getLogger(PDF2Image.class);
	
	/**
	 * 转换后图片为png图片
	 * @param pdfPath pdf文件所在路径
	 * @param imageBasePath 图片保存目录路径,如果为为空则保存在于pdf相同目录,多张图片以文件名加index的形式
	 * @param indexOfStart 开始页标
	 * @param indexOfEnd 结束页标,如果结束页标大于最大页数则取最大页数,如果结束页标为0则取最大页数
	 * @return
	 */
	public static boolean pdf2png(String pdfPath,String imageBasePath,int indexOfStart,int indexOfEnd) {
		
		Log logNormal = new Log("pdf2png");
		
		logNormal.append("pdfPath is "+pdfPath);
		logNormal.append("indexOfStart is "+indexOfStart);
		logNormal.append("indexOfEnd is "+indexOfEnd);
		// 将pdf装图片 并且自定义图片得格式大小
		File file = new File(pdfPath);
		if(!file.exists()) {
			
			logNormal.append("pdf 文件不存在!!");
			log.error(logNormal.get());
			return false;
			
		}
		
		String fileName = file.getName();
		String parentPath = file.getParentFile().getAbsolutePath();
		String fileWithoutExName = fileName.substring(0, fileName.lastIndexOf("."));
		
		if(StringUtils.isNotBlank(imageBasePath)) {
			parentPath = imageBasePath;
		}

		logNormal.append("image save path is "+parentPath);
		try {
			
			PDDocument doc = PDDocument.load(file);
			PDFRenderer renderer = new PDFRenderer(doc);
			int pageCount = doc.getNumberOfPages();
			if(indexOfEnd > pageCount || indexOfEnd <= 0) {//如果自定义结束页标超出了最大页数或是小于0,已最大页数为准
				indexOfEnd = pageCount;
			}
			for (int i = indexOfStart; i < indexOfEnd; i++) {
				BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI
				// BufferedImage srcImage = resize(image, 240, 240);//产生缩略图
				File imageFile = new File(parentPath+"/"+fileWithoutExName+"_"+(i+1)+".png");
				if(!imageFile.exists()) {//节约io,当目标未见不存在时才转换
					ImageIO.write(image, "PNG",imageFile );
				}
			}
			log.info(logNormal.get());
			return true;
			
		} catch (IOException e) {
			
			logNormal.append("转换出错");
			log.error(logNormal.get());
			e.printStackTrace();
			return false;
			
		}
	}
	
	public static void main(String[] args) {
		
		
		pdf2png("D:\\installpackage\\系统\\0_88344489_051001600111.pdf",null,0,0);
		
	}

pom文件添加

        
            org.apache.pdfbox
            fontbox
            2.0.9
        

        
        
            org.apache.pdfbox
            pdfbox
            2.0.9
        

其中的logNormal是自己的封装类,可以删了就好

你可能感兴趣的:(java)