zoukankan      html  css  js  c++  java
  • 使用magick.net将pdf转换为图片

    现在手上有个需求是要将pdf转换为一页一页的image.最开始找到的是pdfbox来处理pdf的.在pdfbox.apache.org的官网首页写了一句'convert you pdfs to image files'.所以最开始就使用pdfbox来作为转换库.但是在后面却发现出现了一个问题.由于暂时解决不了,发现了magick这个东西.可以用来处理100多种图片格式,并且提供了各种语言的api.

    下载magick.net

    ImageMagick http://www.imagemagick.org/

    .net上官网提供了两个类库 magick.netimagemagickapp.我选择了magick.net这个库.下载地址

    http://magick.codeplex.com/releases/view/137513
    下载 Magick.NET-7.0.0.0007-Q16-AnyCPU-net40-client.zip

    其中下载的时候最好选择AnyCPU的库,在vs编译的时候不需要考虑平台性的问题.Q8 Q16 q16-HDRI分别表示8位 16位和32位的.可以根据需要选择不同版本的库.

    下载安装ghostscript

    根据自己的需要在ghostscript.com选择下载32位或64位的库.下载地址如下:

    http://ghostscript.com/download/gsdnld.html

    如果不安装ghostscript,magick.net在执行Read函数读取pdf时会报如下错误.

    iisexpress.exe: FailedToExecuteCommand `"gswin32c.exe" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pngalpha" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 "-r300x300" "-sOutputFile=C:/Users/ZHANGW~1/AppData/Local/Temp/magick-10612rmwPHf2ITKBB%d" "-fC:/Users/ZHANGW~1/AppData/Local/Temp/magick-10612_fb2bvFOsIGG" "-fC:/Users/ZHANGW~1/AppData/Local/Temp/magick-10612Pg1c2Td4S-bk"' (ϵͳ�Ҳ���ָ�����ļ��� ) @ error/delegate.c/ExternalDelegateCommand/459
    

    生成image

    在工程中引用Magick.net.当然也可以使用nuget来引入.转换代码如下,filepath为pdf的路径.

    MagickReadSettings settings = new MagickReadSettings();
    
    settings.Density = new MagickGeometry(72, 72); //设置格式
    
    using (MagickImageCollection images = new MagickImageCollection())
    {
        images.Read(filepath, settings);
        
        int pageCount = images.Count();
       
        for (int i = 0; i < page;i++ )
        {
            MagickImage image = images[i];
            image.Format = MagickFormat.Jpeg;
    
            string path = string.Format("{0}/{1}.jpg", dir, i);//相对路径   
    
            string filename = "d:/img/" + path;
    
            image.Write(filename);
             
        }
     
    }
     
    

    这里转换就完成了.

    IKVM和pdfbox生成的问题

    最开始我是使用pdfbox来生成的.代码如下:

    PDDocument doc = PDDocument.load(this._path);
    
    int page= doc.getDocumentCatalog().getAllPages().size();//获取总的页数
     
    for (int i = 0; i < page; i++)
    {
        PDPage pdfPage = allpages.get(i) as PDPage;
     
        java.awt.image.BufferedImage image = pdfPage.convertToImage();
    
        string path = string.Format("{0}/{1}.jpg", dir, i);//相对路径   
    
        string filename ="d:img" + path;
    
        ImageIO.write(image, "jpg", new java.io.File(filename));
     
    }
    

    运行的时候在下面这行代码中出错了.

    java.awt.image.BufferedImage image = pdfPage.convertToImage();

    原因是IKVM.GNU.Classpath对awt和Swing实现不完整.导致了错误.当然如果不需要使用awt和Swing的库.使用.net来调用java库IKVM还是能够解决一些问题的.

    其他

    PDFsharp http://pdfsharp.net/wiki/PDFsharpFAQ.ashx

    itextsharp http://itextsharp.sourceforge.net/

    ImageMagick http://www.imagemagick.org/
    http://magick.codeplex.com/
    http://magick.codeplex.com/releases/view/137513

    imageMagick 的另一个.net api实现 http://sourceforge.net/projects/imagemagickapp/

  • 相关阅读:
    es6 类
    set/ weakset/ map/ weakmap
    async/await
    生成函数
    数组的操作
    解决异步(重点promise函数)
    迭代器
    遍历
    symbol 数据类型
    es6.代理 proxy
  • 原文地址:https://www.cnblogs.com/ac1985482/p/4129042.html
Copyright © 2011-2022 走看看