我正在尝试将powerpoint演示文稿转换为单独的svg文件(每个幻灯片1个),是否可以通过使用Microsoft Office 2010 PIA来实现?
如果有,那么有关于在Java中使用Microsoft Office 2010 PIA的教程吗?
据我所知没有现成的自动转换器,但我成功地将每张幻灯片在Powerpoint中保存为PDF,然后在Inkscape中打开PDF并保存为SVG。Powerpoint的PDF导出和Inkscape的PDF导入都非常复杂,产生了很好的结果,SVG是Inkscape的原生保存格式,但可能需要在Inkscape中对导入的PDF进行一些调整,以精确地再现原始文件中的某些元素。
我安装了adobeacrobat可能会有不同,但我没有使用"另存为adobepdf"插件,只是使用普通的"另存为"对话框。使用另存为adobepdf产生较差的结果。
我更成功地导出了增强的Windows元文件(.emf), Inkscape也可以读取。
它"更好",因为当我试图导入导出的PDF时,Inkscape生成了一堆图像文件。导入的SVG的XML看起来也更清晰了。
我知道这是一个老问题,但我最近尝试这样做,并找到了一个解决方案,使用谷歌幻灯片工作得很好:
- 上传ppt到Google Drive,然后点击
Open in Google Slides
, OR - 创建一个新的Google Slides演示文稿,然后单击
File -> Import Slides...
并拉入所需的幻灯片。 -
File -> Download as -> Scalable Vector Graphics (.svg, current slide)
.
我是这样做的(没有Office PIA)。
- 运行宏将PPTX拆分为演示文稿中的幻灯片一样多的PDF文件。
- 使用inkscape将每个PDF转换为SVG
VBA宏
Sub ExportAllSlidesInPDF()
Dim SourceView, answer As Integer
Dim SourceSlides, NumPres, x As Long
Dim ThisSlideFileNamePDF As String
NumPres = Presentations.Count
If NumPres = 0 Then
MsgBox "No Presentation Open", vbCritical, vbOKOnly, "No Presentations Open"
End If
SourceView = ActiveWindow.ViewType
SourceSlides = ActivePresentation.Slides.Count
For x = 1 To SourceSlides
Presentations.Add
With ActivePresentation.PageSetup
.SlideHeight = Presentations(1).PageSetup.SlideHeight
.SlideWidth = Presentations(1).PageSetup.SlideWidth
End With
If ActiveWindow.ViewType <> ppViewSlide Then
ActiveWindow.ViewType = ppViewSlide
End If
Presentations(1).Windows(1).Activate
If ActiveWindow.ViewType <> ppViewSlideSorter Then
ActiveWindow.ViewType = ppViewSlideSorter
End If
ActivePresentation.Slides.Range(Array(x)).Select
ActiveWindow.Selection.Copy
Presentations(2).Windows(1).Activate
If ActiveWindow.ViewType <> ppViewSlide Then
ActiveWindow.ViewType = ppViewSlide
End If
ActiveWindow.View.Paste
ActiveWindow.Selection.Unselect
ThisSlideFileNamePDF = "Slide_" & x & ".pdf"
ActivePresentation.SaveAs ThisSlideFileNamePDF, ppSaveAsPDF
ActivePresentation.Close
Presentations(1).Windows(1).Activate
Next x
ActiveWindow.ViewType = SourceView
End Sub
这是可以改进的(例如,对话框,更多的控件,添加为一个插件),但这里是原则上的。
<<h2> inkscape一步/h2>Linux操作系统的单行代码:
for file in *.pdf; do inkscape --without-gui "--file=$file" "--export-plain-svg=${file%%.*}.svg"; done
这将是相当困难的,没有直接的方法来做到这一点(请纠正我,如果我错了!)-最简单的方法是打印到XPS,然后将XAML (XPS == XAML + Zip文件)转换为SVG文件;这既不容易也不直接,但是XAML => SVG之间的映射可能要接近得多。
这不是最流畅的翻译,但可以查看docx4j的pptx4j组件,以SVG呈现大多数项目:http://dev.plutext.org/svn/docx4j/trunk/docx4j/src/pptx4j/java/org/pptx4j/samples/RenderAsSvgInHtml.java
在Mac OSX上,它没有被优化为从命令行使用[1],所以你需要为你的文件添加一个绝对路径:
for file in *.pdf; do inkscape --without-gui "--file=${PWD}/${file}" "--export-plain-svg=${PWD}/${file%%.*}.svg"; done
否则你会得到这个错误信息:
**消息:无法打开PDF文件。
** (inkscape-bin:13267):警告**:无法打开文件:myfile.pdf(不存在)
** (inkscape-bin:13267):警告**:指定的文档myfile.pdf无法打开(不存在或不是有效的SVG文件)
[1] Inkscape在OSX上无法通过终端命令打开PDF文件