医疗影像工具LEADTOOLS 入门教程: 从 PDF 中提取附件 - 控制台 C#

news2025/7/28 4:31:49

LEADTOOLS 是一个综合工具包的集合,用于将识别、文档、医疗、成像和多媒体技术整合到桌面、服务器、平板电脑、网络和移动解决方案中,是一项企业级文档自动化解决方案,有捕捉,OCR,OMR,表单识别和处理,PDF,打印捕获,归档,注释和显示功能。利用业界领先的图像处理技术,能够智能识别文件,可以用来识别任何类型的扫描或传真形式的图像。

LEADTOOLS 最新下载(qun:731259648)icon-default.png?t=N176https://www.evget.com/product/782/download

本教程介绍如何使用 LEADTOOLS SDK 在 C# Windows 控制台应用程序中提取包含在 PDF 文件中的附件。

概括本教程介绍如何在 C# Windows 控制台应用程序中提取 PDF 附件并将它们转换为 PNG 文件。
完成时间30分钟
视觉工作室项目下载教程项目 (3 KB)
平台C# Windows 控制台应用程序
集成开发环境视觉工作室 2017、2019
开发许可LEADTOOLS
用另一种语言试试
  • C#:. NET Framework(控制台),. NET 6+
  • 爪哇:

所需知识

在学习从 PDF 中提取附件 - 控制台 C#教程之前,通过查看添加引用和设置许可证教程熟悉创建项目的基本步骤。

创建项目并添加 LEADTOOLS 引用

从添加引用和设置许可证教程中创建的项目副本开始。如果您没有该项目,请按照该教程中的步骤创建它。

所需的参考取决于项目的目的。可以通过以下两种方法之一(但不能同时使用)添加引用。

如果使用 NuGet 引用,本教程需要以下 NuGet 包:

  • Leadtools.Document.Sdk

如果使用本地 DLL 引用,则需要以下 DLL。

DLL 位于<INSTALL_DIR>\LEADTOOLS22\Bin\Dotnet4\x64:

  • Leadtools.dll
  • Leadtools.Caching.dll
  • Leadtools.Codecs.dll
  • Leadtools.Codecs.Cmp.dll
  • Leadtools.Codecs.Png.dll
  • Leadtools.Document.dll
  • Leadtools.Document.Converter.dll
  • Leadtools.Document.Pdf.dll
  • Leadtools.Document.Raster.dll
  • Leadtools.Document.Writer.dll
  • Leadtools.Pdf.dll

有关您的应用程序需要哪些 DLL 文件的完整列表,请参阅要包含在您的应用程序中的文件。

设置许可证文件

许可证解锁项目所需的功能。它必须在调用任何工具包函数之前设置。有关详细信息,包括针对不同平台的教程,请参阅设置运行时许可证。

有两种类型的运行时许可证:

  • 评估许可证,在下载评估工具包时获得。它允许评估工具包。
  • 部署许可证。如果需要部署许可证文件和开发人员密钥,请参阅获取许可证。

笔记

添加 LEADTOOLS NuGet 和本地引用以及设置许可证在添加引用和设置许可证教程中有更详细的介绍。

添加PDF附件提取和转换代码

创建项目、添加参考和设置许可证后,就可以开始编码了。

在解决方案资源管理器中,打开Program.cs。将以下语句添加到顶部的 using 块中Program.cs:

[C#]

using System; 
using System.Collections.Generic; 
using System.IO; 
using Leadtools; 
using Leadtools.Caching; 
using Leadtools.Codecs; 
using Leadtools.Document; 
using Leadtools.Document.Converter; 
using Leadtools.Document.Writer; 

将以下全局变量添加到类中Program。

[C#]

static FileCache cache; 
static string OutputDir = "Output"; 

Program.cs在named中创建一个新方法ExtractPDFAttachments()。在set license调用下调用方法中的方法Main(),如下图。

[C#]

static void Main(string[] args) 
{ 
    try 
    { 
        SetLicense(); 
        ExtractPDFAttachments(); 
    } 
    catch (Exception ex) 
    { 
        Console.WriteLine(ex.ToString()); 
    } 
    Console.WriteLine("Press any key to exit..."); 
    Console.ReadKey(true); 
} 

将下面的代码添加到ExtractPDFAttachments()方法中以从给定的 PDF 中提取附件。

static void ExtractPDFAttachments() 
{ 
    cache = new FileCache { CacheDirectory = "\\cache" }; 
 
    List<LEADDocument> documents = new List<LEADDocument>(); 
 
    if (!Directory.Exists(OutputDir)) 
        Directory.CreateDirectory(OutputDir); 
 
    LoadDocumentOptions options = new LoadDocumentOptions 
    { 
        Cache = cache, 
        LoadAttachmentsMode = DocumentLoadAttachmentsMode.AsAttachments 
    }; 
 
    LEADDocument document = DocumentFactory.LoadFromFile(@"FILE PATH TO PDF WITH ATTACHMENTS", options); 
 
    if (document.Pages.Count > 0) 
        documents.Add(document); 
 
    foreach (DocumentAttachment attachment in document.Attachments) 
    { 
        LoadAttachmentOptions attachmentOptions = new LoadAttachmentOptions { AttachmentNumber = attachment.AttachmentNumber, }; 
        LEADDocument loadDocument = document.LoadDocumentAttachment(attachmentOptions); 
        documents.Add(loadDocument); 
    } 
 
    ConvertDocuments(documents, RasterImageFormat.Png); 
} 

在Program类中,添加一个名为 的新方法ConvertDocuments(IEnumerable<LEADDocument> documents, RasterImageFormat imageFormat)。该方法将在方法内部调用ExtractPDFAttachments(),如上所示。将下面的代码添加到ConvertDocuments()将 PDF 附件转换为 PNG 文件的方法中。

static void ConvertDocuments(IEnumerable<LEADDocument> documents, RasterImageFormat imageFormat) 
{ 
    DocumentConverter converter = new DocumentConverter(); 
 
    foreach (LEADDocument document in documents) 
    { 
        string name = string.IsNullOrEmpty(document.Name) ? "DocumentAttachment" : document.Name; 
        string outputFile = Path.Combine(OutputDir, $"{name}.{RasterCodecs.GetExtension(imageFormat)}"); 
        int count = 1; 
        while (File.Exists(outputFile)) 
            outputFile = Path.Combine(OutputDir, $"{name}({count++}).{RasterCodecs.GetExtension(imageFormat)}"); 
 
        DocumentConverterJobData jobData = new DocumentConverterJobData 
        { 
            Document = document, 
            Cache = cache, 
            DocumentFormat = DocumentFormat.User, 
            RasterImageFormat = imageFormat, 
            RasterImageBitsPerPixel = 0, 
            OutputDocumentFileName = outputFile, 
        }; 
        DocumentConverterJob job = converter.Jobs.CreateJob(jobData); 
        converter.Jobs.RunJob(job); 
 
        if (job.Errors.Count > 0) 
            foreach (var error in job.Errors) 
                Console.WriteLine($"Error during conversion: {error.Error.Message}\n"); 
        else 
            Console.WriteLine($"Successfully Converted to {outputFile}...\n"); 
    } 
} 

运行项目

按F5或选择Debug -> Start Debugging运行项目。

如果正确执行了这些步骤,应用程序将运行并将给定 PDF 文件中的所有附件转换为单独的 PNG 文件。

以上便是从 PDF 中提取附件 - 控制台 C#,如果您还有其他疑问,欢迎咨询我们或者加入我们官方技术交流群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/368060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ARM平台搭建Python环境

ARM平台搭建Python环境写在最前常见问题1. 主机&#xff08;Ubuntu&#xff09;安装Python3.8.101.1 安装前的准备1.2 Ubuntu安装Python3.8.101.3 Ubuntu配置Python3.8.102. 宿主机&#xff08;AMR&#xff09;安装Python3.8.102.1 主机安装交叉编译工具2.2 交叉编译zlib库2.3 …

简析RE中python的exe文件

0x00. 前置学习 简单了解 python为什么要打包成exe文件&#xff1f;在日常生活中的应用是因为传输源文件以及源代码给他人是需要配置好一定的环境才能进行编译操作&#xff0c;而打包成exe文件就可以跟电脑软件一样打开就可以运行也可以分享给他人。 而对于ctf比赛来说&…

(三十三)大白话MySQL运行时多个事务同时执行是什么场景?

到目前为止&#xff0c;我们已经给大家深入讲解了MySQL的buffer pool机制、redo log机制和undo log机制&#xff0c;相信大家现在对我们平时执行一些增删改语句的实现原理&#xff0c;都有了一定较为深入的理解了&#xff01; 因为平时我们执行增删改的时候&#xff0c;无非就…

Python|Leetcode刷题日寄Part04

Python|Leetcode刷题日寄Part0401&#xff1a;环形链表02&#xff1a;跳跃游戏03&#xff1a;括号生成04&#xff1a;二分查找05&#xff1a;打家劫舍06&#xff1a;搜索旋转排序数组07&#xff1a;Z字形变换08&#xff1a;买卖股票的最佳时机Ⅱ09&#xff1a;最后一个单词的长…

国产蓝牙耳机300左右哪个牌子的好?三百左右蓝牙耳机推荐

现在的蓝牙耳机样式越来越五花八门&#xff0c;各种性能也越来越好。特别是国产蓝牙耳机&#xff0c;近几年的发展十分快速。那么&#xff0c;三百左右哪个牌子的国产蓝牙耳机好&#xff1f;接下来&#xff0c;我来给大家推荐几款三百左右的蓝牙耳机&#xff0c;一起来看看吧。…

Java加密算法:base64,MD5加密,对称加密,非对称加密

目录 Java&#xff1a;密码算法 1、base64加密方式 2、jdk原生api实现MD5 3、使用codec依赖实现MD5加密 4、SHA加密 5、MAC算法加密 6、对称加密 7、非对称加密 Java&#xff1a;密码算法 1、base64加密方式 public class demo {//设置编码格式private static final S…

搜索引擎的6个技巧

今天看了一期seo优化的视频&#xff0c;其中就有这么一篇关于百度搜索的几个小技巧&#xff0c;这里整理出来&#xff0c;分享给大家。不是标题党&#xff0c;真的99%的人都不知道这个6个小技巧。 搜索引擎一般都会有一些高级的搜索技巧&#xff0c;掌握这些技巧之后就可以过滤…

spring的启动过程(二) :springMvc的启动过程

在上一篇文章中&#xff0c;我们详解了spring的启动过程&#xff0c;这一篇介绍spring mvc的启动过程&#xff0c;那么spring和spring mvc有什么联系呢。 1.Spring和SpringMVC是父子容器关系。2.Spring整体框架的核心思想是容器&#xff0c;用来管理bean的生命周期&#xff0c;…

CAN总线开发一本全(3) - 微控制器集成的FlexCAN外设

CAN总线开发一本全&#xff08;3&#xff09; - 微控制器集成的FlexCAN外设 苏勇&#xff0c;2023年2月 文章目录CAN总线开发一本全&#xff08;3&#xff09; - 微控制器集成的FlexCAN外设引言硬件外设模块系统概要总线接口单元 - 寄存器清单数据结构 - 消息缓冲区MB初始化过…

taobao.top.oaid.merge( OAID订单合并 )

&#xffe5;开放平台免费API必须用户授权 基于OAID&#xff08;收件人ID&#xff0c; Open Addressee ID)做订单合并&#xff0c;确保相同收件人信息的订单合并到相同组。 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 请…

win10环境下安装java开发环境安装java

一&#xff1a;环境介绍 安装系统版本&#xff1a;win10 java版本&#xff1a;java SE 17 二&#xff1a;下载Java安装包 官网下载Java安装包&#xff1a;Java Downloads | Oracle 中国 选择需要的Java版本进行下载&#xff0c;如果没有要选择的版本&#xff0c;可以选择最新…

称重传感器差分输入信号隔离转换直流放大变送器0-±10mV/0-±20mV转0-10V/4-20mA

主要特性DIN11 IPO 压力应变桥信号处理系列隔离放大器是一种将差分输入信号隔离放大、转换成按比例输出的直流信号导轨安装变送模块。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等行业。此系列模块内部嵌入了一个高效微功率的电源&#xff0c;向输入端和输出…

(二十九)大白话MySQL直接强行把redo log写入磁盘?

上一讲我们给大家说了一下redo log block这个概念&#xff0c;大家现在都知道平时我们执行完增删改之后&#xff0c;要写入磁盘的redo log&#xff0c;其实应该是先进入到redo log block这个数据结构里去的&#xff0c;然后再进入到磁盘文件里&#xff0c;如下图所示。 那么今天…

三、锁相关知识

文章目录锁的分类可重入锁、不可重入锁乐观锁、悲观锁公平锁、非公平锁互斥锁、共享锁深入synchronized类锁、对象锁synchronized的优化synchronized实现原理synchronized的锁升级重量锁底层ObjectMonitor深入ReentrantLockReentrantLock和synchronized的区别AQS概述加锁流程源…

Flink中遇到的问题

目录 1、提交flink 批处理任务时遇到的问题 2、flink定时任务&#xff0c;mysql连接超时问题 3、yarn 增加并行任务数量配置 4、flink checkpoint 恢复失败 5、flink程序在hadoop集群跑了一段时间莫名挂掉 1、提交flink 批处理任务时遇到的问题 问题描述&#xff1a; …

超详细树状数组讲解(+例题:动态求连续区间和)

树状数组的作用&#xff1a;快速的对数列的一段范围求和快速的修改数列的某一个数为什么要使用树状数组&#xff1a;大家从作用中看到快速求和的时候可能会想到为什么不使用前缀和只需要预处理一下就可以在O(1)的时间复杂度下实行对于数列的一段范围的和但是我们可以得到当我们…

记一次服务器入侵事件的应急响应

0x01 事件背景 8月某日&#xff0c;客户官网被黑&#xff0c;需在特定时间内完成整改。为避免客户业务受到影响&#xff0c;实验室相关人员第一时间展开本次攻击事件的应急处理。 0x02 事件分析 网站源码被篡改&#xff0c;攻击者一定获取到了权限&#xff0c;那么接下来的思…

Linux进程1 - 进程的相关概念

目录 1.进程的概念 2.并行和并发 3.PCB&#xff08;进程控制块&#xff09; 4.进程状态 1.进程的概念 程序&#xff1a;二进制文件&#xff0c;占用的磁盘空间进程&#xff1a;启动的程序所有的数据都在内存中需要占用更多的系统资源cpu,物理内存 2.并行和并发 并发----在…

Spring事物和事务的传播机制

事务的定义&#xff1a;将一组操作封装到一个执行单元&#xff0c;要么全部成功&#xff0c;要么全部失败。 一、Spring中事务的实现 Spring中事务的操作分为两类&#xff1a; 1.编程式事务&#xff08;手动写代码操作事务&#xff09; 2.声明式事务&#xff08;利用注解自动…

2023财年Q4业绩继续下滑,ChatGPT能驱动英伟达重回巅峰吗?

近年来&#xff0c;全球科创风口不断变换&#xff0c;虚拟货币、元宇宙等轮番登场&#xff0c;不少企业匆忙上台又很快谢幕&#xff0c;但在此期间&#xff0c;有些企业扮演淘金潮中“卖水人”的角色&#xff0c;却也能够见证历史且屹立不倒。不过&#xff0c;这并不意味着其可…