PDFToImage.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using ComPDFKit.PDFDocument;
  2. using ComPDFKit.PDFPage;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Imaging;
  12. namespace PDFToImageTest
  13. {
  14. internal class PDFToImage
  15. {
  16. static private string outputPath = Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory()))) + "\\Output\\PDFToImage";
  17. static void Main(string[] args)
  18. {
  19. Console.WriteLine("Running PDFToImage test sample…\r\n");
  20. SDKLicenseHelper.LicenseVerify();
  21. CPDFDocument document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");
  22. if (!Directory.Exists(outputPath))
  23. {
  24. Directory.CreateDirectory(outputPath);
  25. }
  26. PDFPageToImage(document);
  27. Console.ReadLine();
  28. }
  29. static private void SaveWriteableBitmapAsPng(WriteableBitmap writeableBitmap, string fileName)
  30. {
  31. using (FileStream stream = new FileStream(fileName, FileMode.Create))
  32. {
  33. PngBitmapEncoder encoder = new PngBitmapEncoder();
  34. encoder.Frames.Add(BitmapFrame.Create(writeableBitmap));
  35. encoder.Save(stream);
  36. }
  37. }
  38. static private bool PDFPageToImage(CPDFDocument document)
  39. {
  40. for (int i = 0; i < document.PageCount; i++)
  41. {
  42. CPDFPage pdfPage = document.PageAtIndex(i, true);
  43. Size pageSize = document.GetPageSize(0);
  44. Rect pageRect = new Rect(0, 0, (int)(pageSize.Width / 72.0 * 96), (int)(pageSize.Height / 72.0 * 96));
  45. byte[] bmpData = new byte[(int)(pageRect.Width * pageRect.Height * (96 / 72.0) * (96 / 72.0) * 4)];
  46. pdfPage.RenderPageBitmapWithMatrix((float)(96/72.0), pageRect, 0xFFFFFFFF, bmpData, 0, true);
  47. WriteableBitmap writeableBitmap = new WriteableBitmap((int)pageRect.Width, (int)pageRect.Height, 96, 96, PixelFormats.Bgra32, null);
  48. writeableBitmap.WritePixels(new Int32Rect(0, 0, (int)pageRect.Width, (int)pageRect.Height), bmpData, writeableBitmap.BackBufferStride, 0);
  49. var path = outputPath + "//PDFToImageTest" + i + ".png";
  50. SaveWriteableBitmapAsPng(writeableBitmap, path);
  51. Console.WriteLine("Png image saved in {0}", path);
  52. }
  53. return false;
  54. }
  55. }
  56. }