说明(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. Linux安装ElasticSearch-2.2.0-分词器插件(IK)

    1.在gitpub上搜索elasticsearch-analysis,能够看到所有elasticsearch的分词器: 2.安装IK分词器:https://github.com/medcl/elast ...

  2. VS2017 IDE开发工具选型、安装和使用

    原文地址:https://blog.csdn.net/boonya/article/details/78739500 距离上次使用VS工具已是2年前了,这次准备选择比较新的版本来开发桌面程序了.总的来 ...

  3. Linux引导启动程序 - boot

    主要描述 boot/目录中的三个汇编代码文件,见列表 3-1 所示.正如在前一章中提到的,这三个 文件虽然都是汇编程序,但却使用了两种语法格式.bootsect.s 和 setup.s 采用近似于 I ...

  4. Set up development environment for apps for SharePoint 2013

    SharePoint 2013 support app development pattern.An app for SharePoint is small and isolate applicati ...

  5. SharePoint 2013 启用 以其他用户身份登陆(Sign in as different user)

    习惯于SharePoint 2010的用户会发现,SharePoint 2013默认把  以其他用户身份登陆(Sign in as different user)的选项去掉了,这对于开发人员来说很麻烦 ...

  6. 使用Python3自带工具2to3.py 转换 Python2.x 代码 到Python3

    几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下.为了简化这个转换过程,Python 3自带了一个叫做2to3的实用脚本(Utility Script),这个脚本会 ...

  7. ldconfig命令

    ldconfig是一个动态链接库管理命令 为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfigldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib) ...

  8. css ::selection 的妙用

    1.选中页面文字和元素时的背景颜色 ::selection { background: #25b864; color: #fff; } 2.不能选择页面内容(但可以拖拽内容进行复制.挺好玩的) ::s ...

  9. 常用代码之三:jQuery为按钮绑定事件的代码

    如题,比如有一个按钮:<input type='button' class='btn-text' id ='addHtml' value='新增' /> 为它添加onclick事件的代码: ...

  10. 五分钟读懂UML类图(转)

    平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...