2011-03-30 118 views

回答

3

我用下面的.vbs腳本來做。如果你需要在Delphi代碼,那麼這將是很容易的轉換:

Const wdDoNotSaveChanges = 0 
Const wdRevisionsViewFinal = 0 
Const wdFormatPDF = 17 

Dim arguments 
Set arguments = WScript.Arguments 

Function DOC2PDF(sDocFile) 

    Dim fso ' As FileSystemObject 
    Dim wdo ' As Word.Application 
    Dim wdoc ' As Word.Document 
    Dim wdocs ' As Word.Documents 

    Set fso = CreateObject("Scripting.FileSystemObject") 
    sDocFile = fso.GetAbsolutePathName(sDocFile) 
    sPdfFile = fso.GetParentFolderName(sDocFile) + "\" + fso.GetBaseName(sDocFile) + ".pdf" 

    Set wdo = CreateObject("Word.Application") 
    Set wdocs = wdo.Documents 
    WScript.Echo "Opening: " + sDocFile 
    Set wdoc = wdocs.Open(sDocFile) 
    if fso.FileExists(sPdfFile) Then 
    fso.DeleteFile sPdfFile, True 
    End If 
    WScript.Echo "Converting to PDF: " + sPdfFile 
    Set wview = wdoc.ActiveWindow.View 
    wview.ShowRevisionsAndComments = False 
    wview.RevisionsView = wdRevisionsViewFinal 
    wdoc.SaveAs sPdfFile, wdFormatPDF 
    WScript.Echo "Conversion completed" 
    wdo.Quit wdDoNotSaveChanges 

    Set fso = Nothing 
    Set wdo = Nothing 

End Function 

If arguments.Count=1 Then 
    Call DOC2PDF(arguments.Unnamed.Item(0)) 
Else 
    WScript.Echo "Generates a PDF file from a Word document using Word PDF export." 
    WScript.Echo "" 
    WScript.Echo "Usage: doc2pdf.vbs <doc-file>" 
    WScript.Echo "" 
End If 
+0

我選擇這個作爲答案,因爲它包含'wdDoNotSaveChanges',幫助了我很多!我失去了1天,然後我又讀了這個問題!沒有使用這個詞要求保存,這是非常煩人的。 – LaBracca 2011-11-30 12:59:39

8

我至今爲止還沒有,但它不應該是困難的:

使用 Documents.Open
  • 將文檔導出爲PDF文檔

    這是一個基本框架:

    uses 
        ComObj; 
    const 
        wdExportFormatPDF = 17; 
    var 
        Word, Doc: OleVariant; 
    begin 
        Word := CreateOLEObject('Word.Application'); 
        Doc := Word.Documents.Open('C:\Document.docx'); 
        Doc.ExportAsFixedFormat('C:\Document.pdf', wdExportFormatPDF); 
    end; 
    

    請注意,我宣佈雙方WordDoc變量OleVariants,以便版本indepent(即無論您使用的是Word 2007還是2010,此代碼都可以使用)。如果您願意,您也可以使用VCL Office組件庫。如果您要在文檔中進行大量處理,那肯定會更快。

  • +1

    好的這個工程(我剛剛用ComObj取代OleAuto,因爲我得到OleAuto已被棄用)。您能否告訴我在哪裏可以找到VCL Office組件庫:我記得在Delphi 7 Palette中看到過它們,但我在2009年沒有看到它們。 – LaBracca 2011-03-30 12:39:18

    +0

    @ user193655:我似乎記得它是一個單獨的選項安裝程序,但我不能確定。我還沒有在我的D2010設置中獲得它們(但是我幾乎總是使用變體,以便更靈活 - 我使用VBA的對象瀏覽器來確定要使用的對象和方法) – Martijn 2011-03-31 08:32:30