linux中pdf转png

2018-05-21 18:56:11 datouniao1 阅读数 3699

首先需要引入两个jar pdfbox.jar,fontbox.jar,并且使用jar的时候尽量使用高版本的。大家可以从这个路径来下载到这两个jar

https://download.csdn.net/download/datouniao1/10427502

下载了之后将这两个导入到我们的项目工程,下面就是我们的代码的处理的工作了,将pdf转换为图片:

/*
	 * *
	 * 实现pdf文件转换为png
	 * 参数是第一个是要转的转换的是pdffile
	 * 第二个参数是是要存储的png图片的路径
	 */
	public static void pdfFileToImage(File pdffile,String targetPath){
        try {
            FileInputStream instream = new FileInputStream(pdffile);
            InputStream byteInputStream=null;
            try {
                PDDocument doc = PDDocument.load(instream);
                PDFRenderer renderer = new PDFRenderer(doc);
                int pageCount = doc.getNumberOfPages();
                if (pageCount > 0) {
                    BufferedImage image = renderer.renderImage(0, 2.0f);
                    image.flush();
                    ByteArrayOutputStream bs = new ByteArrayOutputStream();
                    ImageOutputStream imOut;
                    imOut = ImageIO.createImageOutputStream(bs);
                    ImageIO.write(image, "png", imOut);
                    byteInputStream = new ByteArrayInputStream(bs.toByteArray());
                    byteInputStream.close();
                }
            }
            catch (IOException e) {
                e.printStackTrace();
            }
            File uploadFile = new File(targetPath);
            FileOutputStream fops;
            fops = new FileOutputStream(uploadFile);
            fops.write(readInputStream(byteInputStream));
            fops.flush();
            fops.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
	}
	
    public static byte[] readInputStream(InputStream inStream) throws Exception {
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = inStream.read(buffer)) != -1) {
            outStream.write(buffer, 0, len);
        }
        inStream.close();
        return outStream.toByteArray();
    }

	public static void main(String[] args) {
		File file =new File("D:\\08\\ceshi.pdf");
		//上传的是png格式的图片结尾
		String targetfile="D:\\08\\wdg3.png";
		pdfFileToImage(file,targetfile);
	}

上面就可以将pdf文件转换为png图片了

到这个地方我就不多说了,希望对你有所帮助


2018-08-23 13:39:59 rs_hao 阅读数 2443

最近有需要将PDF文件转成图片格式来使用,自学了一下,在这里记录备忘。

用到的工具就是ImageMagick
linux下的安装命令:(我的系统版本是Fedora28

# sudo dnf install ImageMagick

安装好之后通过查看版本号 convert -version 检查一下是否成功

[###@localhost]$ convert -version
Version: ImageMagick 6.9.9-38 Q16 x86_64 2018-03-12 http://www.imagemagick.org
Copyright: © 1999-2018 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php

安装成功,就可以把PDF转成图片格式。(这里的文件命可以是绝对路径)

# convert -resize xxx.pdf img_name.jpg

然后就会生成 img_name-0.jpg, img_name-1.jpg等,图片的数量是和pdf页数一致的。(这里我用的是 jpg格式 当然你可以选择其它格式)

如果你只需要转换pdf文件中其中一页或者几页:

# convert xxx.pdf[0] img_name.jpg

类似于索引操作,0就表示第一页,依次类推。

还可以指定图片的参数:

# convert -resize 1800x -density 150 -quality 100 xxx.pdf img_name.jpg

-resize 1800x 指定生成的像素大小,越大生成的图片越大,转化的时间越久
-density 150 参数指定密度,具体含义再查
-quality 100 指定生成图片的质量

ImageMagick 的基本使用就是这样了,想学习更多可以去官网查资料.

补充一下:

convert 命令直接把pdf 转换为图片,是依赖的 ghostscript 库, ghostscript 是可以单独进行图片转换,而 convert 在安装ghostscript 之前,只能进行单独的图片处理,不能直接转换 pdf 为图片。

ghostscript 可以直接安装, fedora28下的包名:

# ghostscript.x86_64 : Interpreter for PostScript language & PDF

安装命令:

# sudo dnf install ghostscript


参考自以下文章:

linux PDF转图片
转换pdf 为 png

2018-04-02 13:25:31 qcyfred 阅读数 473

网页转图片、pdf

链接:cutycapt主页

 

之前在windows下用cutycapt,要不是字体有问题,要不就是不能出图,要不就是清晰度不够。

据说Linux下的cutycapt比较好用,但是centos比较纯净,安装起来很麻烦。我就装的是Ubuntu。

 

环境Ubuntu 16.0.4 LTS 64位

安装

sudo apt-get install cutycapt

sudo apt-get install xvfb

使用

cutycapt --url=https://www.baidu.com --out=baidu.html --delay=5000 --zoom-factor=3

此外,还有各种参数。

注意:有条件的情况下,安装东西的时候最好能翻个墙。不然真的太慢了!!!

Usage

Open a command prompt and ask for help:

 % CutyCapt --help
 -----------------------------------------------------------------------------
 Usage: CutyCapt --url=http://www.example.org/ --out=localfile.png            
 -----------------------------------------------------------------------------
  --help                         Print this help page and exit                
  --url=<url>                    The URL to capture (http:...|file:...|...)   
  --out=<path>                   The target file (.png|pdf|ps|svg|jpeg|...)   
  --out-format=<f>               Like extension in --out, overrides heuristic 
  --min-width=<int>              Minimal width for the image (default: 800)   
  --min-height=<int>             Minimal height for the image (default: 600)  
  --max-wait=<ms>                Don't wait more than (default: 90000, inf: 0)
  --delay=<ms>                   After successful load, wait (default: 0)     
  --user-style-path=<path>       Location of user style sheet file, if any    
  --user-style-string=<css>      User style rules specified as text           
  --header=<name>:<value>        request header; repeatable; some can't be set
  --method=<get|post|put>        Specifies the request method (default: get)  
  --body-string=<string>         Unencoded request body (default: none)       
  --body-base64=<base64>         Base64-encoded request body (default: none)  
  --app-name=<name>              appName used in User-Agent; default is none  
  --app-version=<version>        appVers used in User-Agent; default is none  
  --user-agent=<string>          Override the User-Agent header Qt would set  
  --javascript=<on|off>          JavaScript execution (default: on)           
  --java=<on|off>                Java execution (default: unknown)            
  --plugins=<on|off>             Plugin execution (default: unknown)          
  --private-browsing=<on|off>    Private browsing (default: unknown)          
  --auto-load-images=<on|off>    Automatic image loading (default: on)        
  --js-can-open-windows=<on|off> Script can open windows? (default: unknown)  
  --js-can-access-clipboard=<on|off> Script clipboard privs (default: unknown)
  --print-backgrounds=<on|off>   Backgrounds in PDF/PS output (default: off)  
  --zoom-factor=<float>          Page zoom factor (default: no zooming)       
  --zoom-text-only=<on|off>      Whether to zoom only the text (default: off) 
  --http-proxy=<url>             Address for HTTP proxy server (default: none)
 -----------------------------------------------------------------------------
  <f> is svg,ps,pdf,itext,html,rtree,png,jpeg,mng,tiff,gif,bmp,ppm,xbm,xpm    
 -----------------------------------------------------------------------------
 http://cutycapt.sf.net - (c) 2003-2013 Bjoern Hoehrmann - bjoern@hoehrmann.de

 

中文乱码(我还没遇到乱码。不过因为没有微软雅黑,页面上所有微软雅黑字体都变成了丑陋的宋体)

本段内容摘自CSDN

切换到ubuntu下,我们可以在/usr/share/fonts下创建一个文件夹,用于放置这个字体文件

cd /usr/share/fonts
sudo mkdire winfonts


之后将该字体文件(Windows,C:/windows/fonts)拷贝到winfonts中,改变字体文件的访问权限,在winfonts文件夹下执行
sudo chmod 744 *


然后根据字体文件生成核心字体信息
sudo mkfontscale
sudo mkfontdir
sudo fc-cache -fv

如果出现 mkfontscale command not found , 执行
apt install xfonts-utils
 

 

安装报错

Package has no installation candidate问题,如:

# apt-get install <packagename>
Reading package lists... Done
Building dependency tree... Done
Package aptitude is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package <packagename> has no installation candidate

 

解决方法

# apt-get update
# apt-get upgrade
# apt-get install <packagename>

(升级后安装)

 

查看本地IP:ifconfig -a

--

后记

我是真的没有用过Linux,从命令行,到Vim,每一个都要命。

今天去网上下了个Ubuntu 16 64位,装在了虚拟机上,准备学一把了。

2015-01-13 16:05:04 catoop 阅读数 8816

在项目开发中经常会有将“word转换为pdf”、“将word转换为图片”、将“pdf转换为图片” 的需求。

针对如上需求,写一下自己在这方面的实现:

1、word转换为pdf ,前面有文章已经写过,参考地址: http://blog.csdn.net/catoop/article/details/42527349

2、word转换为图片,实现思路为 word——>pdf——>png   第一步转换参考前面写过的文章

3、pdf转换为图片,我们实现思路 pdf——>png


本文重点说一下 pdf 到 png 的转换:

首先我们要做如下准备:

1、GhostScript 安装

2、ImageMagick 安装


下面做一下分解:

一、GhostScript 安装和测试

我们先下载安装 GhostScript,官网地址:http://ghostscript.com/download/gsdnld.html(我已经下载过一个免安装版本,官方9.15版本 http://download.csdn.net/detail/catoop/8363115),这个建议大家使用官方最新版本。

(这里下载可以直接运行的版本 ghostscript-9.15-linux-x86_64.tgz ,下载解压后,直接复制到 /usr/bin 目录下,命名为gs 即可,如果/usr/bin目录下已经存在该文件,记得备份之前的文件后再拷贝过去)

安装成功后,输入命令 gs -version 如果有如下输出,说明安装成功,打印的是版本。

GPL Ghostscript 9.15 (2014-09-22)
Copyright (C) 2014 Artifex Software, Inc.  All rights reserved.

然后用如下命令转换输出一个pdf测试,命令:

gs -dNOSAFER -r300 -dBATCH -sDEVICE=pngalpha -dNOPAUSE -dEPSCrop -sOutputFile=testfilepng/%d.png testfile.pdf

执行命令后,会有如下输出,其中Page为转换的页码,其他输出是因为一些字体问题而出现的数据,只要能输出到最后一页中间不中断,就说明文件解析转换成功,下面是我转换的一个文件的输出内容:

GPL Ghostscript 9.15 (2014-09-22)
Copyright (C) 2014 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 38.
Page 1
Page 2
Page 3
Substituting font Helvetica for ArialMT.
Loading NimbusSanL-Regu font from %rom%Resource/Font/NimbusSanL-Regu... 5956124 4561384 9518216 8029777 3 done.
Substituting font Helvetica-Bold for Arial-BoldMT.
Loading NimbusSanL-Bold font from %rom%Resource/Font/NimbusSanL-Bold... 6013452 4628661 10043208 8183225 3 done.
Page 4
Page 5
Page 6
至此,GhostScript 的安装和测试已经成功。

PS:关于 gs 命令的很多参数,需要的对照官网进行研究吧。很强大的。
 

二、ImageMagick 安装

下载安装 ImageMagick,官网下载地址:http://www.imagemagick.org/script/download.php ,其中有很多连接,找一个能下载的下载安装(都是国外网站,需要的就拨一下VPN吧)

安装成功后,使用命令 convert -version 查看ImageMagick 版本号,验证是否安装成功,如下:

[root@localhost ghostscript-9.15-linux-x86_64]# convert -version
Version: ImageMagick 6.5.4-7 2012-04-10 Q16 OpenMP http://www.imagemagick.org
Copyright: Copyright (C) 1999-2009 ImageMagick Studio LLC

执行命令,进行pdf转换测试:

convert /opt/shanhy/testfile.pdf /opt/shanhy/testpdfpng/%d.$pic

至此,ImageMagick 安装和测试完成。


有的朋友可能会问,上面我们使用 ghostscript 已经可以转换文件图片,为什么还要安装ImageMagick呢?

这里解释一下:ImageMagick 的 convert 命令重点和强大之处是图片的处理能力,很多时候,我们需要直接对pdf转换出来的图片进行处理。这种情况下,使用 convert 命令会满足我们很多需求,关于 convert 命令的很多参数,大家查看关于 ImageMagick 的资料了解,这里也不做赘述。

另外说一下:convert 命令直接把pdf 转换为图片,是依赖的 ghostscript 库,所以 ghostscript 可以单独进行图片转换,而 convert 在安装ghostscript 之前,只能进行单独的图片处理,不能直接转换 pdf 为图片。


最后跟大家提一下,在我们的业务应用实现中,建议大家讲文件转换的命令写到shell 脚本中,使用程序调用脚本。虽然也可以通过代码调用 api 实现,不过我觉得还是使用系统的shell 处理,效率会高一些。


谢谢!










pdf转png

2018-10-12 13:56:43 SanBaDao 阅读数 1721

    pdf转png,可以用php的一个扩展imagick,我使用过程中,老是导致cpu占100%,所以,我又尝试开发了另一种方法,就是有Ghostscript,这种方法也能实现pdf转图片,并可以设置图片类型为png等。下面着重介绍这种方法:

在windows上实现如下:

Pdf2PngforWindows

这是一个nodejs库,运行环境是Windows,如果你想运行在Linux上,
请参考:https://github.com/sanpangzi/Pdf2PngforLinux
本库在windows下,可以把一个多页的pdf转成多个png图片

怎么使用这个库?

  1. 首先下载到本地任意文件夹,使用之前,确保已安装npm,nodejs
  2. 进入下载后的文件夹,比如:D:\appweb\pdftopngforWindows
    进入之后,运行: npm install
    这个命令,会安装所需的两个模块tmp及filesource
  3. 安装完以上两个模块,就可以运行测试了,测试命令如下:
    node convert.js
    不出意外的话,你会看到test文件夹下,有4张图片,分别是1.png 2.png 3.png 4.png

说明

本代码是借助Ghostscript实现的,这个Ghostscript可以像本文一样,直接放入文件夹内,也可以删除本文的executables文件夹,
自己安装Ghostscript,设置环境变量,在path里加入你的安装路径,如果你安装的是64位的Ghostscript,
要把D:\appweb\pdftopngforWindows\lib\pdf2png.js里的gs改为gswin64;
之后,把D:\appweb\pdftopngforWindows\lib\pdfPageCount.js里的gs改为gswin64

在Linux上实现如下:

Pdf2PngforLinux

这是一个nodejs库,运行环境是linux,如果你想运行在windows上,
请参考:https://github.com/sanpangzi/Pdf2PngforWindows
本库在Linux下,可以把一个多页的pdf转成多页png图片

怎么使用这个库?

  1. 首先下载到本地任意文件夹,使用之前,确保已安装npm,nodejs
  2. 进入下载后的文件夹,比如:/usr/local/pdftopngforLinux
    进入之后,运行: npm install
    这个命令,会安装所需的两个模块tmp及filesource
  3. 本代码是借助Ghostscript实现的,这个Ghostscript需要预先安装,安装方法如下:
    sudo apt-get update
    sudo apt-get install ghostscript
  4. 安装完以上两个模块,就可以运行测试了,测试命令如下:
    node convert.js
    不出意外的话,你会看到test文件夹下,有4张图片,分别是1.png 2.png 3.png 4.png

 

linux PDF转图片

阅读数 5620