在Qt中将Office 2007-2012文档转换为pdf和image

时间:2014-12-03 17:21:51

标签: c++ qt ms-office

我们开发了一款可以使用LibreOffice将DOC / XLS文件导入为图像的应用。但是,对于已安装Office的PC,我们希望能够使用已安装的MS Office。大多数人都在使用MS Office版本2007-2010。我知道MS为此目的提供了某种互操作性DLL,但我没有看到任何与Qt一起使用的例子。

更新 - 这个答案看起来很有趣,可以在Qt中完成吗?

Convert Word file pages to jpg images using C#

1 个答案:

答案 0 :(得分:2)

的PowerShell

看起来你可以很容易地在命令行上使用Powershell。

打开QProcess,然后运行:

http://technet.microsoft.com/en-us/library/hh847736.aspx

powershell -Command "Import-Module MSOnline";"C:\Myscript.ps1"

(下载此脚本或将其转换为C ++ com调用。)

https://gallery.technet.microsoft.com/office/Script-to-convert-Word-f702844d

powershell -Command "Import-Module ConvertWordPocumentToPDF.psm1";"ConvertTo-OSCPDF -Path C:\path\to\document.docx"

所以Qt的结束代码可能类似于:

QProcess * process = new QProcess();

// put code to pipe stdout and stderr from the QProcess to this exe's stdout, or to a TextEdit.

process->start("powershell.exe -Command \"Import-Module ConvertWordPocumentToPDF.psm1\";\"ConvertTo-OSCPDF -Path C:\\path\\to\\document.docx\"");

Com Object Access

DocumentBase.ExportAsFixedFormat方法

http://msdn.microsoft.com/en-us/library/microsoft.office.tools.word.documentbase.exportasfixedformat.aspx

public void ExportAsFixedFormat(
    string outputFileName,
    WdExportFormat exportFormat,
    bool openAfterExport,
    WdExportOptimizeFor optimizeFor,
    WdExportRange range,
    int from,
    int to,
    WdExportItem item,
    bool includeDocProps,
    bool keepIRM,
    WdExportCreateBookmarks createBookmarks,
    bool docStructureTags,
    bool bitmapMissingFonts,
    bool useISO19005_1,
    ref Object fixedFormatExtClassPtr
)

首先获取Word.Application

的实例

然后使用wdApplication.Documents.Open

获取文档实例

然后使用以下参数调用wdDocument.ExportAsFixedFormat

$wdExportFormat = [Microsoft.Office.Interop.Word.WdExportFormat]::wdExportFormatPDF
$OpenAfterExport = $false
$wdExportOptimizeFor = [Microsoft.Office.Interop.Word.WdExportOptimizeFor]::wdExportOptimizeForOnScreen
$wdExportItem = [Microsoft.Office.Interop.Word.WdExportItem]::wdExportDocumentContent
$IncludeDocProps = $true
$KeepIRM = $true
$wdExportCreateBookmarks = [Microsoft.Office.Interop.Word.WdExportCreateBookmarks]::wdExportCreateWordBookmarks
$DocStructureTags = $true
$BitmapMissingFonts = $true
$UseISO19005_1 = $false
$wdStartPage = 0
$wdEndPage = 0

(但是格式化为c ++,而不是powershell)

然后在完成后,释放com对象。

http://msdn.microsoft.com/en-us/library/kw65a0we.aspx

我没有测试过任何一种方法,但之前我从Qt项目中运行过Com对象。希望有所帮助。