• pdf 提取图片


    
    
    pdf 提取图片 ,提取的图片不是背景子图片。相当于把每一页pdf转换成图片


    一共两种方法,

    第一种提取速度较快 一秒几张。但是会丢失画质

    第二种提取速度慢,两秒一张,但是不会丢失画质


    ------------------------------------------------------------------------

    先说第一种


    线上jar包



      <dependency> <groupId>org.apache.pdfbox</groupId>
      <artifactId>pdfbox</artifactId> <version>2.0.8</version> </dependency>
      
      <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox-tools -->
      <dependency> <groupId>org.apache.pdfbox</groupId>
      <artifactId>pdfbox-tools</artifactId> <version>2.0.8</version> </dependency>
      
      




    /**
    	 * 获得pdf的图片
    	 * 
    	 * @param pdfFilePath
    	 *            如 C:\Users\TOSHIBA\Desktop\Helloworld.pdf
    	 * @param imaDir
    	 *            如 C:\Users\TOSHIBA\Desktop\
    	 */
    	public static void PDF2ImagByPdfBox(String pdfFilePath, String imaDir) {
    		if (!pdfFilePath.endsWith("pdf") && !pdfFilePath.endsWith("PDF")) {
    			throw new RuntimeException("不是pdf文件");
    		}
    
    		File pdfFile = new File(pdfFilePath);
    		if (!pdfFile.exists()) {
    			throw new RuntimeException("pdf文件不存在");
    		}
    
    		if (imaDir.charAt(imaDir.length() - 1) != '\') {
    			imaDir += "\";
    		}
    
    		PDDocument pdf = null;
    		try {
    			pdf = PDDocument.load(new File(pdfFilePath));
    			PDFRenderer pdfRenderer = new PDFRenderer(pdf);
    			PDPageTree pageTree = pdf.getPages();
    			int pageCounter = 0;
    			for (PDPage page : pageTree) {
    				float width = page.getCropBox().getWidth();
    				float scale = 1.0f;
    				if (width > 720) {
    					scale = 720 / width;
    				}
    				BufferedImage bim = pdfRenderer.renderImage(pageCounter, scale,
    						ImageType.RGB);
    				ImageIOUtil.writeImage(bim, imaDir + (pageCounter++) + ".png",
    						300);
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}


    -------------------------------------------------------------------------------------------------------------------------------




    第二种

    <dependency>
     <groupId>org.apache.pdfbox</groupId>
     <artifactId>pdfbox-app</artifactId>
     <version>2.0.2</version>
     </dependency>



    /**
    	 * @param pdfFilePath
    	 *            如 C:\Users\TOSHIBA\Desktop\Helloworld.pdf
    	 * @param imaDir
    	 *            如 C:\Users\TOSHIBA\Desktop\
    	 */
    	public static void PDF2ImagByPdfBox(String pdfFilePath, String imaDir) {
    
    		File file = new File(pdfFilePath);
    		if (!pdfFilePath.endsWith("pdf") && !pdfFilePath.endsWith("PDF")) {
    			throw new RuntimeException("不是pdf文件");
    		}
    
    		if (imaDir.charAt(imaDir.length() - 1) != '\') {
    			imaDir += "\";
    		}
    		PDDocument doc=null;
    		try {
    			 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, 296);
    				ImageIO.write(image, "PNG", new File(imaDir + i + ".png"));
    				System.out.println("转换页数" + i+ "----- "+ "总共页数"+ pageCount);
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		}finally{
    			try {
    				if(null!=doc){
    					doc.close();
    				}
    			} catch (Exception e2) {
    				e2.printStackTrace();
    			}
    		}
    
    	}










     
     


  • 相关阅读:
    postman(十一):添加cookie
    基于百度通用翻译API的一个翻译小工具
    python之做一个简易的翻译器(二)
    python之做一个简易的翻译器(一)
    如何查看linux服务器内存使用情况
    linux下查看进程id时用到的命令
    python日志模块的使用
    (二十九)c#Winform自定义控件-文本框(二)-HZHControls
    (二十八)c#Winform自定义控件-文本框(一)-HZHControls
    (二十七)c#Winform自定义控件-多输入窗体-HZHControls
  • 原文地址:https://www.cnblogs.com/fangyuandoit/p/13713904.html
Copyright © 2020-2023  润新知