C# Asp.Net 实现PPT/PDF转成图片(不依赖office)
/// <summary>
/// 将PPT转换为图片
/// </summary>
/// <param name="pptPath"></param>
/// <param name="imgPath"></param>
public static List<string> UploadPptImage(HttpRequestBase request)
{
var imgUrls = new List<string>();
var file = request.Files["ppt_file"];
if (string.IsNullOrEmpty(file.FileName))
{
return new List<string>();
}
var path = AppDomain.CurrentDomain.BaseDirectory + "imagesfromppt/" + file.FileName;
var savepath = AppDomain.CurrentDomain.BaseDirectory + "ppt/"; if (!System.IO.Directory.Exists(path))
{
System.IO.Directory.CreateDirectory(path);
}
if (!System.IO.Directory.Exists(savepath))
{
System.IO.Directory.CreateDirectory(savepath);
}
var filepath = Path.Combine(savepath, file.FileName);
file.SaveAs(filepath);
Microsoft.Office.Interop.PowerPoint.Application application = null;
Presentation persentation = null;
var imagPathList = new List<string>();
try
{
application = new Microsoft.Office.Interop.PowerPoint.Application();
persentation = application.Presentations.Open(filepath);
//persentation.Slides[1].Export(path + "\\page" + 1 + ".jpg", "JPG", 800, 600);
for (var k = 1; k <= persentation.Slides.Count; k++)
{
var imgPath = path + "\\page" + k + ".jpg";
imagPathList.Add(imgPath);
persentation.Slides[k].Export(imgPath, "JPG", 800, 600);
}
imagPathList.ForEach(p =>
{
using (MemoryStream ms = new MemoryStream())
{
using (var fs = new FileStream(p, FileMode.Open))
{
byte[] buffer = new byte[1024];
int result = 0;
while ((result = fs.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, result);
}
}
ms.Seek(0, SeekOrigin.Begin);
var fileData = ms.ToArray();
string url = ;//此处为云存储,不重要,上传后获得url
imgUrls.Add(url);
}
});
}
catch (Exception ex)
{
//记录异常
}
finally
{
if (persentation != null)
{
persentation.Close();
persentation = null;
}
if (application != null)
{
application.Quit();
application = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
imagPathList.ForEach(p =>
{
if (File.Exists(p))
{
File.Delete(p);
}
});
if (File.Exists(filepath))
{
File.Delete(filepath);
}
if (Directory.Exists(path))
{
Directory.Delete(path);
}
}
return imgUrls;
}
/// <summary>
/// 将PPT转换为图片
/// </summary>
/// <param name="pptPath"></param>
/// <param name="imgPath"></param>
public static List<string> UploadPptImage(HttpRequestBase request)
{
var imgUrls = new List<string>();
var file = request.Files["ppt_file"];
if (string.IsNullOrEmpty(file.FileName))
{
return new List<string>();
}
Presentation ppt = new Presentation();
ppt.LoadFromStream(file.InputStream, FileFormat.Auto);
var slidescount = ppt.Slides.Count;
try
{
if (slidescount > 0)
{
for (int i = 0; i < slidescount; i++)
{
ppt.Slides[i].SaveAsImage();//把ppt转换成emf格式图片
Image image = ppt.Slides[i].SaveAsImage();
using (var ms = new MemoryStream())
{
image.Save(ms, ImageFormat.Png);
ms.Seek(0, SeekOrigin.Begin);
var fileData = ms.ToArray();
string url = ;//云存储,返回url
imgUrls.Add(url);
}
}
}
}
catch (Exception ex)
{
//记录异常
}
return imgUrls;
}
1、O2S.Components.PDFRender4NET.dll
2、Acrobat.dll
3. PDFLibNet.dll
4. Ghostscript
/// <summary>
/// 将PPT转换为图片
/// </summary>
/// <param name="pptPath"></param>
/// <param name="imgPath"></param>
public static List<string> UploadPptImage(HttpRequestBase request)
{
var imgUrls = new List<string>();
var file = request.Files["ppt_file"];
if (string.IsNullOrEmpty(file.FileName))
{
return new List<string>();
}
Presentation ppt = new Presentation(file.InputStream); using (var mspdf = new MemoryStream())
{
var pageCount = ppt.Slides.Count;
ppt.Save(mspdf, Aspose.Slides.Export.SaveFormat.Pdf); using (var pdf = PdfDocument.Load(mspdf))
{
try
{
var pagesizes = pdf.PageSizes;
for (int i = 0; i < pdf.PageCount; i++)
{
Size size = new Size();
size.Height = (int)pagesizes[(i)].Height;
size.Width = (int)pagesizes[(i)].Width;
using (var image = pdf.Render(i, size.Width, size.Height, PdfRenderFlags.Annotations))
{
using (var ms = new MemoryStream())
{
image.Save(ms, ImageFormat.Png);
ms.Seek(0, SeekOrigin.Begin);
var fileData = ms.ToArray();
string url = ;//云存储,返回url
imgUrls.Add(url);
}
}
}
}
catch (Exception ex)
{
//异常记录
}
}
}
return imgUrls;
}
速度还可以,没有水印,不需要存储到服务器,基本都是流操作,完美!!!
C# Asp.Net 实现PPT/PDF转成图片(不依赖office)的更多相关文章
- C#技术分享【PDF转换成图片——13种方案】(2013-07-25重新整理)
原文:C#技术分享[PDF转换成图片--13种方案](2013-07-25重新整理) 重要说明:本博已迁移到 石佳劼的博客,有疑问请到 文章新地址 留言!!! 写在最前面:为了节约大家时间,撸主把最常 ...
- 【译】在Asp.Net中操作PDF – iTextSharp - 操作图片
原文 [译]在Asp.Net中操作PDF – iTextSharp - 操作图片 作为我的iTextSharp系列的文章的第七篇,开始探索使用iTextSharp在PDF中操作图片,理解本篇文章需要看 ...
- C#技术分享【PDF转换成图片——11种方案】
1.[iTextSharp.dll],C# 开源PDF处理工具,可以任意操作PDF,并可以提取PDF中的文字和图片,但不能直接将PDF转换成图片. DLL和源码 下载地址:http://downloa ...
- 在linux环境下使用icepdf或pdfbox将pdf转化成图片是乱码解决
在linux环境下使用icepdf或pdfbox将pdf转化成图片是出现乱码,网上查发下是itextpdf生成pdf引用"STSong-Light"字体而linux环境下没有这个字 ...
- 【PyMuPDF和pdf2image】Python将PDF转成图片
前言: 在最近的测试中遇到一个与PDF相关的测试需求,其中有一个过程是将PDF转换成图片,然后对图片进行测试. 粗略的试了好几种方式,其中语言尝试了Python和Java,总体而言所找到的Python ...
- WPF 将PPT,Word转成图片
在Office下,PowerPoint可以直接把每张幻灯片转成图片,而Word不能直接保存图片.所以只能通过先转换成xps文件,然后再转成图片. 一.PPT 保存为图片 /// <summary ...
- php 将pdf转成图片且将图片拼接
说明: 1.pdf转图片通过安装php扩展imagick实现. 2.由于windows扩展安装的一系列问题,建议在linux环境开发,windows大伙可以尝试安装. 3.为Centos 安装Imag ...
- Java PDF转换成图片并输出给前台展示
首先需要导入所需工具类 <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>fo ...
- pdf转成图片
http://blog.csdn.net/wydhao123/article/details/51596028 jar commons-logging.jar. pdfbox-2.0.1.jar.fo ...
随机推荐
- Nuget-自定义模板的创建与使用
参考官方文档: https://docs.microsoft.com/zh-cn/dotnet/core/tools/custom-templates https://devblogs.microso ...
- 翻译:《实用的Python编程》InstructorNotes
实用的 Python 编程--讲师说明 作者:戴维·比兹利(David Beazley) 概述 对于如何使用我的课程"实用的 Python 编程"进行教学的问题,本文档提供一些通用 ...
- JavaScript深拷贝与浅拷贝的区别和实现方式
如何区分深拷贝和浅拷贝呢,简单来说对象B拷贝了对象A,如果对象A和对象B共用一个对象,对象B改变对象A跟着改变这就是浅拷贝:但如果对象B拷贝了对象A,但是对象A和对象B是分开的,那么就是深拷贝 基本数 ...
- 一键打造vim ide 支持python golang shell等高级特性
1.vim-for-devops github: https://github.com/yxxhero/vim_for_devops 利用vim插件打造支持python.shell.golang的id ...
- 基于MATLAB的手写公式识别(1)
基于MATLAB的手写公式识别 reason:课程要求以及对MATLAB强大生命力的探索欲望: plan date:2021/3/28-2021/4/12 plan: 进行材料搜集和思路整理: 在已知 ...
- 『动善时』JMeter基础 — 3、JMeter插件管理
JMeter是一个Java开发的开源软件,开源的软件有一个好处,就是会有很多第三方开发出来的插件,使得JMeter在处理某一些功能的时候更加的方便.并且这些插件拿过来就可以使用,完全免费的. 我们安装 ...
- Redis 面试必备知识点
1.Redis 简介 是一个用 C 语言开发的,高性能的键值对数据库. 数据存在于内存,读写速度快. 可用来做缓存.分布式锁.消息队列. 提供多种数据类型来支持不同的业务场景. 支持事务.持久化.Lu ...
- postman传入cookie的三种方式
1.直接在环境变量里面设置 2.在登录接口的tests,把返回值的cookie设置为全局变量 3.直接在cookie里面传入
- Intel汇编语言程序设计学习-第五章 过程-下
5.3.3 库测试程序 测试程序#1:整数I/O 该测试程序把输出文本的颜色改为蓝底黄字,然后以十六进制数显示七个数组的内容,最后提示用户输入一个有符号整数,再分别以十进制.十六进制和二进制格式重复 ...
- 【Unity】实验二 游戏场景搭建
实验要求 实验二 游戏场景搭建 实验目的:掌握游戏场景搭建. 实验要求:能够使用Unity的地形引擎创建地形,熟悉场景中的光照与阴影,掌握天空盒和雾化效果等. 实验内容: 地形的绘制:使用高度图绘制: ...