pdf转换成jpg示例分享

代码如下:

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:

可以采用下面的方式测试调用上面的功能,如:


代码如下:

PDFConvert convertor = new PDFConvert();
 convertor.pdf2jpgTest();

代码如下:

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)

相关推荐

  • pdf转换成jpg示例分享

    复制代码 代码如下: 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 com

  • PHP实现将base64编码字符串转换成图片示例

    本文实例讲述了PHP实现将base64编码字符串转换成图片.分享给大家供大家参考,具体如下: 步骤: 1. 获取base64文件: 复制代码 代码如下: $image="data:image/jpg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRw

  • python实现pdf转换成word/txt纯文本文件

    本文实例为大家分享了python实现pdf转word/txt,供大家参考,具体内容如下 依赖包:pdfminer3k 可以通过pip安装:也可以到官网下载,解压,进入文件夹,输入命令setup.py install安装软件. 源代码: #!/usr/bin/python # -*- coding: utf-8 -*- import sys import importlib importlib.reload(sys) from pdfminer.pdfparser import PDFParser

  • java如何将pdf转换成image

    本文实例为大家分享了java将pdf转换image的具体代码,供大家参考,具体内容如下 首先使用了使用了apache的PDFBox组件1.8.4版本 package pdf; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.List; import javax.imageio.ImageIO;

  • Python字符串转换成浮点数函数分享

    利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456 from functools import reduce def str2float(s): return reduce(lambda x,y:x+int2dec(y),map(str2int,s.split('.'))) def char2num(s): return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':

  • c#实现将pdf转文本的示例分享

    如何解析PDF文件 在.NET中从PDF文件里提取文本的几种主要方法有: 1.Microsoft 的 IFilter 接口 和 Adobe 的 IFilter 实现: 2.iTextSharp: 3.PDFBox. 不幸的是这些 PDF 解析方案都不完美.我们将在下面讨论这些方法. Adobe PDF IFilter 为了使用 IFilter 接口来解析 PDF 文件,你需要: Windows 2000 或者后续版本 Adobe Acrobat 或 Reader 7.0.5+ (或单独的 Ado

  • js冒泡法和数组转换成字符串示例代码

    js代码: 复制代码 代码如下: window.onload = function(){ var mian = document.getElementById( "mian" ); var mian1 = document.getElementById( "mian1" ); var str = mian.innerHTML; var arry = []; var len = str.length; for( var i = 0; i < len; i++ )

  • Python3实现网页内容转换成PDF文档和图片

    目录 1.引言 2.代码实战 2.1 模块介绍 2.2 安装 2.3 代码实例 2.4 拓展 3.总结 1.引言 小鱼:小屌丝,你这是干啥呢? 小屌丝:我的女神想要这个网页的内容. 小鱼:那你也不能这一点点的复制粘贴啊, 小屌丝:为了我的女神,再辛苦我都愿意… 小鱼:咱能不能man一点,你直接把网页内容爬下来不就完事了, 小屌丝:我的女神还要把这些内容转换成PDF, 小鱼:你的女神事可真多… 小屌丝:鱼哥,你有什么好的法子吗? 小鱼:嗯,办法嘛,确实有 小屌丝:我懂. 小鱼:…上道这么快,果然为

  • ASP.NET实现将word文档转换成pdf的方法

    本文实例讲述了ASP.NET实现将word文档转换成pdf的方法,分享给大家供大家参考.具体实现步骤如下: 一.添加引用 复制代码 代码如下: using Microsoft.Office.Interop.Word; 二.转换方法   1.方法 复制代码 代码如下: /// <summary>     /// 把Word文件转换成pdf文件     /// </summary>     /// <param name="sourcePath">需要转

  • asp.net实现将ppt文档转换成pdf的方法

    本文实例讲述了asp.net实现将ppt文档转换成pdf的方法.分享给大家供大家参考.具体实现方法如下: 一.添加引用 复制代码 代码如下: using Microsoft.Office.Core; using Microsoft.Office.Interop.PowerPoint; 二.转换方法 复制代码 代码如下: ///<summary>        /// 把PowerPoint文件转换成PDF格式文件       ///</summary>        ///<

随机推荐