热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PDF转图片Ghostscript.NET

PDF转图片Ghostscript.NETpublicstaticvoidConvertPdf2Img(stringinput,stringoutputPath,refList

PDF转图片 Ghostscript.NET

public static void ConvertPdf2Img(string input, string outputPath, ref List<string> output, ref string status)
{GhostscriptJpegDevice dev &#61; new GhostscriptJpegDevice();output &#61; new List<string>();try{using (GhostscriptRasterizer ra &#61; new GhostscriptRasterizer()){ra.Open(input);var cnt &#61; ra.PageCount;for (int pageNumber &#61; 1; pageNumber <&#61; cnt; pageNumber&#43;&#43;){var pageFilePath &#61; Path.Combine(outputPath, Guid.NewGuid().ToString() &#43; ".jpg");var img &#61; ra.GetPage(300, 300, pageNumber);img.Save(pageFilePath, ImageFormat.Jpeg);output.Add(pageFilePath);img.Dispose();}}}catch (Exception ex){status &#61; ex.Message;dev &#61; null/* TODO Change to default(_) if this is not a reference type */;}
}

List<Image> img &#61; new List<Image>();foreach (string str in fileList)img.Add(Image.FromFile(str));

本地运行报错&#xff0c;服务器上不报错&#xff0c;将代码优化一下

//gsdll64.dll拷贝到项目版本
var _lastInstalledVersion &#61; new GhostscriptVersionInfo($"{System.Environment.CurrentDirectory}\\gsdll64.dll");
_rasterizer.Open(inputPdfPath, _lastInstalledVersion, false);

测试时发现PDF文件名是包含中文时&#xff0c;会抛出异常

// PDF转IMG时文件名包含中文
if(Regex.IsMatch(Path.GetFileName(fileName), &#64;"[\u4e00-\u9fa5]"))
{newFilePath &#61; Path.Combine(Path.GetDirectoryName(filePath), Guid.NewGuid().ToString & Path.GetExtension(filePath));File.Copy(oldfilePath, newFilePath);
}

推荐阅读
  • 本文详细介绍了Oracle RMAN中的增量备份机制,重点解析了差异增量和累积增量备份的概念及其在不同Oracle版本中的实现。通过对比两种备份方式的特点,帮助读者选择合适的备份策略。 ... [详细]
  • 本文详细介绍了如何处理Oracle数据库中的ORA-00227错误,即控制文件中检测到损坏块的问题,并提供了具体的解决方案。 ... [详细]
  • iOS 小组件开发指南
    本文详细介绍了iOS小部件(Widget)的开发流程,从环境搭建、证书配置到业务逻辑实现,提供了一系列实用的技术指导与代码示例。 ... [详细]
  • 本文介绍了如何通过创建自定义 XML 文件来修改 Android 中 Spinner 的项样式,包括颜色和大小的调整。 ... [详细]
  • Exploring issues and solutions when defining multiple Faust agents programmatically. ... [详细]
  • 我在尝试将组合框转换为具有自动完成功能时遇到了一个问题,即页面上的列表框也被转换成了自动完成下拉框,而不是保持原有的多选列表框形式。 ... [详细]
  • 2022年4月15日的算法练习题,包括最长公共子序列和线段树的应用。 ... [详细]
  • 构建Python自助式数据查询系统
    在现代数据密集型环境中,业务团队频繁需要从数据库中提取特定信息。为了提高效率并减少IT部门的工作负担,本文探讨了一种利用Python语言实现的自助数据查询工具的设计与实现。 ... [详细]
  • 深入解析mt_allocator内存分配器(二):多线程与单线程场景下的实现
    本文详细介绍了mt_allocator内存分配器在多线程和单线程环境下的实现机制。该分配器以2的幂次方字节为单位分配内存,支持灵活的配置和高效的性能。文章分为内存池特性描述、内存池实现、单线程内存池实现、内存池策略类实现及多线程内存池实现等部分,深入探讨了内存池的初始化、内存分配与回收的具体实现。 ... [详细]
  • 本文介绍了进程的基本概念及其在操作系统中的重要性,探讨了进程与程序的区别,以及如何通过多进程实现并发和并行。文章还详细讲解了Python中的multiprocessing模块,包括Process类的使用方法、进程间的同步与异步调用、阻塞与非阻塞操作,并通过实例演示了进程池的应用。 ... [详细]
  • 深入解析C++ Atomic编程中的内存顺序
    在多线程环境中,为了防止多个线程同时修改同一数据导致的竞争条件,通常会使用内核级同步对象,如事件、互斥锁和信号量等。然而,这些方法往往伴随着高昂的上下文切换成本。本文将探讨如何利用C++11中的原子操作和内存顺序来优化多线程编程,减少不必要的开销。 ... [详细]
  • Java实现实时更新的日期与时间显示
    本文介绍了如何使用Java编程语言来创建一个能够实时更新显示系统当前日期和时间的小程序。通过使用Swing库中的组件和定时器功能,可以实现界面友好且功能强大的时间显示应用。 ... [详细]
  • 本文介绍了一个基本的同步Socket程序,演示了如何实现客户端与服务器之间的简单消息传递。此外,文章还概述了Socket的基本工作流程,并计划在未来探讨同步与异步Socket的区别。 ... [详细]
  • 本文档旨在提供C语言的基础知识概述,涵盖常量、变量、数据类型、控制结构及函数定义等内容。特别强调了常量的不同类型及其在程序中的应用,以及如何正确声明和使用函数。 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
author-avatar
liu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有