[AccessD] Writing raw RTF document using VBA - Solved

Gustav Brock gustav at cactus.dk
Fri Jan 2 11:08:56 CST 2004


Hi William, Tom et all

Referring to my post from 2003-11-01, I did an implementation of this
and it rocks.

> First, here's one solution for extracting the RTF body:

> Having reached this point it's a simple matter to assemble and write
> the full RTF document ..

> I'm pretty sure this won't be able concatenate any collection of RTF
> documents whatever the size. But until further testing has been
> carried out, I guess it will be able to concatenate a vast amount of
> small RTF docs like those found and produced in an ocx controlled RTF
> memobox.

I modified the code slightly to write the RTF document item by item
and that certainly speeds up the process. A test with 20.000 small
items created in less than one minute a 8 MB RTF document which Word
used longer time to open and - having done so - reported to have a
size of 2.500 pages. Have in mind, that an RTF document written this
way is extremely compact compared to a similar but bloated document
created directly in Word.

This is the modification (main structure only):

<code stub>

  If rst.RecordCount > 0 Then
    ' Build output filename.
    strRTFFile = FunctionToCreateFileName()
    ' Set RTF header.
    strRTF = cstrRTFBodyHeader
    ' Create RTF file.
    intFile = FreeFile
    Open strRTFFile For Output As #intFile
    ' Write RTF header.
    Print #intFile, strRTF
    
    ' Concatenate RTF bodies.
    With rst
      While .EOF = False
        varMemo = LookupMemo(!ID, !Description)
        If Not IsNull(varMemo) Then
          If Not IsRTF(varMemo) Then
            varMemo = ConvTexttoRTF(varMemo, False)
          Else
            Call ClearRTFNullEnd(varMemo)
          End If
          Call AppendRTFCrLf(varMemo)
          Call ClearRTFNewLineEnd(varMemo)
          strTxt = TrimTextBodyRTF(varMemo, True) & cstrRTFFontPlain
          If Len(strTxt) > 0 Then
            Call ClearRTFFontSize(strTxt)
            strRTF = cstrRTFFontPlain & Space(1) & strTxt & cstrRTFFontPlain & cstrRTFNewLine
            ' Append this RTF paragraph.
            Print #intFile, strRTF
          End If
        End If
        .MoveNext
      Wend
      .Close
    End With
    ' Append RTF closing bracket.
    strRTF = cstrRTFBodyEnd
    Print #intFile, strRTF
    ' Close RTF file.
    Close #intFile
    ' Reset RTB object.
    strRTF = ConvTexttoRTF(vbNullString, True)
  End If

</code stub>

Happy New Year!

/gustav



More information about the AccessD mailing list