代码写到35岁 2024-03-22 15:53 采纳率: 9.1%
浏览 5

C# 适配Net8 的开源插件,将PDF转换成图片

C# 适配Net8 的开源插件,将PDF转换成图片,最好可以去pdf的空白部门,只讲内容部门转换成图片

  • 写回答

1条回答 默认 最新

  • 码农阿豪 Java领域优质创作者 2024-03-22 15:54
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题梳理:
    1. 适配Net8的开源插件,需要找到开源插件的名称,以及是否支持Net8版本。
    2. 将PDF转换成图片,需要找到用于PDF转图片的方法或插件。
    3. 去除PDF的空白部分,只保留内容部分,需要找到如何识别PDF中的空白区域,以及如何去除空白区域的方法。 解答:
    4. 开源插件可以使用PdfiumViewer,这是一个开源的PDF浏览器,支持C#和VB.NET,可以在NuGet上安装。该插件使用的是PDFium C++库,支持多种平台和操作系统,包括Windows和Linux。在使用该插件时,需要将PDFium的DLL文件添加到项目中,并设置复制到输出目录。 示例代码:
      using (var viewer = new PdfiumViewer.PdfRenderer(pdfFile))
      {
         for (int pageNumber = 0; pageNumber < viewer.PageCount; pageNumber++)
         {
             var image = viewer.Render(pageNumber, dpi, dpi, PdfiumViewer.PdfRenderFlags.Annotations);
             // 将image保存为图片文件
         }
      }
      
    5. 可以使用PdfiumViewer中的Render方法将PDF文件渲染为图片。该方法可以指定输出图片的分辨率,以及渲染时需要处理的选项。该方法返回一个Image对象,可以将其保存为图片文件。 示例代码:
      using (var viewer = new PdfiumViewer.PdfRenderer(pdfFile))
      {
         for (int pageNumber = 0; pageNumber < viewer.PageCount; pageNumber++)
         {
             var image = viewer.Render(pageNumber, dpi, dpi, PdfiumViewer.PdfRenderFlags.Annotations);
             // 将image保存为图片文件
         }
      }
      
    6. 要去除PDF的空白部分,可以先将PDF渲染为图片,然后查找图片中的空白区域,并剪裁掉。查找空白区域可以使用像素颜色判断的方法,找到像素颜色为白色的区域即为空白区域。剪裁图片可以使用Graphics库中的Crop方法。 示例代码:
      using (var viewer = new PdfiumViewer.PdfRenderer(pdfFile))
      {
         for (int pageNumber = 0; pageNumber < viewer.PageCount; pageNumber++)
         {
             var image = viewer.Render(pageNumber, dpi, dpi, PdfiumViewer.PdfRenderFlags.Annotations);
             // 查找空白区域
             var bitmap = new Bitmap(image);
             int width = bitmap.Width;
             int height = bitmap.Height;
             int left = width;
             int right = 0;
             int top = height;
             int bottom = 0;
             for (int y = 0; y < height; y++)
             {
                 for (int x = 0; x < width; x++)
                 {
                     Color color = bitmap.GetPixel(x, y);
                     if (color.A != 0 && (color.R + color.G + color.B)/3 != 255)
                     {
                         if (x < left) left = x;
                         if (x > right) right = x;
                         if (y < top) top = y;
                         if (y > bottom) bottom = y;
                     }
                 }
             }
             // 剪裁图片
             int cropWidth = right - left + 1;
             int cropHeight = bottom - top + 1;
             var croppedImage = new Bitmap(cropWidth, cropHeight);
             using (var graphics = Graphics.FromImage(croppedImage))
             {
                 graphics.DrawImage(bitmap, new Rectangle(0, 0, cropWidth, cropHeight), left, top, cropWidth, cropHeight, GraphicsUnit.Pixel);
             }
             // 将croppedImage保存为图片文件
         }
      }
      
    评论

报告相同问题?

问题事件

  • 创建了问题 3月22日

悬赏问题

  • ¥15 关于#单片机#的问题:以ATMEGA128或相近型号单片机为控制器设计直流电机调速的闭环控制系统(相关搜索:设计报告|软件设计|流程图)
  • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB
  • ¥30 电脑误删了手机的照片怎么恢复?
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
  • ¥20 学生成绩管理系统设计
  • ¥15 来一个cc穿盾脚本开发者
  • ¥15 CST2023安装报错
  • ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办