当前位置: 首页 > news >正文

itext7 pdf转图片

https://github.com/thombrink/itext7.pdfimage
新建asp.net core8项目,安装itext7和system.drawing.common
在这里插入图片描述
引入itext.pdfimage核心代码
在这里插入图片描述
imageListener下有一段不安全的代码

  unsafe{for (int y = 0; y < image.Height; y++){byte* ptrMask = (byte*)bitsMask.Scan0 + y * bitsMask.Stride;byte* ptrInput = (byte*)bitsInput.Scan0 + y * bitsInput.Stride;byte* ptrOutput = (byte*)bitsOutput.Scan0 + y * bitsOutput.Stride;for (int x = 0; x < image.Width; x++){ptrOutput[4 * x] = ptrInput[4 * x];           // blueptrOutput[4 * x + 1] = ptrInput[4 * x + 1];   // greenptrOutput[4 * x + 2] = ptrInput[4 * x + 2];   // redptrOutput[4 * x + 3] = ptrMask[4 * x];        // alpha}}}

修改为安全代码

// 遍历每一行  
for (int y = 0; y < image.Height; y++)  
{  // 计算每行的起始字节位置  int scanOffsetInput = y * bitsInput.Stride;  int scanOffsetMask = y * bitsMask.Stride;  int scanOffsetOutput = y * bitsOutput.Stride;  // 获取当前行的字节数组  byte[] scanlineInput = new byte[bitsInput.Stride];  byte[] scanlineMask = new byte[bitsMask.Stride];byte[] scanlineOutput = new byte[bitsOutput.Stride];Marshal.Copy(bitsInput.Scan0 + scanOffsetInput, scanlineInput, 0, scanlineInput.Length);  Marshal.Copy(bitsMask.Scan0 + scanOffsetMask, scanlineMask, 0, scanlineMask.Length);  // 遍历每一列(或每一像素)  for (int x = 0; x < image.Width; x++)  {  // 计算当前像素在字节数组中的位置(基于每个像素4个字节)  int pixelOffsetInput = x * 4;  int pixelOffsetMask = x * 4;  int pixelOffsetOutput = x * 4;  // 读取输入图像的RGB值  byte blue = scanlineInput[pixelOffsetInput];  byte green = scanlineInput[pixelOffsetInput + 1];  byte red = scanlineInput[pixelOffsetInput + 2];  // 读取遮罩图像的alpha值  byte alpha = scanlineMask[pixelOffsetMask];  // 将值写入输出图像的对应位置  scanlineOutput[pixelOffsetOutput] = blue;  scanlineOutput[pixelOffsetOutput + 1] = green;  scanlineOutput[pixelOffsetOutput + 2] = red;  scanlineOutput[pixelOffsetOutput + 3] = alpha;  }  // 将处理过的行复制回输出图像的BitmapData中  Marshal.Copy(scanlineOutput, 0, bitsOutput.Scan0 + scanOffsetOutput, scanlineOutput.Length);  
}  

调用

using System.Drawing.Imaging;
using iText.Kernel.Pdf;
using itext.pdfimage.Extensions;namespace pdf2image02;class Program
{static void Main(string[] args){Console.WriteLine("Start Bliep");var pdfPath = "D:\\ChatFiles\\WechatWorkFile\\WXWork\\1688853272898895\\Cache\\File\\2024-04\\wave.pdf";var pdf = File.Open(pdfPath, FileMode.Open);var reader = new PdfReader(pdf);var pdfDocument = new PdfDocument(reader);var bitmaps = pdfDocument.ConvertToBitmaps();foreach (var bitmap in bitmaps){bitmap.Save(Path.Combine("F:\\Desktop\\test\\aa", $"wave-{DateTime.Now.Ticks}.png"), ImageFormat.Png);bitmap.Dispose();}var page1 = pdfDocument.GetPage(1);var bitmap1 = page1.ConvertPageToBitmap();bitmap1.Save(Path.Combine("F:\\Desktop\\test\\aa", $"wave-page1-{DateTime.Now.Ticks}.png"), ImageFormat.Png);bitmap1.Dispose();Console.WriteLine("End Bliep!");}
}

在这里插入图片描述

20240413接入最新版的itext7也是可以的
在这里插入图片描述

http://www.lryc.cn/news/341032.html

相关文章:

  • 搜维尔科技:Manus Xsens Metagloves新一代手指捕捉
  • Python与Redis:提升性能,确保可靠性,掌握最佳实践
  • GPT国内能用吗
  • 中科亿海微-CL1656功能验证开发板
  • 学习STM32第十五天
  • 【面试题】MySQL 事务的四大特性说一下?
  • 案例实践 | InterMat:基于长安链的材料数据发现与共享系统
  • 【数据挖掘】实验8:分类与预测建模
  • go语言并发实战——日志收集系统(三) 利用sarama包连接KafKa实现消息的生产与消费
  • Go 单元测试之Mysql数据库集成测试
  • Prometheus + Grafana 搭建监控仪表盘
  • 机器人管理系统的增删查改(Python)
  • 【.Net动态Web API】背景与实现原理
  • JS-43-Node.js02-安装Node.js和npm
  • 设计模式(分类)
  • 请陪伴Kimi和GPT成长
  • 优思学院|ISO45001职业健康安全管理体系是什么?
  • 抖去推短视频矩阵系统----源头开发
  • Golang函数重试机制实现
  • 工业电脑在ESOP工作站行业应用
  • java项目实战之图书管理系统(1)
  • 3DGS渐进式渲染 - 离线生成渲染视频
  • chromium 协议栈 cronet ios 踩坑案例
  • Java快速排序知识点(含面试大厂题和源码)
  • SpringBoot整合Swagger2
  • C++算法题 - 矩阵
  • 记录一个没测出来,有点严重的Bug
  • 科学突破可能开创6G通信新时代
  • 游戏、app抓包
  • PACNet CellNet(代码开源)|bulk数据作细胞分类,评估细胞命运性能的一大利器