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

De ondersteuning voor Office 2003 is beëindigd

De ondersteuning voor Office 2003 is door Microsoft beëindigd op 8 april. Deze wijziging heeft gevolgen voor software-updates en beveiligingsopties. Meer informatie over wat voor gevolgen dit voor u heeft en hoe u beveiligd blijft.

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:

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
richtext rich-text
Eigenschappen

Artikel-id: 270906 - Laatst bijgewerkt: 08/18/2006 14:27:29 - Revisie: 7.0

Microsoft Office Word 2003, Microsoft Word 2000 Standard Edition, Microsoft Word 97 Standard Edition, Microsoft Active Server Pages 4.0

  • kbautomation kbfso kbhowto kbprogramming KB270906
Feedback