Delphi convert doc to pdf using Word ActiveX

前端 未结 2 1782
醉酒成梦
醉酒成梦 2020-12-11 07:18

Did anyone already wrote code for converting doc or docx to pdf using Word 2007 or Word 2010 pdf export capabilities?

相关标签:
2条回答
  • 2020-12-11 07:32

    I haven’t so far, but it shouldn’t be difficult:

    • Create a Word COM server object using CreateOLEObject('Word.Application')
    • Open the document using Documents.Open
    • Export the document to PDF using ExportAsFixedFormat

    Here's a basic skeleton:

    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;
    

    Note that I’ve declare both the Word and Doc variables as OleVariants, so as to be version-indepent (i.e. this code will work whether you’re using Word 2007 or 2010). You could also use the VCL Office component libraries if you wanted. If you were to do a lot of processing in the document itself, that would definitely be faster.

    0 讨论(0)
  • 2020-12-11 07:46

    I do it with the following .vbs script. If you need it in Delphi code then it would be easy enough to convert:

    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 讨论(0)
提交回复
热议问题