Câu hỏi Làm thế nào tôi có thể tự động chuyển đổi PowerPoint sang PDF?


Tôi cần chuyển đổi các tệp .ppt / .pptx thành tệp .pdf (hoặc hình ảnh) thông qua dòng lệnh bằng cách sử dụng sản phẩm của bên thứ ba.

Tôi đang sử dụng này cho một máy chủ Windows 2008 và tôi không thể sử dụng bất kỳ GUI hoặc trang web vì điều này cần phải là một quá trình tự động.

Tôi đã thử libreoffice, nhưng nó có vấn đề chuyển đổi nghệ thuật thông minh.

EDIT: Giải pháp cuối cùng của tôi là sử dụng powerpoint interop với C #. Xem thêm: https://stackoverflow.com/questions/26372020/how-to-programmatically-create-a-powerpoint-from-a-list-of-images


4
2017-09-05 15:51


gốc


Bạn đang sử dụng hệ điều hành nào? Bất kỳ lý do cụ thể tại sao bạn cần phải chuyển đổi chúng bằng cách sử dụng dòng lệnh? - Gryphoenix
@Gryphoenix Windows server 2008. Nó cần phải là một quá trình tự động mà tôi có thể gọi bằng mã. Đó là lý do tại sao. - Houseman
Có vẻ như không có chức năng gốc để thực hiện chuyển đổi này thông qua dòng lệnh nhưng có rất nhiều sản phẩm của bên thứ ba có chức năng này. - Gryphoenix
Bạn đã xem xét sử dụng một bản sao của MS Office 2010 và tự động hóa (thông qua mã của bạn)? Đề xuất sản phẩm không có chủ đề. - Ƭᴇcʜιᴇ007
Kiểm tra bài đăng này: superuser.com/questions/614992/… - Josh


Các câu trả lời:


Không cần sản phẩm của bên thứ ba. Như bạn đã lưu ý, PowerPoint có thể xuất bản trình bày dưới dạng PDF. Với việc áp dụng một đoạn mã nhỏ, bạn có thể đạt được kết quả của mình. Tôi đã đánh lừa VB Script dưới đây. Chỉ cần tạo một tệp có tên kết thúc bằng ".vbs", dán mã bên dưới.

Để sử dụng:

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

Điều quan trọng cần lưu ý:

  • Nếu (các) tên có dấu cách, chúng sẽ cần phải được trích dẫn.
  • Nếu bạn không chỉ định đường dẫn cho tệp đầu ra, PowerPoint sẽ đặt nó vào thư mục Tài liệu của bạn.

Tôi đã bao gồm các liên kết nội dòng để tham chiếu đến các bit khác nhau.

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

6
2017-09-06 00:47



Cảm ơn bạn. Tôi sắp viết một cái gì đó như thế này, ngoại trừ trong C #. Nhược điểm duy nhất, đó là cửa sổ Powerpoint bật lên trong một hoặc hai giây. Tôi đã thử cài đặt objPPT.Visible đến False, nhưng nó sai lầm và nói với tôi rằng nó không được phép. - Houseman
Quá trình này sẽ được thực hiện trên một máy chủ. Tôi tưởng tượng rằng nó sẽ khá tốn nhiều tài nguyên để thực sự mở PowerPoint mỗi lần một tập tin phải được chuyển đổi. Có cách nào để không làm điều đó? - Houseman


Bạn có thể in ra một trình điều khiển máy in PDF như Adobe Distiller, hoặc bất kỳ trình điều khiển rẻ hơn hoặc thậm chí cả nguồn mở ra khỏi đó.


3
2017-09-05 16:11



Trang chính thức của Adobe Distiller không nói gì về việc chuyển đổi các tệp powerpoint thành tệp .pdf. - Houseman
Nó là một trình điều khiển in, bất cứ điều gì bạn có thể in, bạn có thể làm thành một PDF. - Rod MacPherson
Làm thế nào để bạn thực sự chạy PowerPoint để in trình điều khiển in Adobe Distiller theo cách tự động? - Sun
sử dụng tùy chọn / pt từ dòng lệnh để in và chỉ định máy in nào. officeone.mvps.org/pptfaq/ppt_cmdline.html  Đặt mặc định tài liệu trong distiller sẽ giúp bạn vượt qua các tùy chọn in GUI pop-up. - Rod MacPherson
@OWiz Vì bạn đã PDFCreator, hãy tập trung vào điều đó. Tôi không có ý định giới thiệu một người lái xe khác, vì vậy hãy đi với những gì bạn có. Hãy thử in một cái gì đó để tạo PDF trong chế độ GUI. Khi nó bật lên, hãy vào menu Tùy chọn và bật tự động lưu. Lưu các thiết lập của bạn và thử nó từ dòng lệnh. - Rod MacPherson


Office PowerPoint Viewer 2007 có một công tắc dòng lệnh /p cho phép bạn in tệp PowerPoint sang máy in mặc định.

Ví dụ:

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.

Máy in PDF có thể sẽ phải đặt làm máy in mặc định của bạn.

Thay vì Adobe Distiller có nghĩa là bạn phải mua Adobe Acrobat, tôi khuyên bạn nên sử dụng Người tạo ra file PDF. Nó là miễn phí và cho phép bạn lưu các tập tin đầu ra một cách tự động nếu bạn tinh chỉnh các tùy chọn. Bằng cách này, bạn có thể có một phương pháp dòng lệnh hoàn toàn để chuyển đổi các tệp PowerPoint sang PDF mà không phải thực hiện các khoản thanh toán bổ sung cho Microsoft cũng như Adobe.


2
2017-09-05 16:45



Tôi đã thử điều này, nhưng nó mở ra một hộp thoại GUI thay vì âm thầm theo đơn đặt hàng. Tôi có làm sai không? - Houseman
Có thể / p chỉ đưa bạn đến hộp thoại in vì máy in mặc định không được chọn và xử lý. Bạn có thể thử / pt xem liệu PowerPoint có tương đương với PowerPoint Viewer hay không. Đây sẽ là một giải pháp thay thế, nhưng bạn cũng có thể tạo một macro AutoHotKey để kích vào Print cho bạn khi bạn nhận được dấu nhắc GUI. Khác bạn có thể mua PowerPoint và sử dụng tham số / pt mà tôi nghĩ rằng hoạt động tốt hơn trong trường hợp của bạn. - Sun
Tôi đã thử sử dụng /pt tùy chọn cho PowerPoint, nhưng không có gì xảy ra. Có lẽ bởi vì nó xử lý máy in pdfCreator như một máy in vật lý thực tế. Nó không in một tập tin, đó là những gì tôi muốn. - Houseman
Tôi biết rằng PowerPoint có tùy chọn để lưu nó dưới dạng tệp .pdf, đó là những gì tôi muốn, nhưng tôi không thể làm điều đó với dòng lệnh - Houseman
Bạn cũng có thể muốn khám phá tham số / M sẽ chạy macro. Macro đó có thể gọi một tập lệnh VBA để lưu PowerPoint của bạn vào một tệp PDF bằng các hàm PowerPoint tích hợp sẵn. Đây là một ví dụ: vbadud.blogspot.com/2012/05/… - Sun


Sử dụng điều này để viết một kịch bản để chuyển đổi toàn bộ một thư mục, hãy trả lời nếu điều này có thể được cải thiện đây là lần đầu tiên tôi viết vbscript!

chỉ huy:

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

các tệp sẽ được lưu trong thư mục mà tập lệnh có trong đó.

mã:

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

2
2018-04-02 16:23



Nếu mã của bạn là một sửa đổi của câu trả lời của BillP3rd, thì nó sẽ là tốt để trích dẫn nó đúng cách (xem chitu.okoli.org/psyche/it/how-to-cite-code). Ngoài ra, tôi không chắc chắn lý do tại sao bạn đã xóa các bình luận nơi BillP3rd trích dẫn các nguồn của riêng mình. - Ochado
Chủ yếu là làm việc, mặc dù nó vẫn là các tập tin với tên thư mục trong trường hợp của tôi (tôi sử dụng "." Là thư mục đầu vào). - Ochado