说明(2017-7-31 18:30:25):

1. 最主要的是下载到aspose的破解文件,我在这里下载的http://www.lenosoft.net/down/10205.htm,如果不差钱可以买正版,也就一万多。有试用版,不过转换完有水印,水印很大,很大。

2. aspose没有给出直接将PPT转为图片的方法,只能是先将PPT转为PDF,再将PDF转为图片。所以只用到了两个dll文件,Aspose.Slides和Aspose.Pdf。

3. 其实有个网站上有教程,是aspose的中国代理,里面的英文视频教学免费,但中文的收费,还有一些文档是免费的,还是比较厚道的。http://training.evget.com/video/5975

4. 但是总感觉这种方法还是麻烦,虽然aspose号称最大的优势是不用安装office也能操作,但是你既然要做这个功能电脑不装office不是有病?觉得微软应该有一套自己的解决方案,再研究研究,毕竟两个dll拖家带口的也好几十兆,一堆方法用起来也是累。

5. 网上找资料的时候,博客里基本上都是那一篇公司项目里的部分代码,最关键的部分居然封装到他们自己的类里面了,而且没有贴上这个类的代码,这你让我们用个鬼!

6. 我发现自己做一个功能的时候,看到网上博客里长篇大论,总感觉不至于这么难吧?应该很少代码就能实现了,然后就自己写,果然少写不少,难道是我太聪明了?又或许是我代码不够严谨?去他娘的,能用就行!出了事再找问题。

xaml:

<Window x:Class="PPTtoJPG.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="" Width="">
<Grid>
<Button Content="打开" HorizontalAlignment="Left" Height="" Margin="370,64,0,0" VerticalAlignment="Top" Width="" Click="Button_Click"/>
<Button Content="开始转成PDF" HorizontalAlignment="Left" Height="" Margin="48,205,0,0" VerticalAlignment="Top" Width="" Click="Button_Click_1"/>
<Label Content="PPT路径" HorizontalAlignment="Left" Height="" Margin="34,64,0,0" VerticalAlignment="Top" Width=""/>
<TextBox Name="txtBoxPath" HorizontalAlignment="Left" Height="" Margin="129,66,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width=""/>
<Button Content="开始转成图片" HorizontalAlignment="Left" Height="" Margin="307,205,0,0" VerticalAlignment="Top" Width="" Click="Button_Click_2"/> </Grid>
</Window>

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using Aspose.Slides;
using System.Reflection;
using Aspose.Pdf;
using System.Drawing.Imaging;
using System.Drawing;
using Aspose.Pdf.Devices; namespace PPTtoJPG
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
File.Delete("log.txt"); }
private void ShowLog(string log)
{
File.AppendAllText("log.txt", "\r\n" + DateTime.Now.ToString() + ": " + log);
}
private void Button_Click(object sender, RoutedEventArgs e)
{ }
//PPT转成PDF
private void Button_Click_1(object sender, RoutedEventArgs e)
{ //Crack();
string pptPath = txtBoxPath.Text;
if (pptPath != "" && Directory.Exists(pptPath))
{
DirectoryInfo pptInfos = new DirectoryInfo(pptPath); foreach (FileInfo pptInfo in pptInfos.GetFiles("*.ppt*"))
{
//如果已经存在这个pdf就跳过
if (File.Exists(pptInfo.FullName.Split('.')[] + ".pdf"))
{
continue;
}
try
{
Presentation pres = new Presentation(pptInfo.FullName); pres.Save(pptInfo.FullName.Split('.')[] + ".pdf", Aspose.Slides.Export.SaveFormat.Pdf); Console.WriteLine(pptInfo.FullName.Split('.')[] + ".pdf");
}
catch (Exception)
{ //throw;
Console.WriteLine("无法生成" + pptInfo.FullName.Split('.')[] + ".pdf");
ShowLog("无法生成" + pptInfo.FullName.Split('.')[] + ".pdf");
//MessageBox.Show("无法生成" + pptInfo.FullName.Split('.')[0] + ".pdf");
continue;
} }
MessageBox.Show("转换pdf完成!");
}
else
{
MessageBox.Show("路径为空或不存在!");
}
} //PDF转成JPG
private void Button_Click_2(object sender, RoutedEventArgs e)
{
string pdfPath = txtBoxPath.Text;
if (pdfPath != "" && Directory.Exists(pdfPath))
{
DirectoryInfo pdfInfos = new DirectoryInfo(pdfPath); foreach (FileInfo pdfInfo in pdfInfos.GetFiles("*.pdf"))
{ Directory.CreateDirectory(pdfInfo.FullName.Split('.')[]);
//open document
Document pdfDoc = new Document(pdfInfo.FullName);
for (int i = ; i < pdfDoc.Pages.Count; i++)
{
string imgPath = pdfInfo.FullName.Split('.')[] + @"\" + (i + ).ToString() + ".jpg";
using (FileStream imageStream = new FileStream(imgPath, FileMode.Create))
{
//Width, Height, Resolution, Quality
//Quality [0-100], 100 is Maximum
//create Resolution object
//300是分辨率
Resolution resolution = new Resolution();
//默认是3000x2250尺寸,100是画质最高
JpegDevice jpegDevice = new JpegDevice(, , resolution, );
//convert a particular page and save the image to stream
jpegDevice.Process(pdfDoc.Pages[i + ], imageStream);
//close stream
imageStream.Close();
}
}
}
MessageBox.Show("转换图片完成!");
}
else
{
MessageBox.Show("路径为空或不存在!");
}
}
}
}

C#学习笔记(23)——C#将PPT批量转为JPG(aspose方法)的更多相关文章

  1. Ext.Net学习笔记23:Ext.Net TabPanel用法详解

    Ext.Net学习笔记23:Ext.Net TabPanel用法详解 上面的图片中给出了TabPanel的一个效果图,我们来看一下代码: <ext:TabPanel runat="se ...

  2. C#数字图像处理算法学习笔记(一)--C#图像处理的3中方法

    C#数字图像处理算法学习笔记(一)--C#图像处理的3中方法 Bitmap类:此类封装了GDI+中的一个位图,次位图有图形图像及其属性的像素数据组成.因此此类是用于处理像素数据定义的图形的对象.该类的 ...

  3. [原创]java WEB学习笔记23:MVC案例完整实践(part 4)---模糊查询的设计与实现

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  4. JNI学习笔记_Java调用C —— 非Android中使用的方法

    一.学习笔记 1.java源码中的JNI函数本机方法声明必须使用native修饰. 2.相对反编译 Java 的 class 字节码文件来说,反汇编.so动态库来分析程序的逻辑要复杂得多,为了应用的安 ...

  5. Dynamic CRM 2013学习笔记(十七)JS读写各种类型字段方法及技巧

    我们经常要对表单里各种类型的字段进行读取或赋值,下面列出各种类型的读写方法及注意事项: 1. lookup 类型 清空值 var state = Xrm.Page.getAttribute(" ...

  6. Dynamic CRM 2013学习笔记(二十七)无代码 复制/克隆方法

    前面介绍过二种复制/克隆方法:<Dynamic CRM 2013学习笔记(十四)复制/克隆记录> 和<Dynamic CRM 2013学习笔记(二十五)JS调用web service ...

  7. C#学习笔记(24)——C#将PPT批量转为JPG(最简单的方法)

    说明(2017-8-1 11:15:46): 1. 哈哈,我就说微软肯定有自己的办法,把PPT转成图片. 2. 主要是要引入两个微软自己的程序集,vs里自带直接添加引用,注意一下版本,12.0是off ...

  8. Linux下汇编语言学习笔记23 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  9. struts2学习笔记--上传单个和批量文件示例

    struts2提供了对上传文件的支持,将上传后的文件封装为java.io.File对象,开发者只需要在Action中定义一个File类型的变量,然后直接使用该变量,将它复制到目的目录即可. 单个文件上 ...

随机推荐

  1. 问题 “No mapping found for HTTP request with URI [/fileupload/upload.do]” 的解决

    是因为自己springmvc的配置文件里面不小心删除掉了 <!-- 注解扫描 扫描该包下的注解--> <context:component-scan base-package=&qu ...

  2. JQuery UI - draggable(转)

    ·概述 在任何DOM元素启用拖动功能.通过单击鼠标并拖动对象在窗口内的任何地方移动. 官方示例地址:http://jqueryui.com/demos/draggable/ 所有的事件回调函数都有两个 ...

  3. 【Hibernate】数据Session对象的常规操作收集

    因为Hibernate是ORM(对象关系映射)的,所以程序员是不需要写Sql语句的.所有的操作都是通过对对象的操作. 1,原生Session 事务管理 Transaction tx = session ...

  4. JSON-handle-好玩的google插件

    一:前言 现在的主要工作是写后台的接口服务,而JSON这种数据格式的数据是最为常用的,经常使用在线的格式化工具,来检查或者编写对应的数据,感觉不够智能,于是试验了一下几个插件,感觉有些挺好用的,在此记 ...

  5. 【C语言】练习2-1

     题目来源:<The C programming language>中的习题P27  练习2-1: 编写一个程序以确定分别由signed及unsigned限定的char.short.int ...

  6. Oracle 12C -- 扩展varchar2、nvarchar2、和raw数据类型的大小限制

    在12C中,varchar2,nvarchar2和raw类型从之前的4K扩展到32K 升级到12C后,参数max_string_size默认值是standard,即不改变varchar2.nvarch ...

  7. js中为什么你不敢用 “==”

    文章引用:http://0313.name/archives/480 前言 类型转换在各个语言中都存在,而在 JavaScript 中由于缺乏对其的了解而不慎在使用中经常造成bug被人诟病.为了避免某 ...

  8. python标准库介绍——34 commands 模块详解

    ==commands 模块== (只用于 Unix) ``commands`` 模块包含一些用于执行外部命令的函数. [Example 3-7 #eg-3-7] 展示了这个模块. ====Exampl ...

  9. C#基础第八天-作业-设计类-面向对象方式实现两个帐户之间转账

    要求1:完成以下两种账户类型的编码.银行的客户分为两大类:储蓄账户(SavingAccount)和信用账户(CreditAccount),两种的账户类型的区别在于:储蓄账户不允许透支,而信用账户可以透 ...

  10. postman发送post数据到node.js中

    使用get请求我们很容易的来利用postman来发送数据,但是今天的express在使用postman进行post请求的时候,竟然解析的body是空对象.在网上找了一下果然有解决方法,如下: 因为是P ...