使用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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM