PDF转图片pdf转换图片,线程池

这篇具有很好参考价值的文章主要介绍了PDF转图片pdf转换图片,线程池。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

package com.xhsoft.thread;

import com.xhsoft.common.props.TeOssProperties;
import com.xhsoft.common.utils.MergeImageUtil;
import com.xhsoft.flange.entity.DrawingInfo;
import com.xhsoft.flange.service.IDrawingInfoService;
import com.xhsoft.modules.resource.builder.oss.OssBuilder;
import lombok.extern.slf4j.Slf4j;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.springblade.core.oss.model.BladeFile;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@Slf4j
public class ConvertDrawingToPicture implements Runnable {

	private DrawingInfo drawing;
	private IDrawingInfoService drawingInfoService;
	private File file;
	private OssBuilder ossBuilder;
	private TeOssProperties teOssProperties;

	public ConvertDrawingToPicture(DrawingInfo drawing, File file, IDrawingInfoService drawingInfoService, OssBuilder ossBuilder, TeOssProperties teOssProperties){
		this.drawing = drawing;
		this.drawingInfoService = drawingInfoService;
		this.file = file;
		this.ossBuilder = ossBuilder;
		this.teOssProperties = teOssProperties;
	}

	@Override
	public void run() {
		String fileName = file.getName();
		String name = fileName.substring(0, fileName.lastIndexOf("."));
		log.info("{}-正在生成图片", fileName);

		FileInputStream fis = null;
		try {
			PDDocument doc = Loader.loadPDF(file);
			PDFRenderer renderer = new PDFRenderer(doc);
			int pageCount = doc.getNumberOfPages();

			List<BufferedImage> images = new ArrayList<>();
			for(int i=0;i<pageCount;i++){
				BufferedImage image = renderer.renderImageWithDPI(i, 296);
//				BufferedImage image = renderer.renderImage(i, 2.5f);
//				ImageIO.write(image, "PNG", new File(name+"-"+i+".png"));
				images.add(image);
			}

			log.info("{}-正在整合图片", fileName);
			File dir = file.getParentFile();
			File pic = new File(dir, name+".png");
			MergeImageUtil.mergeImage(images, pic);

			log.info("{}-正在上传图片", fileName);
			fis = new FileInputStream(pic);
			BladeFile bladeFile = ossBuilder.template(teOssProperties.getPic()).putFile(pic.getName(), fis);

			log.info("{}-正在保存图片地址", fileName);
			String picUrl = bladeFile.getLink();
			drawing.setPic(picUrl);
			drawingInfoService.updateById(drawing);
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(fis != null) try{ fis.close(); }catch(Exception e){};
		}

	}

	public static void main(String[] args){
//		try {
//			PDDocument doc = Loader.loadPDF(new File("files/drawing/HTP-ER-46-01-02-LO-01_ISO DRGS.pdf"));
//			PDFRenderer renderer = new PDFRenderer(doc);
//			int pageCount = doc.getNumberOfPages();
//			for(int i=0;i<pageCount;i++){
//				BufferedImage image = renderer.renderImageWithDPI(i, 296);
				BufferedImage image = renderer.renderImage(i, 2.5f);
//				ImageIO.write(image, "PNG", new File("files/pricture/"+i+".png"));
//			}
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
	}

}

然后用的时候:文章来源地址https://www.toymoban.com/news/detail-511605.html

	/**
	 *  替换图纸文件
	 */
	@PostMapping("/replace")
	@ApiOperationSupport(order = 13)
	@ApiOperation(value = "替换图纸", notes = "图纸文件")
	public R replaceFile(MultipartFile file, Long id) {
		String fileName = file.getOriginalFilename();

		DrawingInfo drawing = drawingInfoService.getById(id);
		if(drawing == null){
			log.error("图纸数据不存在,id={}", id);
			return R.fail(StatusEnum.DRAWING_FILE_NOT_EXIST.getCode());
		}

		Long projectId = drawing.getProjectId();
		//验证是否已存在该图纸
		DrawingInfoTO condition = new DrawingInfoTO();
		condition.setProjectId(projectId);
		condition.setName(fileName);
		condition.setIsDeleted(0);
		List<DrawingInfo> drawings = drawingInfoService.list(Condition.getQueryWrapper(condition));
		if (drawings.size() > 0) {
			log.error(fileName + "图纸已存在");
			return R.fail(fileName + StatusEnum.DRAWING_EXIST.getCode());
		}

		String fileUrl = null;
		String date = CommonUtil.SDF_DATE.format(new Date());
		Path dest = Paths.get(pathProperties.getDrawing(),  date, fileName);
		//保存文件在本地
		try {
			if(!dest.toFile().exists()){
				Files.createDirectories(dest);
			}
			Files.copy(file.getInputStream(), dest, StandardCopyOption.REPLACE_EXISTING);
		} catch (IOException e) {
			log.error("上传文件异常,"+e.getMessage());
			return R.fail(fileName + ":"+StatusEnum.SAVE_FILE_EXCEPTION.getCode());
		}
		File pdfFile = dest.toFile();
		FileInputStream fis = null;
		try{
			fis = new FileInputStream(pdfFile);
		}catch(Exception e){
			e.printStackTrace();
		}

		try{
			BladeFile bladeFile = ossBuilder.template(teOssProperties.getPdf()).putFile(fileName, fis);
			fileUrl = bladeFile.getLink();
		}catch(Exception e){
			log.error("上传图纸文件异常,异常信息:{}", e.getMessage());
			e.printStackTrace();
			return R.fail(StatusEnum.UPLOAD_DRAWING_FILE_EXCEPTION.getCode());
		}
		DrawingInfoTO di = new DrawingInfoTO();
		di.setId(drawing.getId());
//		di.setCode(fileName);
//		di.setName(fileName);
		di.setUrl(fileUrl);
		di.setPdfFile(pdfFile);
		drawingInfoService.updateById(di);

		String url = drawing.getUrl();
		if(StringUtil.isNotBlank(url)){
			String pdfName = url.substring(url.lastIndexOf('/')+1);
			ossBuilder.template(teOssProperties.getPdf()).removeFile(pdfName);
		}

		String pic = drawing.getPic();
		if(StringUtil.isNotBlank(pic)){
			String picNme = pic.substring(pic.lastIndexOf('/')+1);
			ossBuilder.template(teOssProperties.getPic()).removeFile(picNme);
		}

		ExecutorService fixedPool = Executors.newFixedThreadPool(1);
		ConvertDrawingToPicture convert = new ConvertDrawingToPicture(
			di,
			di.getPdfFile(),
			drawingInfoService,
			ossBuilder,
			teOssProperties
		);
		fixedPool.execute(convert);
		fixedPool.shutdown();

		logTool.insert(drawing.getProjectId(), SysEnum.FLANGE, ModuleEnum.DRAWING,
			"替换: 图纸id="+id+",新图纸文件="+fileName );

		return R.success(StatusEnum.REPLACE_DRAWING_FILE_SUCCESS.getCode());
	}




}

到了这里,关于PDF转图片pdf转换图片,线程池的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 怎么把pdf转换成高清图片?

        怎么把pdf转换成高清图片?最近,我的同事遇到了一个问题,现在她需要将一些pdf文件转换成高清的图片,这件事情让让她感到非常无助,因为她非常着急需要将这些文件转换为图片格式,以便更好的在今后的工作中进行使用。她曾经尝试了很多工具和方法,也找看其它

    2024年02月10日
    浏览(30)
  • 怎么把pdf图片转换成jpg?pdf转jpg的方法分享

    pdf文件在我们的日常工作中非常的常见,因为这种文件安全性高,不会轻易的乱码,所以受到了我们的欢迎,但是它不容易被编辑,而且占用内存会比较大,所以我们需要将pdf文件进行转换,接下来小编会为大家解答怎么把pdf图片转换成jpg的问题,一起来看看吧。 怎么把pd

    2024年02月11日
    浏览(38)
  • c#,将pdf文件转换成图片文件

    本文采用Adobe Acrobat9.0的COM组件,将Pdf文件的每一页转换成对应的图片文件。 开发环境:VS2010,.Net Framework4.0,Adobe Acrobat9.0。 工程中添加COM引用:Adobe Acrobat 9.0 Type Library(必须装了Adobe Acrobat9.0才会有)。 思路: 1)CAcroPDDoc:Acrobat文档对象。 2)CAcroPDPage:页对象。 3)CAcroR

    2024年02月04日
    浏览(32)
  • 【工具分享】批量多目录图片如何转换PDF,一次性转换多级目录批量的PDF的转换,合并,输出另存等问题

     在工作中我们经常要对图片进行批量转换PDF,由于文件量比较多,目录比较深,工作量比较大比较耗时费力,今天我们分享的主要解决以下问题: 1、单张图片的转换PDF:一张图临时转一下 2、多张图片转换成PDF:多张图单独转成PDF 3、多级目录多张图转换成PDF:多级目录多

    2024年02月10日
    浏览(32)
  • 图片转换成pdf格式?这几种转换格式方法了解一下

    图片转换成pdf格式?将图片转换成PDF格式的好处有很多。首先,PDF格式具有通用性,可以在几乎任何设备上查看。其次,PDF格式可以更好地保护文件,防止被篡改或者复制。此外,PDF格式还可以更好地压缩文件大小,使其更易于共享和传输。因此,将图片转换成PDF格式是一个

    2024年02月12日
    浏览(24)
  • Python PDF转换为图片的解决方案

      大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作

    2024年02月03日
    浏览(44)
  • pdf怎么转换成jpg图片?这几个转换方法了解一下

    pdf怎么转换成jpg图片?转换PDF文件为JPG图片格式在现代工作中是非常常见的需求,比如将PDF文件中的图表、表格或者图片转换为JPG格式后使用在PPT演示、网页设计等场景中。   【 迅捷PDF转换器 】 是一款非常实用的工具,可以将PDF文件转换成多种不同的文件格式,包括JPG图片

    2024年02月13日
    浏览(31)
  • 脚本:PDF文件批量转换成图片(python3)

    语言:python 3 用法:选择PDF文件所在的目录,点击 确定 后,自动将该目录下的所有PDF转换成单个图片,图片名称为: pdf文件名.page_序号.jpg 如运行中报错,需要 自行根据报错内容安装缺失的库 例如: 提供两种源码 第一种是在代码中手动添加pdf所在目录 第二种是点击运行后

    2024年02月11日
    浏览(40)
  • PDF-Word-图片等的互相转换

    轻闪PDF客户端 - 功能强大的一站式PDF工具 | PDF编辑、转换、阅读 上面页面支持PDF转换成各类别:鼠标停留在PDF工具,点击转换类型即可在线转换 求职岗位的删除:PDF转word,将手机号码依次向前面删除替换掉求职岗位,手机号码后面就可以正确添加空格,到对应位置将联系地

    2024年02月07日
    浏览(30)
  • python小脚本——批量将PDF文件转换成图片

    语言:python 3 用法:选择PDF文件所在的目录,点击 确定 后,自动将 该目录下的所有PDF 转换成单个图片,图片名称为:   pdf文件名.page_序号.jpg 如运行中报错,需要自行根据报错内容按照缺失的库 例如: 这里提供两种源码,第一种是在代码中手动添加pdf所在目录 第二种是点

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包