当前位置: 首页 > 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也是可以的
在这里插入图片描述

相关文章:

itext7 pdf转图片

https://github.com/thombrink/itext7.pdfimage 新建asp.net core8项目&#xff0c;安装itext7和system.drawing.common 引入itext.pdfimage核心代码 imageListener下有一段不安全的代码 unsafe{for (int y 0; y < image.Height; y){byte* ptrMask (byte*)bitsMask.Scan…...

搜维尔科技:Manus Xsens Metagloves新一代手指捕捉

Manus Xsens Metagloves新一代手指捕捉 搜维尔科技&#xff1a;Manus Xsens Metagloves新一代手指捕捉...

Python与Redis:提升性能,确保可靠性,掌握最佳实践

在 Python 中&#xff0c;有多个库可用于与 Redis 数据库进行交互&#xff0c;其中最受欢迎的是 redis-py。这是一个 Python 客户端库&#xff0c;提供了与 Redis 数据库进行通信的丰富功能。 Python操作Redis操作步骤 安装 redis-py 使用 pip 安装 redis-py&#xff1a; p…...

GPT国内能用吗

2022年11月&#xff0c;Open AI发布ChatGPT&#xff0c;ChatGPT展现了大型语模型在自然语言处理方面的惊人进步&#xff0c;其生成文本的流畅度和连贯性令人印象深刻&#xff0c;为AI应用打开了新的可能性。 ChatGPT的出现推动了AI技术在各个领域的应用&#xff0c;例如&#x…...

中科亿海微-CL1656功能验证开发板

I. 引言 A. 研究背景与意义 CL1656是一款精度高、功耗低、成本低的5V单片低功耗运放&#xff0c;由核心互联公司研发制造&#xff0c;CL1656 是一个 16-bit、快速、低功耗逐次逼近型 ADC&#xff0c;吞吐速率高达 250 kSPS&#xff0c;并且内置低噪声、宽 带宽采样保持放大器。…...

学习STM32第十五天

SPI外设 一、简介 STM32F4XX内部集成硬件SPI收发电路&#xff0c;可以由硬件自动执行时钟生成、数据收发等功能&#xff0c;减轻CPU负担&#xff0c;可配置8位/16位数据帧&#xff0c;高位&#xff08;最常用&#xff09;/低位先行&#xff0c;三组SPI接口&#xff0c;支持DMA…...

【面试题】MySQL 事务的四大特性说一下?

事务是一个或多个 SQL 语句组成的一个执行单元&#xff0c;这些 SQL 语句要么全部执行成功&#xff0c;要么全部不执行&#xff0c;不会出现部分执行的情况。事务是数据库管理系统执行过程中的一个逻辑单位&#xff0c;由一个有限的数据库操作序列构成。 事务的主要作用是保证数…...

案例实践 | InterMat:基于长安链的材料数据发现与共享系统

案例名称&#xff1a;InterMat-基于区块链的材料数据发现与共享系统 ■ 建设单位 北京钢研新材科技有限公司 ■ 用户群体 材料数据上下游单位 ■ 应用成效 已建设10共识节点、50轻节点&#xff0c;1万注册用户 案例背景 材料是构成各种装备和工程的物质载体&#xff0c…...

【数据挖掘】实验8:分类与预测建模

实验8&#xff1a;分类与预测建模 一&#xff1a;实验目的与要求 1&#xff1a;学习和掌握回归分析、决策树、人工神经网络、KNN算法、朴素贝叶斯分类等机器学习算法在R语言中的应用。 2&#xff1a;了解其他分类与预测算法函数。 3&#xff1a;学习和掌握分类与预测算法的评…...

go语言并发实战——日志收集系统(三) 利用sarama包连接KafKa实现消息的生产与消费

环境的搭建 Kafka以及相关组件的下载 我们要实现今天的内容&#xff0c;不可避免的要进行对开发环境的配置&#xff0c;Kafka环境的配置比较繁琐&#xff0c;需要配置JDK,Scala,ZoopKeeper和Kafka&#xff0c;这里我们不做赘述&#xff0c;如果大家不知道如何配置环境&#x…...

Go 单元测试之Mysql数据库集成测试

文章目录 一、 sqlmock介绍二、安装三、基本用法四、一个小案例五、Gorm 初始化注意点 一、 sqlmock介绍 sqlmock 是一个用于测试数据库交互的 Go 模拟库。它可以模拟 SQL 查询、插入、更新等操作&#xff0c;并且可以验证 SQL 语句的执行情况&#xff0c;非常适合用于单元测试…...

Prometheus + Grafana 搭建监控仪表盘

目标要求 1、需要展现的仪表盘&#xff1a; SpringBoot或JVM仪表盘 Centos物理机服务器&#xff08;实际为物理分割的虚拟服务器&#xff09;仪表盘 2、展现要求: 探索Prometheus Grafana搭建起来的展示效果&#xff0c;尽可能展示能展示的部分。 一、下载软件包 监控系统核心…...

机器人管理系统的增删查改(Python)

#交互模式 robot ["机器人1","机器人2","机器人3","机器人4"] name input("请输入您的姓名&#xff1a;") print("%s您好欢迎使用机器人管理系统"%(name))while True:print("您可以进行 1.查找 2.修改 3.增…...

【.Net动态Web API】背景与实现原理

&#x1f680;前言 本文是《.Net Core进阶编程课程》教程专栏的导航站&#xff08;点击链接&#xff0c;跳转到专栏主页&#xff0c;欢迎订阅&#xff0c;持续更新…&#xff09; 专栏介绍&#xff1a;通过源码实例来讲解Asp.Net Core进阶知识点&#xff0c;让大家完全掌握每一…...

JS-43-Node.js02-安装Node.js和npm

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;可以让JavaScript实现后端开发&#xff0c;所以&#xff0c;首先在本机安装Node.js环境。 一、安装Node.js 官网&#xff1a;下载 Node.js 默认两个版本的下载&#xff1a; 64位windows系统的LTS(Long Tim…...

设计模式(分类)

目录 设计模式&#xff08;分类&#xff09; 设计模式&#xff08;六大原则&#xff09; 设计模式是软件工程中一种经过验证的、用于解决特定设计问题的通用解决方案。它们是面向对象编程&#xff08;Object-Oriented Programming, OOP&#xff09;实践中提炼出的最佳实…...

请陪伴Kimi和GPT成长

经验的闪光汤圆 但是我想要写实的 你有吗&#xff1f; 岁数大了&#xff0c;希望如何学习新知识呢&#xff1f;又觉得自己哪些能力亟需补强呢&#xff1f; 看论文自然得用Kimi&#xff0c;主要是肝不动了&#xff0c;眼睛也顶不住了。 正好昨天跟专业人士学会了用工作流的办法跟…...

优思学院|ISO45001职业健康安全管理体系是什么?

ISO45001:2018是新公布的国际标准规范&#xff0c;全球备受期待的职业健康与安全国际标准&#xff08;OH&S&#xff09;于2018年公布&#xff0c;并将在全球范围内改变工作场所实践。ISO45001将取代OHSAS18001&#xff0c;成为全球工作场所健康与安全的参考。 ISO45001:201…...

抖去推短视频矩阵系统----源头开发

为什么一直说让企业去做短视频矩阵&#xff1f;而好处就是有更多的流量入口&#xff0c;不同平台或账号之间可以进行资源互换&#xff0c;最终目的就是获客留咨&#xff0c;提单转化。你去看一些做得大的账号&#xff0c;你会发现他们在许多大的平台上&#xff0c;都有自己的账…...

Golang函数重试机制实现

前言 在编写应用程序时&#xff0c;有时候会遇到一些短暂的错误&#xff0c;例如网络请求、服务链接终端失败等&#xff0c;这些错误可能导致函数执行失败。 但是如果稍后执行可能会成功&#xff0c;那么在一些业务场景下就需要重试了&#xff0c;重试的概念很简单&#xff0c…...

OpenClaw:四大使用挑战与破局思路

子玥酱 &#xff08;掘金 / 知乎 / CSDN / 简书 同名&#xff09; 大家好&#xff0c;我是 子玥酱&#xff0c;一名长期深耕在一线的前端程序媛 &#x1f469;‍&#x1f4bb;。曾就职于多家知名互联网大厂&#xff0c;目前在某国企负责前端软件研发相关工作&#xff0c;主要聚…...

告别重复代码:BaseMapperPlus在SpringBoot项目中的5个高级用法

BaseMapperPlus实战&#xff1a;SpringBoot项目中提升开发效率的5个高阶技巧 在SpringBoot项目中使用MyBatis-Plus进行数据持久层开发时&#xff0c;BaseMapperPlus作为社区广泛采用的扩展接口&#xff0c;能显著减少模板代码。本文将分享五个实际业务场景中的高阶用法&#xf…...

手把手教你用Whistle给SSE/流式接口做Mock:从复制URL到完整响应的保姆级配置

从零构建SSE接口Mock环境&#xff1a;Whistle流式数据模拟实战指南 当你在开发一个实时聊天应用或AI对话界面时&#xff0c;Server-Sent Events (SSE)技术能提供持续的数据流&#xff0c;但测试环境的搭建往往令人头疼。想象一下&#xff0c;你的前端代码需要处理/api/chat这样…...

UE5 RPG开发实战:用接口轻松搞定鼠标悬停敌人描边(含完整蓝图与C++代码)

UE5 RPG开发实战&#xff1a;用接口实现敌人悬停描边的高效方案 在动作角色扮演游戏&#xff08;ARPG&#xff09;开发中&#xff0c;清晰的交互反馈是提升玩家体验的关键环节。当玩家将鼠标悬停在敌人身上时&#xff0c;如何直观地标识当前选中的目标&#xff1f;本文将深入探…...

5分钟完成专业级黑苹果配置:OpCore Simplify终极简化指南

5分钟完成专业级黑苹果配置&#xff1a;OpCore Simplify终极简化指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾经为黑苹果配置的复杂性…...

保研党必看:用本科论文逆袭IEEE二区期刊的5个关键操作(含时间管理秘籍)

保研党必看&#xff1a;用本科论文逆袭IEEE二区期刊的5个关键操作&#xff08;含时间管理秘籍&#xff09; 在保研竞争日益激烈的当下&#xff0c;一篇高质量的学术论文往往能成为决定成败的关键。对于大多数本科生来说&#xff0c;科研经历有限、资源匮乏是普遍面临的困境。但…...

从零到一:基于GitHub Pages与Jekyll搭建你的专属学术主页

1. 为什么选择GitHub Pages Jekyll搭建学术主页&#xff1f; 作为一个长期在学术界摸爬滚打的老兵&#xff0c;我见过太多同行花大价钱购买服务器和维护网站&#xff0c;结果最后因为各种技术问题半途而废。直到我发现GitHub Pages和Jekyll这对黄金组合&#xff0c;才真正找到…...

腾讯游戏卡顿终极解决方案:ACE-Guard资源限制器完整指南

腾讯游戏卡顿终极解决方案&#xff1a;ACE-Guard资源限制器完整指南 【免费下载链接】sguard_limit 限制ACE-Guard Client EXE占用系统资源&#xff0c;支持各种腾讯游戏 项目地址: https://gitcode.com/gh_mirrors/sg/sguard_limit 你是否在玩《地下城与勇士》、《英雄…...

KiCanvas:浏览器中的KiCAD设计查看器,5分钟快速入门指南

KiCanvas&#xff1a;浏览器中的KiCAD设计查看器&#xff0c;5分钟快速入门指南 【免费下载链接】kicanvas The KiCAD web viewer 项目地址: https://gitcode.com/gh_mirrors/ki/kicanvas 想要在浏览器中直接查看KiCAD电路设计文件&#xff0c;无需安装任何软件&#xf…...

nRF51822 RTC1深度睡眠唤醒与80μA低功耗优化

1. nRF51822低功耗唤醒系统深度解析&#xff1a;RTC1驱动的深度睡眠唤醒机制与80μA电流优化实践1.1 项目背景与工程痛点定位nRF51_WakeUp项目聚焦于nRF51822 SoC在超低功耗场景下的精准唤醒能力构建&#xff0c;其核心目标是通过RTC1&#xff08;Real-Time Counter 1&#xff…...