源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

pdf转换成jpg示例分享

  • 时间:2020-10-06 00:52 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:pdf转换成jpg示例分享
[u]复制代码[/u] 代码如下:
using System;  using System.Collections.Generic;  using System.Text;  using System.Runtime.InteropServices;  using System.Collections;  /** Convert PDF to Image Format(JPEG) using Ghostscript API convert a pdf to jpeg using ghostscript command line: gswin32c -q -dQUIET -dPARANOIDSAFER  -dBATCH -dNOPAUSE  -dNOPROMPT -dMaxBitmap=500000000 -dFirstPage=1 -dAlignToPixels=0 -dGridFitTT=0 -sDEVICE=jpeg -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r100x100 -sOutputFile=output.jpg test.pdf see also:http://www.mattephraim.com/blog/2009/01/06/a-simple-c-wrapper-for-ghostscript/ and: http://www.codeproject.com/KB/cs/GhostScriptUseWithCSharp.aspx Note:copy gsdll32.dll to system32 directory before using this ghostscript wrapper.  *   */  namespace ConvertPDF  {      /// <summary>      ///       /// Class to convert a pdf to an image using GhostScript DLL      /// Credit for this code go to:Rangel Avulso      /// i only fix a little bug and refactor a little      /// http://www.hrangel.com.br/index.php/2006/12/04/converter-pdf-para-imagem-jpeg-em-c/      /// </summary>      /// <seealso cref="http://www.hrangel.com.br/index.php/2006/12/04/converter-pdf-para-imagem-jpeg-em-c/"/>      class PDFConvert      {          #region GhostScript Import          /// <summary>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. </summary>          /// <param name="pinstance"></param>          /// <param name="caller_handle"></param>          /// <returns></returns>          [DllImport("gsdll32.dll", EntryPoint="gsapi_new_instance")]          private static extern int gsapi_new_instance (out IntPtr pinstance, IntPtr caller_handle);          /// <summary>This is the important function that will perform the conversion</summary>          /// <param name="instance"></param>          /// <param name="argc"></param>          /// <param name="argv"></param>          /// <returns></returns>          [DllImport("gsdll32.dll", EntryPoint="gsapi_init_with_args")]          private static extern int gsapi_init_with_args (IntPtr instance, int argc, IntPtr argv);          /// <summary>          /// Exit the interpreter. This must be called on shutdown if gsapi_init_with_args() has been called, and just before gsapi_delete_instance().           /// </summary>          /// <param name="instance"></param>          /// <returns></returns>          [DllImport("gsdll32.dll", EntryPoint="gsapi_exit")]          private static extern int gsapi_exit (IntPtr instance);          /// <summary>          /// 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.           /// </summary>          /// <param name="instance"></param>          [DllImport("gsdll32.dll", EntryPoint="gsapi_delete_instance")]          private static extern void gsapi_delete_instance (IntPtr instance);          #endregion          #region Variables          private 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 Proprieties          public 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; }          }          /// <summary>Quality of compression of JPG</summary>          public int JPEGQuality          {              get { return _iJPEGQuality; }              set { _iJPEGQuality = value; }          }          #endregion          #region Init          public PDFConvert(IntPtr objHandle)          {              _objHandle = objHandle;          }          public PDFConvert()          {              _objHandle = IntPtr.Zero;          }          #endregion          private byte[] StringToAnsiZ(string str)          {              //' Convert a Unicode string to a null terminated Ansi string for Ghostscript.              //' The result is stored in a byte array. Later you will need to convert              //' this byte array to a pointer with GCHandle.Alloc(XXXX, GCHandleType.Pinned)              //' and GSHandle.AddrOfPinnedObject()              int intElementCount;              int intCounter;              byte[] aAnsi;              byte bChar;              intElementCount = str.Length;              aAnsi = new byte[intElementCount+1];              for(intCounter = 0; intCounter < intElementCount;intCounter++)              {                  bChar = (byte)str[intCounter];                  aAnsi[intCounter] = bChar;              }              aAnsi[intElementCount] = 0;              return aAnsi;          }          /// <summary>Convert the file!</summary>          public void Convert(string inputFile,string outputFile,              int firstPage, int lastPage, string deviceFormat, int width, int height)          {              //Avoid to work when the file doesn't exist              if (!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 handles              for(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 pointers              gchandleArgs = 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 PM              ArrayList 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);                  else                      lstExtraArgs.Add("-r" + _iResolutionX);              }              // Load Fixed Args - HRangel - 11/29/2006, 3:34:02 PM              int iFixedCount = 17;              int iExtraArgsCount = lstExtraArgs.Count;              string[] args = new string[iFixedCount + lstExtraArgs.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 pages         String.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 use              args[1]="-dNOPAUSE";//I don't want interruptions              args[2]="-dBATCH";//stop after              //args[3]="-dSAFER";              args[3] = "-dPARANOIDSAFER";              args[4]="-sDEVICE="+_sDeviceFormat;//what kind of export format i should provide              args[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 parameters              for (int i=0; i < iExtraArgsCount; i++)              {                  args[15+i] = (string) lstExtraArgs[i];              }              //Fill outputfile and inputfile              args[15 + iExtraArgsCount] = string.Format("-sOutputFile={0}",outputFile);              args[16 + iExtraArgsCount] = string.Format("{0}",inputFile);              return args;          }          public void pdf2jpgTest()          {                          this.Convert(@"C://tmp//pdfimg//test1.pdf",@"C://tmp//pdfimg//out.jpg",1,1,"jpeg",100,100);              //this.Convert(@"C://tmp//pdfimg//test.pdf", @"C://tmp//pdfimg//out2.jpg", 291, 291, "jpeg", 800, 800);          }      }  } 
测试WinForm: 可以采用下面的方式测试调用上面的功能,如:
[u]复制代码[/u] 代码如下:
 PDFConvert convertor = new PDFConvert();  convertor.pdf2jpgTest();  
[u]复制代码[/u] 代码如下:
using System;  using System.Collections.Generic;  using System.ComponentModel;  using System.Data;  using System.Drawing;  using System.Linq;  using System.Text;  using System.Windows.Forms;  using ConvertPDF;  namespace PDF2Img  {      public partial class Form1 : Form      {          public Form1()          {              InitializeComponent();          }          private void button1_Click(object sender, EventArgs e)          {              PDFConvert convertor = new PDFConvert();              convertor.pdf2jpgTest();              Image img = Image.FromFile(@"C://tmp//pdfimg//out.jpg");              myBitmap = new Bitmap(img);              Graphics G = this.CreateGraphics();              GraphicsUnit GU = G.PageUnit;              BMPContainer = myBitmap.GetBounds(ref GU); //X,Y = 0             // Graphics g = this.CreateGraphics();              //g.DrawImage(myBitmap, 1, 1);              this.Invalidate();          }          private Bitmap myBitmap;          private RectangleF BMPContainer;          protected override void OnPaint(PaintEventArgs e)          {              Graphics G = e.Graphics;              if (myBitmap != null)              {                             G.DrawImage(myBitmap, BMPContainer);              }              base.OnPaint(e);          }      }  }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部