Bagaimana saya bisa secara otomatis mengonversi PowerPoint ke PDF?

5

Saya perlu mengonversi file .ppt / .pptx ke file .pdf (atau gambar) melalui baris perintah menggunakan produk pihak ke-3.

Saya menggunakan ini untuk server Windows 2008 dan saya tidak bisa menggunakan GUI atau situs web apa pun karena ini perlu proses otomatis.

Saya sudah mencoba libreoffice, tetapi memiliki masalah mengkonversi seni pintar.

EDIT: Solusi terakhir saya adalah menggunakan powerpoint interop dengan C # . Lihat juga: https://stackoverflow.com/questions/26372020/how-to-programmatically-create-a-powerpoint-from-a-list-of-images

Houseman
sumber
1
OS apa yang Anda gunakan? Adakah alasan khusus mengapa Anda perlu mengonversinya menggunakan baris perintah?
Gryphoenix
@Gryphoenix Windows server 2008. Perlu proses otomatis yang dapat saya hubungi dengan kode. Itu sebabnya.
Houseman
1
Sepertinya tidak ada fungsi asli untuk melakukan konversi ini melalui baris perintah tetapi ada banyak produk pihak ke-3 yang memiliki fungsi ini.
Gryphoenix
1
Sudahkah Anda mempertimbangkan untuk menggunakan salinan MS Office 2010 dan otomatisasi (melalui kode Anda)? Rekomendasi produk di luar topik.
Ƭᴇcʜιᴇ007
1
Lihat posting ini: superuser.com/questions/614992/…
Josh

Jawaban:

7

Tidak diperlukan produk pihak ketiga. Seperti yang telah Anda catat, PowerPoint dapat mengekspor presentasi sebagai PDF. Dengan penerapan skrip kecil, Anda dapat mencapai hasil Anda. Saya telah menyiapkan Script VB di bawah ini. Cukup buat file dengan nama yang berakhiran ".vbs", rekatkan kode di bawah ini.

Menggunakan:

 CSCRIPT ppt.vbs "input file name" "output file name"

Penting untuk diperhatikan:

  • Jika nama berisi spasi, mereka harus dikutip.
  • Jika Anda tidak menentukan jalur untuk file output, PowerPoint akan memasukkannya folder dokumen Anda.

Saya telah menyertakan tautan sebaris untuk referensi ke berbagai bit.

Option Explicit

Sub WriteLine ( strLine )
    WScript.Stdout.WriteLine strLine
End Sub

' http://msdn.microsoft.com/en-us/library/office/aa432714(v=office.12).aspx
Const msoFalse = 0   ' False.
Const msoTrue = -1   ' True.

' http://msdn.microsoft.com/en-us/library/office/bb265636(v=office.12).aspx
Const ppFixedFormatIntentScreen = 1 ' Intent is to view exported file on screen.
Const ppFixedFormatIntentPrint = 2  ' Intent is to print exported file.

' http://msdn.microsoft.com/en-us/library/office/ff746754.aspx
Const ppFixedFormatTypeXPS = 1  ' XPS format
Const ppFixedFormatTypePDF = 2  ' PDF format

' http://msdn.microsoft.com/en-us/library/office/ff744564.aspx
Const ppPrintHandoutVerticalFirst = 1   ' Slides are ordered vertically, with the first slide in the upper-left corner and the second slide below it.
Const ppPrintHandoutHorizontalFirst = 2 ' Slides are ordered horizontally, with the first slide in the upper-left corner and the second slide to the right of it.

' http://msdn.microsoft.com/en-us/library/office/ff744185.aspx
Const ppPrintOutputSlides = 1               ' Slides
Const ppPrintOutputTwoSlideHandouts = 2     ' Two Slide Handouts
Const ppPrintOutputThreeSlideHandouts = 3   ' Three Slide Handouts
Const ppPrintOutputSixSlideHandouts = 4     ' Six Slide Handouts
Const ppPrintOutputNotesPages = 5           ' Notes Pages
Const ppPrintOutputOutline = 6              ' Outline
Const ppPrintOutputBuildSlides = 7          ' Build Slides
Const ppPrintOutputFourSlideHandouts = 8    ' Four Slide Handouts
Const ppPrintOutputNineSlideHandouts = 9    ' Nine Slide Handouts
Const ppPrintOutputOneSlideHandouts = 10    ' Single Slide Handouts

' http://msdn.microsoft.com/en-us/library/office/ff745585.aspx
Const ppPrintAll = 1            ' Print all slides in the presentation.
Const ppPrintSelection = 2      ' Print a selection of slides.
Const ppPrintCurrent = 3        ' Print the current slide from the presentation.
Const ppPrintSlideRange = 4     ' Print a range of slides.
Const ppPrintNamedSlideShow = 5 ' Print a named slideshow.

' http://msdn.microsoft.com/en-us/library/office/ff744228.aspx
Const ppShowAll = 1             ' Show all.
Const ppShowNamedSlideShow = 3  ' Show named slideshow.
Const ppShowSlideRange = 2      ' Show slide range.

'
' This is the actual script
'

Dim inputFile
Dim outputFile
Dim objPPT
Dim objPresentation
Dim objPrintOptions
Dim objFso

If WScript.Arguments.Count <> 2 Then
    WriteLine "You need to specify input and output files."
    WScript.Quit
End If

inputFile = WScript.Arguments(0)
outputFile = WScript.Arguments(1)

Set objFso = CreateObject("Scripting.FileSystemObject")

If Not objFso.FileExists( inputFile ) Then
    WriteLine "Unable to find your input file " & inputFile
    WScript.Quit
End If

If objFso.FileExists( outputFile ) Then
    WriteLine "Your output file (' & outputFile & ') already exists!"
    WScript.Quit
End If

WriteLine "Input File:  " & inputFile
WriteLine "Output File: " & outputFile

Set objPPT = CreateObject( "PowerPoint.Application" )

objPPT.Visible = True
objPPT.Presentations.Open inputFile

Set objPresentation = objPPT.ActivePresentation
Set objPrintOptions = objPresentation.PrintOptions

objPrintOptions.Ranges.Add 1,objPresentation.Slides.Count
objPrintOptions.RangeType = ppShowAll

' Reference for this at http://msdn.microsoft.com/en-us/library/office/ff746080.aspx
objPresentation.ExportAsFixedFormat outputFile, ppFixedFormatTypePDF, ppFixedFormatIntentScreen, msoTrue, ppPrintHandoutHorizontalFirst, ppPrintOutputSlides, msoFalse, objPrintOptions.Ranges(1), ppPrintAll, "Slideshow Name", False, False, False, False, False

objPresentation.Close
ObjPPT.Quit
BillP3rd
sumber
Terima kasih. Saya baru saja akan menulis sesuatu seperti ini, kecuali dalam C #. Satu-satunya downside, adalah bahwa jendela Powerpoint muncul selama satu atau dua detik. Saya mencoba pengaturan objPPT.Visible untuk False, tetapi ternyata salah dan memberi tahu saya bahwa itu tidak diizinkan.
Houseman
Proses ini akan dilakukan di server. Saya membayangkan bahwa akan sangat menghabiskan sumber daya untuk benar-benar membuka PowerPoint setiap kali sebuah file harus dikonversi. Apakah ada cara untuk tidak melakukan itu?
Houseman
@Houseman Anda dapat menghindari meluncurkan dan menutup PowerPoint berulang kali dengan memodifikasi skrip, tetapi setiap file harus dibuka dan ditutup.
iBug
Apakah mungkin untuk mengadaptasi ini agar berfungsi dengan kata?
Marcel
3

Anda dapat mencetak ke driver printer PDF seperti Adobe Distiller, atau salah satu dari banyak driver opensource yang lebih murah atau bahkan di luar sana.

Rod MacPherson
sumber
Halaman resmi Adobe Distiller tidak mengatakan apa pun tentang mengonversi file powerpoint ke file .pdf.
Houseman
2
Ini adalah driver cetak, apa pun yang dapat Anda cetak dapat Anda buat menjadi PDF.
Rod MacPherson
2
Bagaimana Anda menjalankan PowerPoint untuk mencetak ke driver cetak Adobe Distiller secara otomatis?
Sun
1
gunakan opsi / pt dari baris perintah untuk mencetak dan menentukan printer mana. officeone.mvps.org/pptfaq/ppt_cmdline.html Menetapkan standar dokumen dalam penyuling akan membuat Anda melewati pop-up opsi cetak GUI.
Rod MacPherson
1
@OWiz Karena Anda sudah memiliki PDFCreator, mari kita fokus pada hal itu. Saya tidak bermaksud merekomendasikan satu pengemudi di atas yang lain, jadi mari kita pergi dengan apa yang Anda miliki. Cobalah untuk mencetak sesuatu ke pencipta PDF dalam mode GUI. Setelah itu muncul masuk ke menu Opsi, dan aktifkan penyimpanan otomatis. Simpan pengaturan Anda dan cobalah dari baris perintah.
Rod MacPherson
2

Office PowerPoint Viewer 2007 memiliki saklar baris perintah /p yang akan memungkinkan Anda mencetak file PowerPoint ke printer default.

Sebagai contoh:

Send the presentation to a printer, and print the file.

Example: "c:\program files\microsoft office\office12\PPTVIEW.exe" /P "Presentation.pptx"

This example prints the Presentation.pptx file.

Printer PDF kemungkinan harus ditetapkan sebagai printer default Anda.

Daripada Adobe Distiller yang berarti Anda harus membeli Adobe Acrobat, saya sarankan Anda gunakan PDFCreator . Ini gratis dan memungkinkan Anda menyimpan file output dengan cara otomatis jika Anda mengubah opsi. Dengan cara ini, Anda dapat memiliki metode baris perintah sepenuhnya untuk mengonversi file PowerPoint ke PDF tanpa harus melakukan pembayaran tambahan ke Microsoft atau Adobe.

Sun
sumber
Saya mencoba ini, tetapi membuka kotak dialog GUI bukannya diam-diam mengikuti perintah. Apakah saya salah?
Houseman
1
Mungkin / p hanya membawa Anda ke dialog cetak karena printer default tidak dipilih dan diproses. Anda dapat mencoba / pt melihat apakah setara PowerPoint berfungsi untuk Penampil PowerPoint. Ini akan menjadi solusi, tetapi Anda juga bisa membuat makro AutoHotKey untuk mengklik Cetak untuk Anda saat Anda membuka prompt GUI. Lainnya, Anda dapat membeli PowerPoint dan menggunakan parameter / pt yang saya pikir berfungsi lebih baik dalam kasus Anda.
Sun
Saya mencoba menggunakan /pt opsi untuk PowerPoint, tetapi tidak ada yang terjadi. Mungkin karena itu memperlakukan printer pdfCreator sebagai printer fisik yang sebenarnya. Itu tidak mencetak ke file, itulah yang saya inginkan.
Houseman
Saya tahu bahwa PowerPoint memiliki opsi untuk hanya menyimpannya sebagai .pdf, yang saya inginkan, tetapi saya tidak dapat melakukannya dengan baris perintah
Houseman
1
Anda mungkin juga ingin menjelajahi parameter / M yang akan menjalankan makro. Makro itu dapat memanggil skrip VBA yang akan menyimpan PowerPoint Anda ke PDF menggunakan fungsi-fungsi PowerPoint bawaan. Berikut ini sebuah contoh: vbadud.blogspot.com/2012/05/...
Sun
2

Gunakan ini untuk menulis skrip untuk mengonversi seluruh folder, harap balas jika ini dapat diperbaiki Ini adalah pertama kalinya saya menulis vbscript!

perintah:

cscript scriptname.vbs "C:/path/to/folder"

file akan disimpan di direktori tempat skrip berada.

kode:

Option Explicit

Sub WriteLine ( strLine )
    WScript.Stdout.WriteLine strLine
End Sub

Const msoFalse = 0   ' False.
Const msoTrue = -1   ' True.

Const ppFixedFormatIntentScreen = 1 ' Intent is to view exported file on screen.
Const ppFixedFormatIntentPrint = 2  ' Intent is to print exported file.

Const ppFixedFormatTypeXPS = 1  ' XPS format
Const ppFixedFormatTypePDF = 2  ' PDF format

Const ppPrintHandoutVerticalFirst = 1   ' Slides are ordered vertically, with the first slide in the upper-left corner and the second slide below it.
Const ppPrintHandoutHorizontalFirst = 2 ' Slides are ordered horizontally, with the first slide in the upper-left corner and the second slide to the right of it.

Const ppPrintOutputSlides = 1               ' Slides
Const ppPrintOutputTwoSlideHandouts = 2     ' Two Slide Handouts
Const ppPrintOutputThreeSlideHandouts = 3   ' Three Slide Handouts
Const ppPrintOutputSixSlideHandouts = 4     ' Six Slide Handouts
Const ppPrintOutputNotesPages = 5           ' Notes Pages
Const ppPrintOutputOutline = 6              ' Outline
Const ppPrintOutputBuildSlides = 7          ' Build Slides
Const ppPrintOutputFourSlideHandouts = 8    ' Four Slide Handouts
Const ppPrintOutputNineSlideHandouts = 9    ' Nine Slide Handouts
Const ppPrintOutputOneSlideHandouts = 10    ' Single Slide Handouts

Const ppPrintAll = 1            ' Print all slides in the presentation.
Const ppPrintSelection = 2      ' Print a selection of slides.
Const ppPrintCurrent = 3        ' Print the current slide from the presentation.
Const ppPrintSlideRange = 4     ' Print a range of slides.
Const ppPrintNamedSlideShow = 5 ' Print a named slideshow.

Const ppShowAll = 1             ' Show all.
Const ppShowNamedSlideShow = 3  ' Show named slideshow.
Const ppShowSlideRange = 2      ' Show slide range.

'
' This is the actual script
'

Dim inputDirectory
Dim inputFolder
Dim inFiles
Dim outputFolder
Dim inputFile
Dim outputFile
Dim curFile
Dim objPPT
Dim objPresentation
Dim objPrintOptions
Dim objFso
Dim curDir



If WScript.Arguments.Count <> 1 Then
    WriteLine "You need to specify input files."
    WScript.Quit
End If

Set objFso = CreateObject("Scripting.FileSystemObject")

curDir = objFso.GetAbsolutePathName(".")

Set inputFolder = objFSO.GetFolder(WScript.Arguments.Item(0))
Set outputFolder = objFSO.GetFolder(WScript.Arguments.Item(0)) 

Set inFiles = inputFolder.Files

Set objPPT = CreateObject( "PowerPoint.Application" )

For Each curFile in inFiles

Set inputFile = curFile

If Not objFso.FileExists( inputFile ) Then
    WriteLine "Unable to find your input file " & inputFile
    WScript.Quit
End If

objPPT.Visible = TRUE
objPPT.Presentations.Open inputFile

Set objPresentation = objPPT.ActivePresentation
Set objPrintOptions = objPresentation.PrintOptions

objPrintOptions.Ranges.Add 1,objPresentation.Slides.Count
objPrintOptions.RangeType = ppShowAll

objPresentation.ExportAsFixedFormat curDir & curFile.Name & ".pdf", ppFixedFormatTypePDF, ppFixedFormatIntentScreen, msoTrue, ppPrintHandoutHorizontalFirst, ppPrintOutputSlides, msoFalse, objPrintOptions.Ranges(1), ppPrintAll, "Slideshow Name", False, False, False, False, False

objPresentation.Close

Next

ObjPPT.Quit
Jasper Boyd
sumber
Jika kode Anda merupakan modifikasi dari jawaban BillP3rd, maka akan lebih baik untuk mengutipnya dengan benar (lihat chitu.okoli.org/psyche/it/how-to-cite-code ). Juga, saya tidak yakin mengapa Anda menghapus komentar di mana BillP3rd mengutip sumbernya sendiri.
Ochado
Sebagian besar berfungsi, meskipun tetap file dengan nama folder dalam kasus saya (saya menggunakan "." Sebagai folder input).
Ochado