You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.9 KiB

1 month ago
  1. using Spire.Pdf;
  2. using System;
  3. using System.Drawing;
  4. using System.Drawing.Imaging;
  5. using System.IO;
  6. using System.Linq;
  7. namespace ShenTun.Ecg.Common
  8. {
  9. public class PdfHelper
  10. {
  11. /// <summary>
  12. /// 将pdf文件转换为图片文件
  13. /// </summary>
  14. /// <param name="stream">pdf文件流</param>
  15. /// <param name="pageIndex">要转换的pdf页索引(从0开始)</param>
  16. /// <param name="dpiX">dpi</param>
  17. /// <param name="dpiY">dpi</param>
  18. /// <param name="mimeType">mime类型</param>
  19. /// <returns></returns>
  20. public static Stream PdfToImage(Stream stream, int pageIndex = 0, int dpiX = 300, int dpiY = 300, string mimeType = "image/jpg")
  21. {
  22. using (PdfDocument document = new PdfDocument())
  23. {
  24. document.LoadFromStream(stream);
  25. // 图片类型选择为Bitmap
  26. Spire.Pdf.Graphics.PdfImageType pdfImageType = Spire.Pdf.Graphics.PdfImageType.Bitmap;
  27. // 将pdf中指定的页码转换为图片对象并返回
  28. using (Image image = document.SaveAsImage(pageIndex, pdfImageType, dpiX, dpiY))
  29. {
  30. // 获取相应的编码器
  31. ImageCodecInfo codecInfo = (
  32. from item in ImageCodecInfo.GetImageEncoders()
  33. where mimeType.Equals(item.MimeType)
  34. select item
  35. ).FirstOrDefault();
  36. EncoderParameters encoderParams = new EncoderParameters(1);
  37. encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
  38. MemoryStream result = new MemoryStream();
  39. image.Save(result, codecInfo, encoderParams);
  40. result.Position = 0;
  41. return result;
  42. }
  43. }
  44. }
  45. }
  46. }