如今手上有個需求是要將pdf轉換爲一頁一頁的image.最開始找到的是pdfbox來處理pdf的.在pdfbox.apache.org的官網首頁寫了一句'convert you pdfs to image files'.因此最開始就使用pdfbox來做爲轉換庫.可是在後面卻發現出現了一個問題.因爲暫時解決不了,發現了magick
這個東西.能夠用來處理100多種圖片格式,而且提供了各類語言的api.html
ImageMagick http://www.imagemagick.org/java
.net上官網提供了兩個類庫 magick.net
和imagemagickapp
.我選擇了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.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
在工程中引用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
最開始我是使用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/