ASP gebruiken om een RTF-document te genereren om dit stroomsgewijs naar Microsoft Word te verzenden

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 270906 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Samenvatting

In dit artikel wordt beschreven hoe u Rich Text Format-bestanden (RTF) kunt genereren met ASP-script en deze kunt verzenden naar Microsoft Word. Deze techniek biedt een alternatief voor de Microsoft Word-automatiseringsmethode op servers waarbij documenten in runtime worden gemaakt.

Meer informatie

Er zijn nadelen verbonden aan het genereren van Word-documenten met ASP-automatisering op servers:
  • Performance Microsoft Word is een out-of-process-automatiseringsserver; out-of-process-oproepen duren langer om uit te voeren.

  • Schaalbaarheid als automatiseringsserver, Microsoft Word heeft heel wat overhead omdat het bestand Winword.exe moet worden geladen om voordeel te kunnen halen uit het krachtige Word-objectmodel.
Door geheel nieuwe documenten te genereren zonder het Word-objectmodel te gebruiken, kunt u uw ASP-toepassing meer schaalbaar maken en de prestaties verbeteren. Deze benadering wordt gebruikt in de volgende voorbeelden die aantonen hoe het FileSystemObject moet worden gebruikt om een RTF-bestand te maken dat kan worden geïnterpreteerd in Microsoft Word op het niveau van browserclient.

In het eerste voorbeeld ziet u hoe u ASP kunt gebruiken voor het maken van een RTF-document dat een kop- en voettekst en een tabel bevat en dat overal verschillende tekenstijlen en tekstkleuren gebruikt. In het eerste voorbeeld wordt ADO gebruikt om toegang te krijgen tot gegevens uit de voorbeelddatabase Noordenwind van Access om een document van meer dan 90 pagina's te maken.

In het tweede voorbeeld ziet u hoe u een RTF-document maakt op dezelfde manier als bij een Word-samenvoegbewerking. Het aldus verkregen document bevat kop- en voettekst, verschillende vormen van alineaopmaak en pagina-einden, en overal worden er verschillende tekenstijlen en lettertypen gebruikt. In dit voorbeeld wordt bovendien ADO gebruikt om toegang te krijgen tot gegevens uit de database Noordenwind om een document van meer dan 170 pagina's te maken.

Opmerking De Rich Text Format-specificatie (RTF) is een openbare specificatie voor het genereren van RTF-compatibele tekstbestanden. De documentatie voor de specificatie die u terugvindt op de hieronder vermelde MSDN-website (Microsoft Developer Network), kunt u gebruiken als hulpmiddel bij het maken van uw eigen RTF-bestanden. De specificatie wordt echter als zodanig aangeboden en wordt niet ondersteund door Microsoft Technical Support. Zie de hieronder vermelde MSDN-website voor de meest recente versie van de RTF-specificatie:
Rich Text Format (RTF) Specificatie 1.6
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnrtfspec/html/rtfspec.asp

ASP Voorbeeld 1

De volgende ASP-code geeft aan hoe u een RTF-document maakt van meer dan 90 pagina's dat een cijferrapport bevat.

Opmerking De variabele sConn in deze voorbeeldcode bevat het pad naar de database Noordenwind. Controleer of het opgegeven pad geschikt is voor uw geïnstalleerde versie van Office. U moet ook Schrijftoegang verlenen voor de map waarin de ASP-code zich bevindt, zodat het document kan worden gemaakt. Deze toegang moet beperkt blijven tot een aantal specifieke gebruikers onder een Windows NT-domein, maar anonieme toegang kan voor Iedereen worden verleend.
<%@ Language=VBScript %>
<%

   Dim sRTF, sFileName, sConn
   sConn = "c:\program files\microsoft office\office\samples\northwind.mdb"

   Response.Buffer = True

   'Maak het bestand voor de RTF
   Dim fso, MyFile
   Set fso = CreateObject("Scripting.FileSystemObject")
   sFileName = "sample1.doc"
   Set MyFile = fso.CreateTextFile(Server.MapPath(".") & "\" & _
                                   sFileName, True)

   MyFile.WriteLine("{\rtf1")

   'Schrijf de kleurentabel (voor achtergrond- en voorgrondkleuren)
   sRTF = "{\colortbl;\red0\green0\blue0;\red0\green0\blue255;" & _
          "\red0\green255\blue255;\red0\green255\blue0;" & _
          "\red255\green0\blue255;\red255\green0\blue0;" & _
          "\red255\green255\blue0;\red255\green255\blue255;}"
   MyFile.WriteLine(sRTF)

   'Schrijf de titel en auteur voor de eigenschappen van het document
   MyFile.WriteLine("{\info{\title Sample RTF Document}" & _
                    "{\author Microsoft Developer Support}}")

   'Schrijf de koptekst en voettekst van de pagina
   MyFile.WriteLine("{\header\pard\qc{\fs50 " & _
                    "ASP-Generated RTF\par}{\fs18\chdate\par}\par\par}")
   MyFile.WriteLine("{\footer\pard\qc\brdrt\brdrs\brdrw10\brsp100" & _
                    "\fs18 Page " & _
                    "{\field{\*\fldinst PAGE}{\fldrslt 1}} of " & _
                    "{\field{\*\fldinst NUMPAGES}{\fldrslt 1}} \par}")

   'Schrijf een zin in de eerste alinea van het document
   MyFile.WriteLine("\par\fs24\cf2 Dit is een voorbeeld \b RTF \b0 " & _
                    "document gemaakt met ASP.\cf0")

   'Maak verbinding met de database in de modus Alleen-lezen 
   Dim conn, rs
   Set conn = Server.CreateObject("ADODB.Connection")
   conn.Provider = "Microsoft.Jet.OLEDB.4.0"
   conn.Mode = 1    'adModeRead=1
   conn.Open sConn
         
   'Voer een query uit die IDs, productnamen en verkoopbedragen retourneert
   Set rs = Server.CreateObject("ADODB.Recordset")
   rs.Open "SELECT [Order Details].OrderID AS ID, " & _
           "Products.ProductName AS Name, " & _
           "[Order Details].[UnitPrice]*[Quantity] AS Amount " & _
           "FROM Products INNER JOIN [Order Details] ON " & _
           "Products.ProductID = [Order Details].ProductID " & _
           "ORDER BY [Order Details].OrderID", conn, 3   'adOpenStatic = 3

   MyFile.WriteLine("{") 'Start table
   MyFile.WriteLine("\par\par\fs24")

   'Schrijf de koptekst van de tabel (bovenste rij van de tabel op elke pagina)
   sRTF = "\trowd\trhdr\trgaph30\trleft0\trrh262" & _
          "\cellx2000\cellx7000\cellx9000" & _
          "\pard\intbl\qc\b\i\ul Order ID \ul0\i0\b0\par\cell" & _
          "\pard\intbl\ql\b\i\ul Product \ul0\i0\b0\par\cell" & _
          "\pard\intbl\qr\ul\b\i Amount \ul0\i0\b0\par\cell" & _
          "\pard\intbl\row"
   MyFile.WriteLine(sRTF)

   dim LastID
   dim CurID
   dim CurTotal
   dim bFirstRow

   bFirstRow=true

   do while not (rs.eof)

     if LastID<>rs("ID").Value and not(bFirstRow)  Then

        'Start op een rij voor een andere id, voeg dus het laatste totaal toe en
        'vervolgens een lege rij
        sRTF = "\trowd\trgaph30\trleft0\trrh262" & _
               "\cellx2000\cellx7000\clbrdrb\brdrdb\cellx9000" & _
               "\pard\intbl\cell\pard\intbl\cell\pard\intbl\qr\b " & _
               FormatCurrency(CurTotal, 0, False, False, True) & _
               "\b0\cell\pard\intbl\row" & _
               "\trowd\trgaph30\trleft0\trrh262" & _
               "\cellx2000\cellx7000\cellx9000" & _
               "\pard\intbl\cell\pard\intbl\cell\pard\intbl\cell" & _
               "\pard\intbl\row"
        MyFile.WriteLine(sRTF)

        CurID = rs("ID").Value
        CurTotal = 0
     elseif bFirstRow then
        CurID = rs("ID").Value
     else
        CurID = ""
     end if

     'Voeg een rij met de ID, de productnaam en het bedrag toe
     'Opmerking: Bedragen van meer dan 1000 worden met rood opgemaakt.
     sRTF = "\trowd\trgaph30\trleft0\trrh262" & _
            "\cellx2000\cellx7000\cellx9000" & _
            "\pard\intbl\qc " & CurID & "\cell" & _
            "\pard\intbl\ql " & rs("Name").Value & "\cell"
     If rs("Amount").Value >1000 Then
        sRTF = sRTF & "\pard\intbl\qr\cf6 " & _
               FormatNumber(rs("Amount").Value, 0, False, False, True) & _
               "\cf0\cell\pard\intbl\row"
     else
        sRTF = sRTF & "\pard\intbl\qr " & _
               FormatNumber(rs("Amount").Value, 0, False, False, True) & _
               "\cell\pard\intbl\row"
     end if

     MyFile.WriteLine(sRTF)

     LastID = rs("ID").Value
     CurTotal = CurTotal + rs("Amount").Value
     rs.MoveNext
     bFirstRow=false

   loop

   MyFile.WriteLine("}") 'End Table

   'Voeg een pagina-einde en vervolgens een nieuwe alinea toe
   MyFile.WriteLine("\par \page")
   MyFile.WriteLine("\pard\fs18\cf2\qc " & _
                    "Dit voorbeeld werd verstrekt door Microsoft Developer Support.")

   'Sluit de recordset en database
   rs.Close
   conn.Close
   Set rs = Nothing
   Set conn = Nothing
   
   'Sluit de RTF-tekenreeks en het RTF-bestand
   MyFile.WriteLine("}")
   MyFile.Close

   Response.Write _
       "<META HTTP-EQUIV=""REFRESH"" Content=""0;URL=" & sFileName & """>"
 
%>
				

ASP Voorbeeld 2

In de volgende ASP-code ziet u een simulatie van een samenvoegbewerking of standaardbrief in Word. Elke pagina van het document van meer dan 170 pagina's wordt gegenereerd op basis van een record in een ADO-recordset.

Opmerking De variabele sConn in deze voorbeeldcode bevat het pad naar de database Noordenwind. Controleer of het opgegeven pad geschikt is voor uw geïnstalleerde versie van Office. U moet ook Schrijftoegang verlenen voor de map waarin de ASP-code zich bevindt, zodat het document kan worden gemaakt. Deze toegang moet beperkt blijven tot een aantal specifieke gebruikers onder een Windows NT-domein, maar anonieme toegang kan voor Iedereen worden verleend.
<%@ Language=VBScript %>
<%
   Dim sRTF, sConn
   sConn = "c:\program files\microsoft office\office\samples\northwind.mdb"

   Response.Buffer = True

   'Maak het bestand voor de RTF
   Dim fso, MyFile, sFileName
   Set fso = CreateObject("Scripting.FileSystemObject")
   sFileName = "sample2.doc"
   Set MyFile = fso.CreateTextFile(Server.MapPath(".") & "\" & _
                                   sFileName, True)

   MyFile.WriteLine("{\rtf1")

   'Schrijf de tabel met lettertypen
   sRTF = "{\fonttbl {\f0\froman\fcharset0 Times New Roman;}" & _
          "{\f1\fswiss\fcharset0 Arial;}" & _
          "{\f2\fmodern\fcharset0 Courier New;}}"
   MyFile.WriteLine sRTF

   'Schrijf de titel en auteur voor de eigenschappen van het document
   MyFile.WriteLine("{\info{\title Sample RTF Document}" & _
                    "{\author Microsoft Developer Support}}")

   'Schrijf de koptekst en voettekst van het document 
   MyFile.WriteLine("{\header\pard\qc\brdrb\brdrs\brdrw10\brsp100" & _
                    "{\fs50 Northwind Traders} \par}")
   MyFile.WriteLine("{\footer\pard\qc\brdrt\brdrs\brdrw10\brsp100" & _
                    "{\fs18 Questions?\par Call (111)-222-3333, " & _
                    " Maandag-vrijdag van 08.00 tot 17.00 uur} \par}")

   'Maak een verbinding met de database in de modus Alleen-lezen 
   Dim conn, rs
   Set conn = Server.CreateObject("ADODB.Connection")
   conn.Provider = "Microsoft.Jet.OLEDB.4.0"
   conn.Mode = 1    'adModeRead=1
   conn.Open sConn

   'Voer een query uit die IDs, productnamen en verkoopbedragen retourneert
   Set rs = Server.CreateObject("ADODB.Recordset")
   rs.Open "SELECT Orders.ShippedDate, Orders.ShipVia, " & _
           "Orders.OrderDate, Orders.OrderID, " & _
           "Customers.ContactName FROM Customers INNER JOIN Orders ON " & _
           "Customers.CustomerID = " & _
           "Orders.CustomerID WHERE (((Orders.ShippedDate) Between " & _
           "#1/1/1998# And #3/31/98#))",conn,3  'adOpenStatic = 3

   Do While Not (rs.eof)
     
     'Schrijf de "hoofdtekst" van de standaardbrief
    
     MyFile.WriteLine   "\fs26\f1"   'Standaardlettertype

     MyFile.WriteLine   "\pard"
     MyFile.WriteLine   "\par\par\par\par"
     MyFile.WriteLine   "\par RE: Order #" & rs.Fields("OrderID").Value
     MyFile.WriteLine   "\par"
     MyFile.WriteLine   "\par"
     MyFile.WriteLine   "\par " & rs.Fields("ContactName").Value & ", "
     MyFile.WriteLine   "\par"
     MyFile.WriteLine   "\par Bedankt voor uw bestelling op " & _
                        rs.Fields("ShippedDate").Value & _
                        ". Uw bestelling werd verzonden: "
     MyFile.WriteLine   "\par"
     MyFile.WriteLine   "\par"

     MyFile.WriteLine   "\pard \li720 {\f2"
     MyFile.WriteLine   "\par \b Bestelnummer \b0 \tab " & _
                        rs.Fields("OrderID").Value
     MyFile.WriteLine   "\par \b Verzonden door \b0 \tab " & _
                        rs.Fields("ShipVia").Value
     MyFile.WriteLine   "\par \b Verzonden op \b0 \tab " & _
                        rs.Fields("ShippedDate").Value
     MyFile.WriteLine   "\par}"
    
     MyFile.WriteLine   "\pard"
     MyFile.WriteLine   "\par"
     MyFile.WriteLine   "\par Northwind Traders is committed to " & _
                        "bringing you products of the " & _
                        "highest quality from all over the world. If " & _
                        "at any time you are not completely satisfied " & _
                        "with any of our products, you may " & _
                        "return them to us for a full refund."
     MyFile.WriteLine   "\par"

     MyFile.WriteLine   "\pard {\fs18 \qc \i"
     MyFile.WriteLine   "\par Thank you for choosing Northwind Traders!"
     MyFile.WriteLine   "\par}"

     rs.MoveNext

     'Voeg een pagina-einde en vervolgens een nieuwe alinea toe
     If Not(rs.eof) Then MyFile.WriteLine("\pard \page")

   Loop

   'Sluit de recordset en database
   rs.Close
   conn.Close
   Set rs = Nothing
   Set conn = Nothing
   
   'Sluit de RTF-tekenreeks en het RTF-bestand
   MyFile.WriteLine("}")
   MyFile.Close

   Response.Write _
        "<META HTTP-EQUIV=""REFRESH"" Content=""0;URL=" & sFileName & """>"

%> 
				

Referenties

Voor meer informatie klikt u op de volgende artikelnummers in de Microsoft Knowledge Base:
257757INFO: Overwegingen bij de automatisering van Office op servers
193998Binaire gegevens in ASP lezen en weergeven
266263BUG: In Word 2000 en Excel 2000 wordt de ASP-bron weergegeven bij gebruik van MIME-type om gegevens af te spelen
247318BUG: Word 2000 en Excel 2000 sturen niet correct door bij gebruik van Response.Redirect

Eigenschappen

Artikel ID: 270906 - Laatste beoordeling: vrijdag 18 augustus 2006 - Wijziging: 7.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Office Word 2003
  • Microsoft Word 2000 Standard Edition
  • Microsoft Word 97 Standard Edition
  • Microsoft Active Server Pages 4.0
Trefwoorden: 
kbautomation kbfso kbhowto kbprogramming KB270906

Geef ons feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com