Delphi使用Word ActiveX将文档转换为pdf

Delphi使用Word ActiveX将文档转换为pdf,delphi,ms-word,pdf-generation,activex,Delphi,Ms Word,Pdf Generation,Activex,是否有人已经编写了使用Word 2007或Word 2010 pdf导出功能将doc或docx转换为pdf的代码?我使用以下.vbs脚本完成此操作。如果您需要在Delphi代码中使用它,则可以很容易地转换: Const wdDoNotSaveChanges = 0 Const wdRevisionsViewFinal = 0 Const wdFormatPDF = 17 Dim arguments Set arguments = WScript.Arguments Function DOC2

是否有人已经编写了使用Word 2007或Word 2010 pdf导出功能将doc或docx转换为pdf的代码?

我使用以下.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
Const wdDoNotSaveChanges=0
常数wdRevisionsViewFinal=0
常量wdFormatPDF=17
模糊的论据
Set arguments=WScript.arguments
函数DOC2PDF(sDocFile)
Dim fso'作为文件系统对象
Dim wdo’As Word.Application
Dim wdoc'作为Word.Document
作为Word.Documents的Dim wdocs
设置fso=CreateObject(“Scripting.FileSystemObject”)
sDocFile=fso.GetAbsolutePathName(sDocFile)
spdfile=fso.GetParentFolderName(sDocFile)+“\”+fso.GetBaseName(sDocFile)+“.pdf”
Set wdo=CreateObject(“Word.Application”)
设置wdocs=wdo.Documents
Echo“打开:+sDocFile
设置wdoc=wdocs.Open(sDocFile)
如果存在fso.files(spdfile),则
fso.DeleteFile spdfile,True
如果结束
Echo“转换为PDF:+spdfile”
设置wview=wdoc.ActiveWindow.View
wview.ShowRevisionsAndComments=False
wview.RevisionsView=wdRevisionsView最终
wdoc.SaveAs spdfile,wdFormatPDF
Echo“转换已完成”
wdo.Quit wdDoNotSaveChanges
设置fso=无
设置wdo=无
端函数
如果arguments.Count=1,则
调用DOC2PDF(arguments.Unnamed.Item(0))
其他的
Echo“使用Word PDF导出从Word文档生成PDF文件。”
WScript.Echo“”
Echo“用法:doc2pdf.vbs”
WScript.Echo“”
如果结束

到目前为止我还没有,但这应该不难:

  • 使用
    ('Word.Application')
  • 使用打开文档
  • 使用将文档导出为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;

注意,我已经将
Word
Doc
变量声明为OleVariants,以便与版本无关(即,无论您使用的是Word 2007还是2010,此代码都可以工作)。如果需要,还可以使用VCL Office组件库。如果您要在文档本身中进行大量处理,那肯定会更快。

好的,这是可行的(我刚刚用ComObj替换了OleAuto,因为我知道OleAuto已被弃用)。请告诉我在哪里可以找到VCL Office组件库:我记得在Delphi 7调色板中看到过它们,但在2009年没有看到它们。@user193655:我似乎记得它在安装程序中是一个单独的选项,但我不能确定。我的D2010设置中也没有它们(但我几乎总是使用变体,以便更灵活-我使用VBA的对象浏览器找出要使用的对象和方法),我选择这个作为答案,因为它包含
wdDoNotSaveChanges
,这对我帮助很大!我输了一天,然后我又读了一遍这个问题!不使用这个词会要求节约,这很烦人。