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 ...
随机推荐
- 介绍一款能取代 Scrapy 的 Python 爬虫框架 - feapder
1. 前言 大家好,我是安果! 众所周知,Python 最流行的爬虫框架是 Scrapy,它主要用于爬取网站结构性数据 今天推荐一款更加简单.轻量级,且功能强大的爬虫框架:feapder 项目地址: ...
- Java 轻松理解深拷贝与浅拷贝
目录 前言 直接赋值 拷贝 浅拷贝 举例 原理 深拷贝 实现: Serializable 实现深拷贝 总结 前言 本文代码中有用到一些注解,主要是Lombok与junit用于简化代码. 主要是看到一堆 ...
- aws eks上部署 ingress-nginx 加NLB
转载自https://kubernetes.github.io/ingress-nginx/deploy/#aws In AWS we use a Network load balancer (NLB ...
- 【C#】一个Loading窗体载入与销毁的方法
写在前面 Minecraft Command Editor 2跳票了近两年的时间(对不起!!).2021年2月,我重启了MCE项目,并正式命名为Minecraft Command Editor 202 ...
- PE文件加节感染之Win32.Loader.bx.V病毒分析
一.病毒名称:Win32.Loader.bx.V 二.分析工具:IDA 5.5.OllyDebug.StudPE 三.PE文件加节感染病毒简介 PE病毒感染的方式比较多,也比较复杂也比较难分析,下面就 ...
- hdu3622 二分+2sat
题意: 给你N组炸弹,每组2个,让你在这N组里面选取N个放置,要求(1)每组只能也必须选取一个(2)炸弹与炸弹之间的半径相等(3)不能相互炸到对方.求最大的可放置半径. 思路: 二 ...
- 在Android so文件的.init、.init_array上和JNI_OnLoad处下断点
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/54233552 移动端Android安全的发展,催生了各种Android加固的诞生, ...
- hdu3786 Floyd或搜索 水题
题意: 找出直系亲属 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- base标签的作用
base标签可以自定义当前页面的相对路径,不受浏览器当前地址栏的影响,以base标签定义的地址为准 (只对相对路径起作用) <head> <meta charset="UT ...
- ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule
解释:执行docker-compose up -d时出现ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule 原因:防火墙 ...