C#将PDF逐页转成图片

先添加一个处理CS类

using System.IO;using iTextSharp.text.pdf;using System;using iTextSharp.text;using System.Runtime.InteropServices;using System.Collections;using System.Drawing.Imaging;namespace Aspose.Words{public class PDF{public class ToPics{#region GhostScript Import///
Create a new instance of Ghostscript. This instance is passed to most other gsapi functions. The caller_handle will be provided to callback functions.///At this stage, Ghostscript supports only one instance. /// ///
/// [DllImport("gsdll32.dll", EntryPoint = "gsapi_new_instance")]private static extern int gsapi_new_instance(out IntPtr pinstance, IntPtr caller_handle);///
This is the important function that will perform the conversion/// ///
///
/// [DllImport("gsdll32.dll", EntryPoint = "gsapi_init_with_args")]private static extern int gsapi_init_with_args(IntPtr instance, int argc, IntPtr argv);///
/// Exit the interpreter. This must be called on shutdown if gsapi_init_with_args() has been called, and just before gsapi_delete_instance().////// /// [DllImport("gsdll32.dll", EntryPoint = "gsapi_exit")]private static extern int gsapi_exit(IntPtr instance);///
/// Destroy an instance of Ghostscript. Before you call this, Ghostscript must have finished. If Ghostscript has been initialised, you must call gsapi_exit before gsapi_delete_instance.////// [DllImport("gsdll32.dll", EntryPoint = "gsapi_delete_instance")]private static extern void gsapi_delete_instance(IntPtr instance);#endregion#region Variablesprivate string _sDeviceFormat;private int _iWidth;private int _iHeight;private int _iResolutionX;private int _iResolutionY;private int _iJPEGQuality;private Boolean _bFitPage;private IntPtr _objHandle;#endregion#region Proprietiespublic string OutputFormat{get { return _sDeviceFormat; }set { _sDeviceFormat = value; }}public int Width{get { return _iWidth; }set { _iWidth = value; }}public int Height{get { return _iHeight; }set { _iHeight = value; }}public int ResolutionX{get { return _iResolutionX; }set { _iResolutionX = value; }}public int ResolutionY{get { return _iResolutionY; }set { _iResolutionY = value; }}public Boolean FitPage{get { return _bFitPage; }set { _bFitPage = value; }}///
Quality of compression of JPGpublic int JPEGQuality{get { return _iJPEGQuality; }set { _iJPEGQuality = value; }}#endregion#region Initpublic ToPics(IntPtr objHandle){_objHandle = objHandle;}public ToPics(){_objHandle = IntPtr.Zero;}#endregionprivate byte[] StringToAnsiZ(string str){int intElementCount;int intCounter;byte[] aAnsi;byte bChar;intElementCount = str.Length;aAnsi = new byte[intElementCount1];for (intCounter = 0; intCounter < intElementCount; intCounter){bChar = (byte)str[intCounter];aAnsi[intCounter] = bChar;}aAnsi[intElementCount] = 0;return aAnsi;}public void ConvertPDF2Image(string pdfInputPath, string imageOutputPath,string imageName, int startPageNum, int endPageNum, ImageFormat imageFormat, Definition definition){if (!Directory.Exists(imageOutputPath)){Directory.CreateDirectory(imageOutputPath);}// validate pageNumif (startPageNum <= 0){startPageNum = 1;}if (endPageNum <= 0){endPageNum = 1;}if (startPageNum > endPageNum){int tempPageNum = startPageNum;startPageNum = endPageNum;endPageNum = startPageNum;}// start to convert each pagefor (int i = startPageNum; i <= endPageNum; i){this.Convert(pdfInputPath, imageOutputPathimageNamei.ToString()".jpg", i, i, "jpeg", 100 * (int)definition, 100 * (int)definition);}}/// Convert the file!private void Convert(string inputFile, string outputFile,int firstPage, int lastPage, string deviceFormat, int width, int height){//Avoid to work when the file doesn't existif (!System.IO.File.Exists(inputFile)){//System.Windows.Forms.MessageBox.Show(string.Format("The file :'{0}' doesn't exist", inputFile));return;}int intReturn;IntPtr intGSInstanceHandle;object[] aAnsiArgs;IntPtr[] aPtrArgs;GCHandle[] aGCHandle;int intCounter;int intElementCount;IntPtr callerHandle;GCHandle gchandleArgs;IntPtr intptrArgs;string[] sArgs = GetGeneratedArgs(inputFile, outputFile,firstPage, lastPage, deviceFormat, width, height);// Convert the Unicode strings to null terminated ANSI byte arrays// then get pointers to the byte arrays.intElementCount = sArgs.Length;aAnsiArgs = new object[intElementCount];aPtrArgs = new IntPtr[intElementCount];aGCHandle = new GCHandle[intElementCount];// Create a handle for each of the arguments after// they've been converted to an ANSI null terminated// string. Then store the pointers for each of the handlesfor (intCounter = 0; intCounter < intElementCount; intCounter){aAnsiArgs[intCounter] = StringToAnsiZ(sArgs[intCounter]);aGCHandle[intCounter] = GCHandle.Alloc(aAnsiArgs[intCounter], GCHandleType.Pinned);aPtrArgs[intCounter] = aGCHandle[intCounter].AddrOfPinnedObject();}// Get a new handle for the array of argument pointersgchandleArgs = GCHandle.Alloc(aPtrArgs, GCHandleType.Pinned);intptrArgs = gchandleArgs.AddrOfPinnedObject();intReturn = gsapi_new_instance(out intGSInstanceHandle, _objHandle);callerHandle = IntPtr.Zero;try{intReturn = gsapi_init_with_args(intGSInstanceHandle, intElementCount, intptrArgs);}catch (Exception ex){//System.Windows.Forms.MessageBox.Show(ex.Message);}finally{for (intCounter = 0; intCounter < intReturn; intCounter){aGCHandle[intCounter].Free();}gchandleArgs.Free();gsapi_exit(intGSInstanceHandle);gsapi_delete_instance(intGSInstanceHandle);}}private string[] GetGeneratedArgs(string inputFile, string outputFile,int firstPage, int lastPage, string deviceFormat, int width, int height){this._sDeviceFormat = deviceFormat;this._iResolutionX = width;this._iResolutionY = height;// Count how many extra args are need - HRangel - 11/29/2006, 3:13:43 PMArrayList lstExtraArgs = new ArrayList();if (_sDeviceFormat == "jpg" && _iJPEGQuality > 0 && _iJPEGQuality < 101)lstExtraArgs.Add("-dJPEGQ="_iJPEGQuality);if (_iWidth > 0 && _iHeight > 0)lstExtraArgs.Add("-g"_iWidth"x"_iHeight);if (_bFitPage)lstExtraArgs.Add("-dPDFFitPage");if (_iResolutionX > 0){if (_iResolutionY > 0)lstExtraArgs.Add("-r"_iResolutionX"x"_iResolutionY);elselstExtraArgs.Add("-r"_iResolutionX);}// Load Fixed Args - HRangel - 11/29/2006, 3:34:02 PMint iFixedCount = 17;int iExtraArgsCount = lstExtraArgs.Count;string[] args = new string[iFixedCountlstExtraArgs.Count];/*// Keep gs from writing information to standard output"-q","-dQUIET","-dPARANOIDSAFER", // Run this command in safe mode"-dBATCH", // Keep gs from going into interactive mode"-dNOPAUSE", // Do not prompt and pause for each page"-dNOPROMPT", // Disable prompts for user interaction"-dMaxBitmap=500000000", // Set high for better performance// Set the starting and ending pagesString.Format("-dFirstPage={0}", firstPage),String.Format("-dLastPage={0}", lastPage),// Configure the output anti-aliasing, resolution, etc"-dAlignToPixels=0","-dGridFitTT=0","-sDEVICE=jpeg","-dTextAlphaBits=4","-dGraphicsAlphaBits=4",*/args[0] = "pdf2img";//this parameter have little real useargs[1] = "-dNOPAUSE";//I don't want interruptionsargs[2] = "-dBATCH";//stop after//args[3]="-dSAFER";args[3] = "-dPARANOIDSAFER";args[4] = "-sDEVICE="_sDeviceFormat;//what kind of export format i should provideargs[5] = "-q";args[6] = "-dQUIET";args[7] = "-dNOPROMPT";args[8] = "-dMaxBitmap=500000000";args[9] = String.Format("-dFirstPage={0}", firstPage);args[10] = String.Format("-dLastPage={0}", lastPage);args[11] = "-dAlignToPixels=0";args[12] = "-dGridFitTT=0";args[13] = "-dTextAlphaBits=4";args[14] = "-dGraphicsAlphaBits=4";//For a complete list watch here://http://pages.cs.wisc.edu/~ghost/doc/cvs/Devices.htm//Fill the remaining parametersfor (int i = 0; i < iExtraArgsCount; i){args[15i] = (string)lstExtraArgs[i];}//Fill outputfile and inputfileargs[15iExtraArgsCount] = string.Format("-sOutputFile={0}", outputFile);args[16iExtraArgsCount] = string.Format("{0}", inputFile);return args;}public enum Definition{One = 1, Two = 2, Three = 3, Four = 4, Five = 5, Six = 6, Seven = 7, Eight = 8, Nine = 9, Ten = 10}}}}

直接调用即可

【C#将PDF逐页转成图片】string path = Application.StartupPath"\";string aname = path"test.pdf";string oupfile = path"result";Aspose.Words.PDF.ToPics C = new Aspose.Words.PDF.ToPics();int pc = 2;//一直转换到第几页C.ConvertPDF2Image(aname, path, oupfile, 1, pc, ImageFormat.Jpeg, Aspose.Words.PDF.ToPics.Definition.One);for (int k = 1; k < pc1; k){File.Copy(pathnewfilenamek".jpg", path"\"newfilenameviewk".jpg", true);Application.DoEvents();File.Delete(pathnewfilenamek".jpg");}File.Delete(tempname);

相关经验推荐