Có ai đã viết mã để chuyển đổi doc hoặc docx sang pdf bằng Word 2007 hoặc Word 2010 khả năng xuất pdf không?Delphi chuyển đổi tài liệu sang pdf bằng cách sử dụng Word ActiveX
Trả lời
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
tôi đã không cho đến nay, nhưng nó không nên khó khăn:
- Tạo một đối tượng máy chủ Lời COM sử dụng
CreateOLEObject
('Word.Application')
- mở tài liệu sử dụng
Documents.Open
- xuất khẩu các tài liệu sang PDF sử dụng
ExportAsFixedFormat
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ả Word
và Doc
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.
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
@ 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
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