当前位置: 首页 > 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…...

Go-ldap-admin权限系统解析:基于Casbin的RBAC实现完整指南

Go-ldap-admin权限系统解析&#xff1a;基于Casbin的RBAC实现完整指南 【免费下载链接】go-ldap-admin &#x1f309; 基于GoVue实现的openLDAP后台管理项目 项目地址: https://gitcode.com/gh_mirrors/go/go-ldap-admin Go-ldap-admin作为一款基于GoVue实现的现代化Ope…...

千问 LeetCode 2281.巫师的总力量和 Python3实现

LeetCode 2281. 巫师的总力量和&#xff08;Sum of Total Strength of Wizards&#xff09; 是一道难度较高的题目&#xff0c;核心在于 贡献法 单调栈 前缀和的前缀和&#xff08;prefix sum of prefix sums&#xff09;。下面给出 清晰、高效、符合 Python3 习惯 的实现&am…...

不止于Java:在Termux的Ubuntu子系统里,我这样配置Python/Node.js多语言开发环境

不止于Java&#xff1a;在Termux的Ubuntu子系统里配置Python/Node.js多语言开发环境 将手机变成便携式开发工作站早已不是天方夜谭。通过Termux和proot-distro搭建的Ubuntu子系统&#xff0c;开发者可以在Android设备上构建完整的Linux开发环境。与局限于单一语言的解决方案不同…...

用C8051F单片机自带的12位ADC,实现16位精度的温度测量(附完整代码)

基于C8051F单片机12位ADC实现16位温度测量的工程实践 在嵌入式系统开发中&#xff0c;高精度温度测量往往需要昂贵的16位ADC芯片&#xff0c;但通过合理的算法设计&#xff0c;我们可以利用C8051F系列单片机内置的12位ADC实现等效16位的测量精度。本文将深入探讨过采样技术的实…...

手机主板级维修

在智能手机高度普及的今天&#xff0c;一块主板几乎承载了用户所有的数字生活——从个人照片、工作文档到社交聊天记录。当设备遭遇进水、重摔或系统崩溃时&#xff0c;普通软件扫描往往束手无策&#xff0c;而“手机数据恢复”中的主板级维修技术&#xff0c;正成为破解这类“…...

3dmax动画期末作业全流程分享(附技术细节+避坑指南)

前言&#xff1a;期末将至&#xff0c;相信很多学习3dmax的小伙伴都在为动画期末作业发愁——从创意构思到建模、动画制作&#xff0c;再到渲染输出&#xff0c;每一步都可能遇到各种问题。本次就结合我的期末作业实践&#xff0c;详细分享从前期准备到成品交付的完整流程&…...

终极指南:如何用ChatLaw构建你的免费中文法律AI助手

终极指南&#xff1a;如何用ChatLaw构建你的免费中文法律AI助手 【免费下载链接】ChatLaw ChatLaw&#xff1a;A Powerful LLM Tailored for Chinese Legal. 中文法律大模型 项目地址: https://gitcode.com/gh_mirrors/ch/ChatLaw 面对复杂的法律问题&#xff0c;你是否…...

3步精通UE4SS游戏Mod开发:从注入到实战完全指南

3步精通UE4SS游戏Mod开发&#xff1a;从注入到实战完全指南 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS UE…...

Lumi Diary:基于OpenClaw Skill的本地AI记忆伴侣设计与实践

1. 项目概述&#xff1a;一个住在你设备里的记忆精灵如果你和我一样&#xff0c;对把生活点滴交给云端总有点不放心&#xff0c;但又渴望有一个能懂你、能帮你把碎片记忆编织成故事的伙伴&#xff0c;那么 Lumi Diary 的出现&#xff0c;可能正是时候。这不是又一个需要你手动打…...

告别答辩PPT焦虑:百考通AI如何智能化解你的毕业展示难题

当你终于为论文画上最后一个句号&#xff0c;准备迎接毕业的曙光时&#xff0c;答辩PPT的制作却往往成为压垮学生的最后一根稻草。面对这份看似简单却暗藏玄机的任务&#xff0c;百考通AI为你提供智能解决方案。 深夜&#xff0c;当你的论文最后一个字终于落定&#xff0c;一种…...