【发布时间】:2011-03-30 09:50:12
【问题描述】:
是否有人已经编写了使用 Word 2007 或 Word 2010 pdf 导出功能将 doc 或 docx 转换为 pdf 的代码?
【问题讨论】:
标签: delphi ms-word pdf-generation activex
是否有人已经编写了使用 Word 2007 或 Word 2010 pdf 导出功能将 doc 或 docx 转换为 pdf 的代码?
【问题讨论】:
标签: delphi ms-word pdf-generation activex
到目前为止我还没有,但应该不难:
CreateOLEObject('Word.Application') 创建一个 Word COM 服务器对象
Documents.Open打开文档
ExportAsFixedFormat将文档导出为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 组件库。如果你要在文档本身做大量的处理,那肯定会更快。
【讨论】:
我使用以下 .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
【讨论】:
wdDoNotSaveChanges,这对我有很大帮助!我失去了 1 天,然后我再次阅读了这个问题!不使用这个词要求保存,这很烦人。