Handling Microsoft Word file format: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
(Convert ExpressionEngine section headers)
(Formatting.)
Line 2: Line 2:


[[Category:Developing_with_Qt]]
[[Category:Developing_with_Qt]]
[toc align_right="yes" depth="2"]
 


= Handling Microsoft Word (file format) =
= Handling Microsoft Word (file format) =
Line 8: Line 8:
This page discusses various available options for working with [http://en.wikipedia.org/wiki/Microsoft_Word#File_formats Microsoft Word] documents in your Qt application. Please also read the general considerations outlined on the [[Handling_Document_Formats | Handling Document Formats]] page.
This page discusses various available options for working with [http://en.wikipedia.org/wiki/Microsoft_Word#File_formats Microsoft Word] documents in your Qt application. Please also read the general considerations outlined on the [[Handling_Document_Formats | Handling Document Formats]] page.


p{width:60%;border:solid 1px #99a;background:#eef;color:#335;padding:2pt 4pt;font-size:0.9em;line-height:150%;font-style:italic}. Note that this information is collaboratively collected by the community, with no promise of completeness or correctness. In particular, use your own research and judgment when evaluating third-party libraries or tools!
 
<pre style="background-color: #E6E6FA">Note that this information is collaboratively collected by the community, with no promise
of completeness or correctness. In particular, use your own research and judgment
when evaluating third-party libraries or tools!</pre>


One needs to distinguish between two different formats (this page deals with both of them):
One needs to distinguish between two different formats (this page deals with both of them):


table{width:95%;margin-left:2.5%}.
 
| |''. Legacy "Word Document" format |''. "Office Open XML Document" format |
{| class="wikitable"
| ''classification:'' | binary | XML-based |
|
| ''main filename extension:'' | {font:1em monospace}.doc | {font-family:monospace}.docx |
! Legacy "Word Document" format
| ''main internet media type:'' | {font:0.9em monospace}application/vnd.ms-word | {font:0.9em monospace}application/vnd.openxmlformats-officedocument.wordprocessingml.document |
! "Office Open XML Document" format
| ''default format of Word:'' | until Word 2003 | since Word 2007 |
|-
| ''classification:''
| binary
| XML-based
|-
| ''main filename extension:''
| .doc
| .docx
|-
| ''main internet media type:''  
| application/vnd.ms-word
| application/vnd.openxmlformats-officedocument.wordprocessingml.document
|-
| ''default format of Word:''  
| until Word 2003
| since Word 2007
|}


== Reading / Writing ==
== Reading / Writing ==
Line 25: Line 44:
If you are exclusively targeting the Windows platform and Microsoft Word will be installed on all target machines, then you can use [http://doc.qt.io/qt-4.8/activeqt.html Qt’s ActiveX framework] to access Word’s .doc and .docx processing functionality through OLE automation. For an introductory code example (and a way to list the API provided by Word's COM object), consult [http://wiki.qt.io/Using_ActiveX_Object_in_QT this how to] (focuses on Microsoft Excel, but it works the same way for Word).
If you are exclusively targeting the Windows platform and Microsoft Word will be installed on all target machines, then you can use [http://doc.qt.io/qt-4.8/activeqt.html Qt’s ActiveX framework] to access Word’s .doc and .docx processing functionality through OLE automation. For an introductory code example (and a way to list the API provided by Word's COM object), consult [http://wiki.qt.io/Using_ActiveX_Object_in_QT this how to] (focuses on Microsoft Excel, but it works the same way for Word).


table{width:95%;margin-left:2.5%}.
{| class="wikitable"
| |''. DLL file name |''. COM object name |''. platforms |''. license |
|
| [http://office.microsoft.com/word/ '''Microsoft Word'''] | ? | {font-family:monospace}Word.Application | Windows | {color:#458}commercial |
| DLL file name
| COM object name
| platforms
| license  
|-
| [http://office.microsoft.com/word/ '''Microsoft Word''']  
| ?  
| Word.Application
| Windows
| <span style="color:Navy">commercial</span>
|}


=== Using independent parser/writer libraries ===
=== Using independent parser/writer libraries ===


table{width:95%;margin-left:2.5%}.
 
| |''. API |''. {font-family:monospace}.doc |''. {font-family:monospace}.docx |''. reading |''. writing |''. platforms |''. license |
{| class="wikitable"
| [http://… '''…'''] | … | … | … | … | … | … | … |
|
| [http://www.abisource.com/projects/ '''wv'''] | C | {color:#580}yes | {color:#920}no | {color:#580}yes | {color:#920}no | Win, Mac, Linux | GPL {color:#458}[strong copyleft] |
! API  
! .doc
! .docx
! reading
! writing
! platforms
! license
|-
| [http://… '''…''']
| …  
| …  
| …  
| …  
| …  
| …  
| …  
|-
| [http://www.abisource.com/projects/ '''wv''']  
| C  
| yes
| no
| yes  
| no  
| Win, Mac, Linux  
| GPL <span style="color:Navy">[strong copyleft] </span>
|}


=== Using manual XML processing ===
=== Using manual XML processing ===
Files using the XML-based (.docx) format could be processed using Qt's XML handling classes (see [[Handling_Document_Formats | Handling Document Formats]]).
Files using the XML-based (.docx) format could be processed using Qt's XML handling classes (see [[Handling_Document_Formats | Handling Document Formats]]).


p{border:dashed 1px #a94;background:#fbf3dd;color:#530;padding:2pt 4pt;margin-left:2pt;margin-right:2pt;font-size:0.9em;line-height:150%;font-style:italic}. TODO: Expand this section.
<pre style="background-color: moccasin"> TODO: Expand this section.</pre>


=== Using batch conversion tools ===
=== Using batch conversion tools ===
If all else fails, there is always the option of using an existing tool to automatically convert between Microsoft Word files and a more manageable format, and let your Qt application deal with that format instead. The conversion tool could be bundled with your application or specified as a prerequisite, and controlled via [[Doc:QProcess]]. Some possibilities are:
If all else fails, there is always the option of using an existing tool to automatically convert between Microsoft Word files and a more manageable format, and let your Qt application deal with that format instead. The conversion tool could be bundled with your application or specified as a prerequisite, and controlled via [[Doc:QProcess]]. Some possibilities are:


table{width:95%;margin-left:2.5%}.
 
|''. |''. {font-family:monospace}.doc to |''. {font-family:monospace}.docx to |''. … to {font-family:monospace}.doc |''. … to {font-family:monospace}.docx |''. platforms |''. license |
{| class="wikitable"
| [http://www.abisource.com '''AbiWord'''] | {font-family:monospace}.txt .rtf .html .dbk .odt .docx … | {font-family:monospace}.txt .rtf .html .dbk .odt … | - | {font-family:monospace}.txt .rtf .html .dbk .odt .doc … | Win, Mac, Linux, … | GPL {color:#458}[strong copyleft] |
|
| [http://www.abisource.com/projects '''wvWare'''] | {font-family:monospace}.txt .rtf .html .dbk … | - | - | - | Win, Mac, Linux, … | GPL {color:#458}[strong copyleft] |
| .doc to
| [http:// '''…'''] | {font-family:monospace}… | {font-family:monospace}… | {font-family:monospace}… | {font-family:monospace}… | … | … |
| .docx to  
| … to .doc  
| … to .docx
| platforms  
|-
| [http://www.abisource.com '''AbiWord''']  
| .txt .rtf .html .dbk .odt .docx …  
| .txt .rtf .html .dbk .odt …  
| -  
| .txt .rtf .html .dbk .odt .doc …
| Win, Mac, Linux, …  
|-
| [http://www.abisource.com/projects '''wvWare''']  
| .txt .rtf .html .dbk …  
| -
| -  
| -  
| Win, Mac, Linux, …  
|-
| …
| …  
| …  
| …  
| …  
| …  
|}


''Notes:''
''Notes:''
AbiWord can be used like this for batch conversion: <code>abiword —to=outputfile.rtf inputfile.doc<code>
AbiWord can be used like this for batch conversion: <code>abiword —to=outputfile.rtf inputfile.doc</code>


== Displaying / User-Interacting ==
== Displaying / User-Interacting ==
Line 57: Line 136:
=== Using Word itself ===
=== Using Word itself ===


p{border:dashed 1px #a94;background:#fbf3dd;color:#530;padding:2pt 4pt;font-size:0.9em;line-height:150%;font-style:italic}. TODO: If you know whether Word provides a "viewer" ActiveX control that can be embedded in a Qt application through ActiveQT, please fill out this section (include links to relevant resources!)
<pre style="background-color: moccasin">TODO: If you know whether Word provides a "viewer" ActiveX control that can be embedded in a Qt application through ActiveQT, please fill out
this section (include links to relevant resources!) </pre>


=== Manual solution ===
=== Manual solution ===
<pre style="background-color: moccasin">TODO: Tips for implementing a custom Microsoft Word viewer widget, using Qt and the Microsoft Word parsing libraries mentioned above </pre>


p{border:dashed 1px #a94;background:#fbf3dd;color:#530;padding:2pt 4pt;font-size:0.9em;line-height:150%;font-style:italic}. TODO: Tips for implementing a custom Microsoft Word viewer widget, using Qt and the Microsoft Word parsing libraries mentioned above


p{color:#fff;border-bottom:solid 1px #ccc}. .


== See Also ==
== See Also ==

Revision as of 10:43, 20 March 2015

This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.


Handling Microsoft Word (file format)

This page discusses various available options for working with Microsoft Word documents in your Qt application. Please also read the general considerations outlined on the Handling Document Formats page.


Note that this information is collaboratively collected by the community, with no promise
of completeness or correctness. In particular, use your own research and judgment
when evaluating third-party libraries or tools!

One needs to distinguish between two different formats (this page deals with both of them):


Legacy "Word Document" format "Office Open XML Document" format
classification: binary XML-based
main filename extension: .doc .docx
main internet media type: application/vnd.ms-word application/vnd.openxmlformats-officedocument.wordprocessingml.document
default format of Word: until Word 2003 since Word 2007

Reading / Writing

Using Word itself

If you are exclusively targeting the Windows platform and Microsoft Word will be installed on all target machines, then you can use Qt’s ActiveX framework to access Word’s .doc and .docx processing functionality through OLE automation. For an introductory code example (and a way to list the API provided by Word's COM object), consult this how to (focuses on Microsoft Excel, but it works the same way for Word).

DLL file name COM object name platforms license
Microsoft Word ? Word.Application Windows commercial

Using independent parser/writer libraries

API .doc .docx reading writing platforms license
wv C yes no yes no Win, Mac, Linux GPL [strong copyleft]

Using manual XML processing

Files using the XML-based (.docx) format could be processed using Qt's XML handling classes (see Handling Document Formats).

 TODO: Expand this section.

Using batch conversion tools

If all else fails, there is always the option of using an existing tool to automatically convert between Microsoft Word files and a more manageable format, and let your Qt application deal with that format instead. The conversion tool could be bundled with your application or specified as a prerequisite, and controlled via Doc:QProcess. Some possibilities are:


.doc to .docx to … to .doc … to .docx platforms
AbiWord .txt .rtf .html .dbk .odt .docx … .txt .rtf .html .dbk .odt … - .txt .rtf .html .dbk .odt .doc … Win, Mac, Linux, …
wvWare .txt .rtf .html .dbk … - - - Win, Mac, Linux, …

Notes:

AbiWord can be used like this for batch conversion:

abiword to=outputfile.rtf inputfile.doc

Displaying / User-Interacting

Using Word itself

TODO: If you know whether Word provides a "viewer" ActiveX control that can be embedded in a Qt application through ActiveQT, please fill out
this section (include links to relevant resources!) 

Manual solution

TODO: Tips for implementing a custom Microsoft Word viewer widget, using Qt and the Microsoft Word parsing libraries mentioned above 


See Also