2011-03-30 14 views

Trả lời

3

Tôi làm điều đó với tập lệnh .vbs sau. Nếu bạn cần nó trong mã Delphi sau đó nó sẽ được dễ dàng, đủ để chuyển đổi:

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

Tôi chọn câu trả lời này vì câu trả lời chứa 'wdDoNotSaveChanges' đã giúp tôi rất nhiều! Tôi mất 1 ngày và sau đó tôi đọc lại câu hỏi này! Nếu không sử dụng từ đó yêu cầu tiết kiệm và nó rất khó chịu. – LaBracca

8

tôi đã không cho đến nay, nhưng nó không nên khó khăn:

Dưới đây là một bộ xương cơ bản:

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; 

Lưu ý rằng tôi đã tuyên bố cả WordDoc biến như OleVariants, để có phiên bản indepent (ví dụ: mã này sẽ hoạt động cho dù bạn đang sử dụng Word 2007 hay 2010). Bạn cũng có thể sử dụng thư viện thành phần VCL Office nếu bạn muốn. Nếu bạn đã làm rất nhiều việc xử lý trong tài liệu, điều đó chắc chắn sẽ nhanh hơn.

+1

Ok công trình này (tôi chỉ cần thay thế OleAuto với ComObj kể từ khi tôi nhận được rằng OleAuto không được chấp nhận). Bạn có thể vui lòng cho tôi biết nơi để tìm các thư viện thành phần văn phòng VCL: Tôi nhớ đã nhìn thấy chúng trong Delphi 7 Palette, nhưng tôi không nhìn thấy chúng trong năm 2009. – LaBracca

+0

@ user193655: Tôi dường như nhớ rằng đó là một tùy chọn riêng biệt trong trình cài đặt, nhưng tôi không chắc chắn. Tôi chưa có chúng trong thiết lập D2010 của mình (nhưng sau đó tôi hầu như luôn sử dụng các biến thể, để linh hoạt hơn - tôi sử dụng Trình duyệt đối tượng của VBA để tìm ra các đối tượng và phương pháp sử dụng) – Martijn