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.rhkb.cn/news/310253.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2022年蓝桥杯省赛软件类C/C++B组----积木画

想借着这一个题回顾一下动态规划问题的基本解法&#xff0c;让解题方法清晰有条理&#xff0c;希望更多的人可以更轻松的理解动态规划&#xff01; 目录 【题目】 【本题解题思路】 【DP模版】 总体方针&#xff1a; 具体解题时的套路&#xff1a; 【题目】 【本题解题思…

状态模式(行为型)

目录 一、前言 二、状态模式 三、总结 一、前言 状态模式(State Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许一个对象在其内部状态改变时改变它的行为。对象看起来好像修改了它的类&#xff0c;但实际上&#xff0c;由于状态模式的引入&#xff0c;行为的变…

macOS制作C/C++ app

C/C制作macOS .app 一、 .app APP其实是一个文件夹结构&#xff0c;只不过mac的界面中让它看起来像一个单独的文件。 在shell终端或者右键查看包结构即可看到APP的目录结构。 通常的app目录结构如下&#xff1a; _CodeSignature, CodeResources 一般为Mac APP Store上架程序…

华三交换机知道ip怎么查找主机ip在接入交换机哪个端口下

环境&#xff1a; 华三S5120V3-52S-SI H3C Comware Software, Version 7.1.070, Release 6329 问题描述&#xff1a; 华三交换机知道ip怎么查找主机ip在接入交换机哪个端口下 已知主机ip192.168.1.111 解决方案&#xff1a; 在H3C&#xff08;新华三&#xff09;交换机上…

K8S:常用资源对象操作

文章目录 一、使用Replication Controller(RC)、Replica Set(RS) 管理Pod1 Replication Controller&#xff08;RC&#xff09;2 Replication Set&#xff08;RS&#xff09; 二、Deployment的使用1 创建2 滚动升级3 回滚Deployment三、 Pod 自动扩缩容HPA1 使用kubectl autosc…

PCL中VTK场景添加坐标系轴显示

引言 世上本没有坐标系&#xff0c;用的人多了&#xff0c;便定义了坐标系统用来定位。地理坐标系统用于定位地球上的位置&#xff0c;PCL点云库可视化窗口中的坐标系统用于定位其三维世界中的位置。本人刚开始接触学习PCL点云库&#xff0c;计算机图形学基础为零&#xff0c;…

排序链表 - LeetCode 热题 33

大家好&#xff01;我是曾续缘&#x1f639; 今天是《LeetCode 热题 100》系列 发车第 33 天 链表第 12 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 排序链表 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a…

机器学习实训 Day1(线性回归练习)

线性回归练习 Day1 手搓线性回归 随机初始数据 import numpy as np x np.array([56, 72, 69, 88, 102, 86, 76, 79, 94, 74]) y np.array([92, 102, 86, 110, 130, 99, 96, 102, 105, 92])from matplotlib import pyplot as plt # 内嵌显示 %matplotlib inlineplt.scatter…

Uniapp+基于百度智能云完成AI视觉功能(附前端思路)

本博客使用uniapp百度智能云图像大模型中的AI视觉API&#xff08;本文以物体检测为例&#xff09;完成了一个简单的图像识别页面&#xff0c;调用百度智能云API可以实现快速训练模型并且部署的效果。 uniapp百度智能云AI视觉页面实现 先上效果图实现过程百度智能云Easy DL训练图…

Redis消息队列-基于PubSub的消息队列

7.3 Redis消息队列-基于PubSub的消息队列 PubSub&#xff08;发布订阅&#xff09;是Redis2.0版本引入的消息传递模型。顾名思义&#xff0c;消费者可以订阅一个或多个channel&#xff0c;生产者向对应channel发送消息后&#xff0c;所有订阅者都能收到相关消息。 SUBSCRIBE …

SpringMVC:搭建第一个web项目并配置视图解析器

&#x1f449;需求&#xff1a;用spring mvc框架搭建web项目&#xff0c;通过配置视图解析器达到jsp页面不得直接访问&#xff0c;实现基本的输出“hello world”功能。&#x1f469;‍&#x1f4bb;&#x1f469;‍&#x1f4bb;&#x1f469;‍&#x1f4bb; 1 创建web项目 1…

Knowledge Editing for Large Language Models: A Survey

目录 IntroductionProblem Formulation评估指标Methods数据集应用讨论挑战未来方向 大型语言模型&#xff08;LLMS&#xff09;最近由于其出色的理解&#xff0c;分析和生成文本的能力而根据其广泛的知识和推理能力来改变了学术和工业景观。然而&#xff0c;LLM的一个主要缺点是…

如何在横向渗透攻击中寻到一线生机

横向渗透&#xff0c;作为计算机网络中的一种攻击技术&#xff0c;展现出了攻击者如何巧妙地利用同一级别系统间的漏洞和弱点&#xff0c;扩大其网络访问权限。与纵向渗透不同&#xff0c;横向渗透不关注权限的垂直提升&#xff0c;而是更侧重于在同一层级内扩展影响力。 横向…

Excel文件解析

在此模块的学习中&#xff0c;我们需要一个新的开源类库---Apahche POI开源类库。这个类库的用途是&#xff1a;解析并生成Excel文件(Word、ppt)。Apahche POI基于DOM方式进行解析&#xff0c;将文件直接加载到内存&#xff0c;所以速度比较快&#xff0c;适合Excel文件数据量不…

Appium知多少

Appium我想大家都不陌生&#xff0c;这是主流的移动自动化工具&#xff0c;但你对它真的了解么&#xff1f;为什么很多同学搭建环境时碰到各种问题也而不知该如何解决。 appium为什么英语词典查不到中文含义&#xff1f; appium是一个合成词&#xff0c;分别取自“applicatio…

JavaEE企业开发新技术5

目录 2.18 综合应用-1 2.19 综合应用-2 2.20 综合应用-3 2.21 综合应用-4 2.22 综合应用-5 Synchronized &#xff1a; 2.18 综合应用-1 反射的高级应用 DAO开发中&#xff0c;实体类对应DAO的实现类中有很多方法的代码具有高度相似性&#xff0c;为了提供代码的复用性,降低…

Mac电脑安装蚁剑

1&#xff1a; github 下载源码和加载器&#xff1a;https://github.com/AntSwordProjectAntSwordProject GitHubAntSwordProject has 12 repositories available. Follow their code on GitHub.https://github.com/AntSwordProject 以该图为主页面&#xff1a;antSword为源码…

Flask快速搭建文件上传服务与接口

说明&#xff1a;仅供学习使用&#xff0c;请勿用于非法用途&#xff0c;若有侵权&#xff0c;请联系博主删除 作者&#xff1a;zhu6201976 一、需求背景 前端通过浏览器&#xff0c;访问后端服务器地址&#xff0c;将目标文件进行上传。 访问地址&#xff1a;http://127.0.0…

内网渗透-内网环境下的横向移动总结

内网环境下的横向移动总结 文章目录 内网环境下的横向移动总结前言横向移动威胁 威胁密码安全 威胁主机安全 威胁信息安全横向移动威胁的特点 利用psexec 利用psexec.exe工具msf中的psexec 利用windows服务 sc命令 1.与靶机建立ipc连接2.拷贝exe到主机系统上3.在靶机上创建一个…

ClickHouse 介绍

前言 一个通用系统意味着更广泛的适用性&#xff0c;但通用的另一种解释是平庸&#xff0c;因为它无法在所有场景内都做到极致。 ClickHouse 在没有像三驾马车这样的指导性论文的背景下&#xff0c;通过针对特定场景的极致优化&#xff0c;获得闪电般的查询性能。 ClickHous…