(转载)【Perl】批量word和PPT文档转pdf
2013-05-10 00:00
393 查看
Linux下,可以借助: unoconv # Converter between LibreOffice document formats
来自小西山子【http://www.cnblogs.com/xesam/】
由于linux上处理word和ppt比较麻烦,而且有文件格式专利的问题,所以以下操作全部在Windows下面进行。
首先需要安装Microsoft Save as PDF加载项,官方下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=7
安装成功后可以手工将文档另存为pdf。
需要引用“Win32::OLE”模块
use Win32::OLE; use Win32::OLE::Const 'Microsoft Word'; use Win32::OLE::Const 'Microsoft PowerPoint';
word转pdf:
sub word2pdf{ my $word_file = $_[0]; my $word = CreateObject Win32::OLE 'Word.Application' or die $!; $word->{'Visible'} = 0; my $document = $word->Documents->Open($word_file) || die("Unable to open document ") ; my $pdffile = $word_file.".pdf"; $document->saveas({FileName=>$pdffile,FileFormat=>wdExportFormatPDF}); $document -> close ({SaveChanges=>wdDoNotSaveChanges}); $word->quit(); }
ppt转pdf
sub ppt2pdf{ my $word_file = $_[0]; my $word = CreateObject Win32::OLE 'PowerPoint.Application' or die $!; $word->{'Visible'} = 1; my $document = $word->Presentations->Open($word_file) || die("Unable to open document ") ; my $pdffile = $word_file.".pdf"; $document->saveas($pdffile,32); $document -> close ({SaveChanges=>wdDoNotSaveChanges}); $word->quit(); }
注意事项:
1、PPT转换中如果设置powerpoint不显示,即$word->{'Visible'} = 0,会导致转换失败。
2、如果使用完整的路径,路径名中不能有空格以及“%”等特殊符号,不然无法打开文档。
转换当前文件夹下的文件:
use Cwd; my $dirname = getcwd(); @files = glob "*.doc"; foreach (@files){ print $dirname.'/'.$_, "\n"; word2pdf($dirname.'/'.$_); }
如果要同时转换子文件夹的文件,可以先遍历,然后再转换:
use File::Find; find(sub { word2pdf($File::Find::name) if /\.(doc|docx)/; ppt2pdf($File::Find::name) if /\.(ppt|pptx)/; }, "D:/test");
为了避免多次重复打开word,可以先获取所有需要转换的文档,集中转换:
find(sub { push(@file_word, $File::Find::name) if /\.(doc|docx)/; }, "D:/test"); word2pdf(@file_word); sub deleteSpace{ my $filename = $_[0]; my @temp = split(/\//, $filename); my $filename_without_path = pop(@temp); $filename_without_path =~ s/\s+//g; join('/', @temp).'/'.$filename_without_path; } sub word2pdf{ my @files = @_; my $word = CreateObject Win32::OLE 'Word.Application' or die $!; $word->{'Visible'} = 0; foreach (@files){ my $new_name = deleteSpace($_); rename($_, $new_name); print $new_name, "\n"; my $document = $word->Documents->Open($new_name) || die "can not open document"; my $pdffile = $new_name.".pdf"; $document->saveas({FileName=>$pdffile,FileFormat=>wdExportFormatPDF}); $document -> close ({SaveChanges=>wdDoNotSaveChanges}); } $word->quit(); }
也可以换一种实现,先调用chdir到子目录中,然后在子目录中进行转换,可以避免目录有不合法字符导致的转换失败,不过文件名的不合法字符导致的失败也不可避免,所以以上的各种转换,都需要先提出空格以及特殊字符才行,deleteSpace仅仅替换了空格,还需要改进。
相关文章推荐
- 【Perl】批量word和PPT文档转pdf
- Flex 在线查看word,pdf,ppt等文档
- [转载]分享日志 Word,PDF,PPT,TXT之间的转换方法
- 类似百度文库在线预览文档flash版(支持word、excel、ppt、pdf)+在线预览文档html版
- 类似百度文库在线预览文档flash版(支持word、excel、ppt、pdf)+在线预览文档html版
- 类似百度文库在线预览文档flash版(支持word、excel、ppt、pdf)+在线预览文档html版
- iOS-打开word、ppt、pdf、execl文档方式
- 如何把批量PDF文件转换成PPT文档
- Android实现在线预览office文档(Word,Pdf,excel,PPT.txt等格式)
- android和JS交互,相互调用方法传值。不使用第三方实现原生加载word、ppt、pdf文档
- Word,PDF,PPT,TXT之间的转换方法(转载)
- Java通过OpenOffice将word、ppt、excel、图片、txt文档转换成PDF
- java通过url在线预览Word、excel、ppt、pdf、txt文档中的内容【只获得其中的文字】
- 类似百度文库在线预览文档flash版(支持word、excel、ppt、pdf)+在线预览文档html版
- 转载: Asp.net常见word,excel,ppt,pdf在线预览方案
- 类似百度文库在线预览文档flash版(支持word、excel、ppt、pdf)+在线预览文档html版
- word 2010下,如何批量删除Work的页眉和页脚,然后存为PDF文档
- 类似百度文库在线预览文档flash版(支持word、excel、ppt、pdf)+在线预览文档html版
- ASP.NET Core2集成Office Online Server(OWAS)实现办公文档的在线预览与编辑(支持word\excel\ppt\pdf等格式)
- word ,xls ,ppt文档转换成pdf,swf格式