Solved

Convert RTF to HTML using MS Word programatically

Posted on 2008-10-06
6
1,288 Views
Last Modified: 2012-05-05
I have a VB6 legacy app with the following functionality:
1. Functions that retrieve RTF formatted documents as strings from a sql database.
2. Functions that parse through the RTF tags and insert additional data from the database.
3. One function that takes the final string and assigns it to the .body of an MS Outlook message.

This functionality, messy at best, was working fine until we switched from Outlook 2000 to Outlook 2003. Apparently Outlook 2003 doesn't support RichText, so now all the RTF tags are showing up in the email body.  It's not feasible at this point to update all the sql stored RTF documents or the first two functionality points mentioned above...so my only other option is to convert the RTF to HTML on the fly before sending it to Outlook.

I'VE TRIED MANY RTF TO HTML CONVERTERS inside the code and none of them convert the indentation and spacing correctly.  The application does have the ability to preview the outlook email message body before sending it by storing the RTF string inside a RichTextBox.  I manually copied the preview from the RichTextBox, pasted it in word and saved it as an HTML and it looks perfect.  I would basically like to do that programmatically.

I've searched far and wide and despite several forums on the subject, still couldn't find any VB6 examples of this.  

Any help would be greatly appreciated.

Thanks in advance!
0
Comment
Question by:wrsteam
  • 3
  • 3
6 Comments
 
LVL 25

Expert Comment

by:Luis Pérez
ID: 22650939
Try the code below, I'm sure it will work for you.
'Declare a constant with the HTML format for Word savings

Const wdFormatHTML As Integer = 8
 

'Declare an object for containing the word application

Dim wordApp As Object
 

'Declare an object for containing the word document

Dim wordDoc As Object
 

'Create the word application. This is done by CreateObject instead

'of adding a reference to the Word Object Library; if we add a 

'reference, we are making our VB application version-dependient of

'the Word version installed at that time; by using CreateObject,

'VB app is version-independient (the Word version installed doesn't

'matter).

Set wordApp = CreateObject("Word.Application")
 

'Open the RTF document

Set wordDoc = wordApp.Documents.Open("complete_path_to_the_rtf_document")
 

'Save the document in HTML format

wordDoc.SaveAs "complete_path_of_the_html_document", wdFormatHTML
 

'Free memory & resources by closing objects

wordDoc.Close

wordApp.Quit

Open in new window

0
 

Author Comment

by:wrsteam
ID: 22651554
I appreciate the solution, however, as I mentioned in my original post:

The RTF doc is in the form of a string with RTF tags...so it's not a file and I therefore have no path.

That said, the line of code you proposed will not work:

Set wordDoc = wordApp.Documents.Open("complete_path_to_the_rtf_document")

Any other ideas?
0
 
LVL 25

Expert Comment

by:Luis Pérez
ID: 22657017
If you have the possibility, you can work with temp files. First, save your RTF string data into a temp file; then, use MS Word to convert into HTML with the code provided in my previous post; last, if you need it, open the HTML file and get the content into a string in order to set as body of your e-mail. Finally, delete both temp files (.rtf and .html).
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:wrsteam
ID: 22658902
Okay, but I don't know how to get the content from the string into the temp file...nor do I know how to get the content of the html file back into a string.  Can you please provide some sample code that does this?

Thanks so much.  You've been extremely helpful!!  
0
 
LVL 25

Accepted Solution

by:
Luis Pérez earned 500 total points
ID: 22659564
Here is the code. Hope that helps.
'Function that reads entire content of a file (in any format) to a string

Public Function ReadFile(ByVal Filename As String) As String

    'Create a handle for the file

    Dim hFile As Integer

    'A buffer to hold the readed data

    Dim sBuffer As String

    

    'Obtain a free handle to a file

    hFile = FreeFile

    'Open the file for binary access mode for reading

    Open Filename For Binary Access Read As hFile

    'Initialize the buffer to the same number of white spaces

    'as bytes are in the file to read

    sBuffer = Space(LOF(hFile))

    'Fill the buffer with the data readed from the file

    Get #hFile, , sBuffer

    'Close the file

    Close hFile

    

    'Return the buffer

    ReadFile = sBuffer

End Function
 

'Function that writes the contents of a string to a file

Public Sub WriteFile(ByVal Filename As String, ByVal Data As String)

    'Create a handle for the file

    Dim hFile As Integer

    

    'Obtain a free handle to a file

    hFile = FreeFile

    'Open the file for binary access mode for writing. If the file

    'doesn't exists, it will be created.

    Open Filename For Binary Access Write As hFile

    'Write the data to the file

    Put #hFile, , Data

    'Close the file

    Close hFile

End Sub

Open in new window

0
 

Author Closing Comment

by:wrsteam
ID: 31503433
AMAZING.  I can't even begin to tell you how helpful your solution has been!!!  I have literally been pulling my hair out trying to figure this out...not to mention the grief I'm getting from my client.  You are truly an EXPERT!

Thanks,
Rob
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Enums (shorthand for ‘enumerations’) are not often used by programmers but they can be quite valuable when they are.  What are they? An Enum is just a type of variable like a string or an Integer, but in this case one that you create that contains…
Background What I'm presenting in this article is the result of 2 conditions in my work area: We have a SQL Server production environment but no development or test environment; andWe have an MS Access front end using tables in SQL Server but we a…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

895 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now