// A delegate type for hooking up change notifications. public delegate void ProgressChangingEventHandler(object sender, string e); ////// Author:ESMAEEL ZENDEHDEL [email protected] /// DATE: 88/11/17 /// Description: A Class For Exporting Image From PDF Files /// License : Free For All /// //Acrobat com /// class PDFConvertor { public int pageCount = 0; Acrobat.CAcroPDDoc pdfDoc = new Acrobat.AcroPDDoc(); Acrobat.CAcroPDPage pdfPage = null; Acrobat.CAcroRect pdfRect = new Acrobat.AcroRect(); Acrobat.AcroPoint pdfPoint =new Acrobat.AcroPoint(); public event ProgressChangingEventHandler ExportProgressChanging; protected virtual void OnExportProgressChanging(string e) { Thread.SpinWait(100); if (ExportProgressChanging != null) ExportProgressChanging(this, e); } #region Convert ////// Converting PDF Files TO Specified Image Format /// /// Source PDF File Path /// Destination PDF File Path /// Type Of Exported Image ///Returns Count Of Exported Images public int Convert(string sourceFileName, string DestinationPath, ImageFormat outPutImageFormat) { if (pdfDoc.Open(sourceFileName)) { // pdfapp.Hide(); pageCount = pdfDoc.GetNumPages(); for (int i = 0; i < pageCount; i++) { pdfPage = (Acrobat.CAcroPDPage)pdfDoc.AcquirePage(i); pdfPoint = (Acrobat.AcroPoint)pdfPage.GetSize(); pdfRect.Left = 0; pdfRect.right = pdfPoint.x; pdfRect.Top = 0; pdfRect.bottom = pdfPoint.y; pdfPage.CopyToClipboard(pdfRect, 0, 0, 100); string outimg = ""; string filename=sourceFileName.Substring(sourceFileName.LastIndexOf("\\")); if (pageCount == 1) outimg = DestinationPath + "\\" + filename + "." + outPutImageFormat.ToString(); else outimg = DestinationPath + "\\" + filename + "_" + i.ToString() + "." + outPutImageFormat.ToString(); Clipboard.GetImage().Save(outimg, outPutImageFormat); ////////////Firing Progress Event OnExportProgressChanging(outimg); } Dispose(); } else { Dispose(); throw new System.IO.FileNotFoundException(sourceFileName +" Not Found!"); } return pageCount; } #endregion #region Convert With Zoom ////// Converting PDF Files TO Specified Image Format /// /// Source PDF File Path /// Destination PDF File Path /// Type Of Exported Image /// Width Of Exported Images /// Heiht Of Exported Images /// Zoom Percent ///Returns Count Of Exported Images public int Convert(string sourceFileName, string DestinationPath, ImageFormat outPutImageFormat, short width, short height, short zoom) { if (pdfDoc.Open(sourceFileName)) { // pdfapp.Hide(); pageCount = pdfDoc.GetNumPages(); for (int i = 0; i < pageCount; i++) { pdfPage = (Acrobat.CAcroPDPage)pdfDoc.AcquirePage(i); // pdfPoint = (Acrobat.CAcroPoint)pdfPage.GetSize(); pdfRect.Left = 0; pdfRect.right = width; //pdfPoint.x; pdfRect.Top = 0; pdfRect.bottom = height; //pdfPoint.y; pdfPage.CopyToClipboard(pdfRect, 0, 0, zoom); string outimg = ""; string filename = sourceFileName.Substring(sourceFileName.LastIndexOf("\\")); if (pageCount == 1) outimg = DestinationPath + "\\" + filename + "." + outPutImageFormat.ToString(); else outimg = DestinationPath + "\\" + filename + "_" + i.ToString() + "." + outPutImageFormat.ToString(); Clipboard.GetImage().Save(outimg, outPutImageFormat); ////////////Firing Progress Event OnExportProgressChanging(outimg); } Dispose(); } else { Dispose(); throw new System.IO.IOException("Specified File Not Found!"); } return pageCount; } #endregion #region Destractor ~PDFConvertor() { GC.Collect(); if (pdfPage!=null) Marshal.ReleaseComObject(pdfPage); Marshal.ReleaseComObject(pdfPoint); Marshal.ReleaseComObject(pdfRect); Marshal.ReleaseComObject(pdfDoc); } public void Dispose() { GC.Collect(); if (pdfPage != null) Marshal.ReleaseComObject(pdfPage); Marshal.ReleaseComObject(pdfPoint); Marshal.ReleaseComObject(pdfRect); Marshal.ReleaseComObject(pdfDoc); } #endregion }
////// /// /// /// private void btnConvert_Click(object sender, EventArgs e) { ImageFormat imageFormat = new ImageFormat(Guid.Empty); switch (comboBox1.SelectedItem.ToString() ) { case "Jpeg": imageFormat = ImageFormat.Jpeg; break; case "Bmp": imageFormat = ImageFormat.Bmp; break; case "Png": imageFormat = ImageFormat.Png; break; case "Gif": imageFormat = ImageFormat.Gif; break; } pdf = new PDFConvertor(); pdf.ExportProgressChanging += new ProgressChangingEventHandler(p_ExportProgressChanging); progressBar1.Visible = true; int filescount= pdf.Convert(txtInput.Text, txtOutPut.Text, imageFormat); progressBar1.Visible = false ; progressBar1.Value = 0; this.Text = filescount + " Items Exported!"; lblCurrentFileName.Text = ""; System.Diagnostics.Process.Start(txtOutPut.Text); } ////// /// /// /// void p_ExportProgressChanging(object sender, string e) { lblCurrentFileName.Text = " Extracting " + e.Substring(e.LastIndexOf("\\")) + " !"; progressBar1.Maximum = pdf.pageCount; progressBar1.Value += 1; this.Text=lblCount.Text =string.Format("{0}/{1} Extracted!",progressBar1.Value,progressBar1.Maximum); lblCount.Update(); lblCurrentFileName.Update(); }
pdf = new PDFConvertor(); imageFormat = ImageFormat.Jpeg; inputfile = Server.MapPath("pdffile/Top1000WorldBanks2014.pdf"); outpubfile = Server.MapPath("exportimage"); //WEB不可以 // int filescount = pdf.Convert(inputfile, outpubfile, imageFormat); DateTime startTime = DateTime.Now; // string inputFile = files[n].ToString(); string outputFile = outpubfile + inputfile.Substring(inputfile.LastIndexOf(@"\") + 1).Replace(".pdf", ".png"); pdfDoc = (Acrobat.CAcroPDDoc)Microsoft.VisualBasic.Interaction.CreateObject("AcroExch.PDDoc", ""); bool ret = pdfDoc.Open(inputfile); if (!ret) { throw new FileNotFoundException(); } // Get the number of pages (to be used later if you wanted to store that information) int pageCount = pdfDoc.GetNumPages(); // Get the first page pdfPage = (Acrobat.CAcroPDPage)pdfDoc.AcquirePage(0); pdfPoint = (Acrobat.CAcroPoint)pdfPage.GetSize(); pdfRect = (Acrobat.CAcroRect)Microsoft.VisualBasic.Interaction.CreateObject("AcroExch.Rect", ""); pdfRect.Left = 0; pdfRect.right = pdfPoint.x; pdfRect.Top = 0; pdfRect.bottom = pdfPoint.y; int numPages = pdfDoc.GetNumPages(); //System.Web.HttpContext.Current.Response.Write("numPages: " + numPages); //System.Web.HttpContext.Current.Response.Write("Size: " + pdfPoint.x + "x" + pdfPoint.y); double ratio = (double)pdfPoint.x / (double)pdfPoint.y; // Render to clipboard, scaled by 100 percent (ie. original size) // Even though we want a smaller image, better for us to scale in .NET // than Acrobat as it would greek out small text // see http://www.adobe.com/support/techdocs/1dd72.htm bool copyToClipBoardSuccess = pdfPage.CopyToClipboard(pdfRect, 0, 0, 100); IDataObject clipboardData = Clipboard.GetDataObject(); Response.Write("copyToClipBoardSuccess: " + copyToClipBoardSuccess + ", Clipboard.ContainsImage: " + Clipboard.ContainsImage() + ", Clipboard.ContainsData: " + Clipboard.ContainsData(DataFormats.Bitmap)); //if (clipboardData.GetDataPresent(DataFormats.Bitmap)) //{ // Bitmap pdfBitmap = (Bitmap)clipboardData.GetData(DataFormats.Bitmap); // // Size of generated thumbnail in pixels // int biggestSize = 500; // int thumbnailWidth = 0; // int thumbnailHeight = 0; // if (pdfPoint.x >= pdfPoint.y) // { // thumbnailWidth = biggestSize; // thumbnailHeight = Convert.ToInt32((double)thumbnailWidth * ratio); // } // else // { // thumbnailHeight = biggestSize; // thumbnailWidth = Convert.ToInt32((double)thumbnailHeight * ratio); // } // // Render to small image using the bitmap class // System.Drawing.Image pdfImage = pdfBitmap.GetThumbnailImage(thumbnailWidth, thumbnailHeight, null, IntPtr.Zero); // // Create new blank bitmap // Bitmap thumbnailBitmap = new Bitmap(thumbnailWidth, thumbnailHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); // using (Graphics thumbnailGraphics = Graphics.FromImage(thumbnailBitmap)) // { // // Draw rendered pdf image to new blank bitmap // thumbnailGraphics.DrawImage(pdfImage, 2, 2, thumbnailWidth, thumbnailHeight); // // Save as .png file // thumbnailBitmap.Save(outputFile, System.Drawing.Imaging.ImageFormat.Png); // //System.Web.HttpContext.Current.Response.Write("Generated thumbnail... " + outputFile); // } // pdfDoc.Close(); // // Not sure how why it is to do this, but Acrobat is not the best behaved COM object // // see http://blogs.msdn.com/yvesdolc/archive/2004/04/17/115379.aspx // Marshal.ReleaseComObject(pdfPage); // Marshal.ReleaseComObject(pdfRect); // Marshal.ReleaseComObject(pdfDoc); // TimeSpan ts = new TimeSpan(DateTime.Now.Ticks - startTime.Ticks); // //System.Web.HttpContext.Current.Response.Write("Parsning tog: " + ts.TotalMilliseconds + " ms"); // //System.Web.HttpContext.Current.Response.Write(""); //}
from: https://www.codeproject.com/articles/57100/simple-and-free-pdf-to-image-conversion