Delphi конвертировать документ в PDF с помощью Word ActiveX - PullRequest
5 голосов
/ 30 марта 2011

Кто-нибудь уже писал код для преобразования doc или docx в pdf, используя возможности экспорта pdf в Word 2007 или Word 2010?

Ответы [ 2 ]

8 голосов
/ 30 марта 2011

Пока не знаю, но это не должно быть сложно:

  • Создание объекта Word COM-сервера с использованием CreateOLEObject('Word.Application')
  • Откройте документ, используя Documents.Open
  • Экспортируйте документ в PDF, используя ExportAsFixedFormat

Вот основной скелет:

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;

Обратите внимание, что я объявил переменные Word и Doc как OleVariants, чтобы не зависеть от версии (т.е. этот код будет работать независимо от того, используете ли вы Word 2007 или 2010).Вы также можете использовать библиотеки компонентов VCL Office, если хотите.Если вам придется много обрабатывать в самом документе, это определенно будет быстрее.

3 голосов
/ 30 марта 2011

Я делаю это с помощью следующего скрипта .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
...