使用magick.net將pdf轉換爲圖片

如今手上有個需求是要將pdf轉換爲一頁一頁的image.最開始找到的是pdfbox來處理pdf的.在pdfbox.apache.org的官網首頁寫了一句'convert you pdfs to image files'.因此最開始就使用pdfbox來做爲轉換庫.可是在後面卻發現出現了一個問題.因爲暫時解決不了,發現了magick這個東西.能夠用來處理100多種圖片格式,而且提供了各類語言的api.html

下載magick.net

ImageMagick http://www.imagemagick.org/java

.net上官網提供了兩個類庫 magick.netimagemagickapp.我選擇了magick.net這個庫.下載地址express

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

其中下載的時候最好選擇AnyCPU的庫,在vs編譯的時候不須要考慮平臺性的問題.Q8 Q16 q16-HDRI分別表示8位 16位和32位的.能夠根據須要選擇不一樣版本的庫.api

下載安裝ghostscript

根據本身的須要在ghostscript.com選擇下載32位或64位的庫.下載地址以下:app

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

若是不安裝ghostscript,magick.net在執行Read函數讀取pdf時會報以下錯誤.this

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的路徑.spa

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);
         
    }
 
}

這裏轉換就完成了..net

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/

相關文章
相關標籤/搜索