Você está offline; aguardando reconexão

Como utilizar o ASP para gerar um documento de Rich Text Format (RTF) para transmissão em sequência para o Microsoft Word

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 270906
Sumário
Este artigo descreve como pode gerar ficheiros de Rich Text Format (RTF) com o script de ASP e transmissão em sequência esses ficheiros para o Microsoft Word. Esta técnica fornece uma alternativa para o lado do servidor automatização do Microsoft Word para geração de documentos de tempo de execução.

Nota Este artigo requer que tenha uma cópia da base de dados Adamastor.mdb o base de exemplo (dados) instalado a partir do Microsoft Access 2000, a partir do Microsoft Access 2002 ou a partir do Microsoft Office Access 2003.
Mais Informação
Existem desvantagens à geração de documentos do Word com o ASP do lado do servidor automatização:
  • Desempenho Microsoft Word é uma automatização out-of-process servidor; out-of-process chamadas têm mais tempo a executar.

  • Escalabilidade como um Automation server, o Microsoft Word tem sobrecarga substancial porque o ficheiro Winword.exe têm de ser carregado para poder reap as vantagens do modelo de objecto rico do Word.
Gerando os documentos a partir do zero e sem a utilização do modelo de objecto do Word, pode tornar a aplicação ASP mais escaláveis e também aumentar o desempenho. Esta abordagem é utilizada nos seguintes exemplos demonstram como utilizar FileSystemObject para criar um ficheiro RTF que possa ser interpretado no Microsoft Word em clientes de browser.

O primeiro exemplo mostra como utilizar o ASP para criar um documento RTF que contém os cabeçalhos e rodapés, contém uma tabela e utiliza cores e estilos de tipo de letra diferente para o texto ao longo do documento. O primeiro exemplo utiliza ADO para aceder a dados de exemplo base de dados Adamastor Access para criar um documento 90 plus páginas.

O segundo exemplo demonstra como criar um documento RTF semelhante de uma impressão em série do Word. O documento resultante contém cabeçalhos e rodapés, formatação e quebras de página e utiliza estilos de tipo de letra diferente e tipos de documento vários parágrafos. Este exemplo também utiliza ADO para aceder a dados de base de dados Adamastor para criar um documento 170 plus página.

Nota A especificação Rich Text Format (RTF) é uma especificação pública para gerar ficheiros de texto compatível com o formato RTF. Pode utilizar a documentação para a especificação no seguinte Web site da MSDN (Microsoft Developer Network) como um recurso para o ajudar a criar os seus próprios ficheiros RTF. No entanto, é fornecida a especificação "como-é", não sendo supportted pelo suporte técnico da Microsoft. Para obter a mais recente versão da especificação RTF, consulte o seguinte Web site da MSDN:

Exemplo ASP 1

ASP seguinte demonstra a criação de um RTF 90 plus página documento que contém um relatório de valores calculados.

Nota Variável sConn neste exemplo de código contém o caminho para a base de dados Adamastor. Confirme se o caminho fornecido é adequado para a instalação do Office. Também terá de fornecer acesso escrita à pasta com o ASP para que o documento pode ser criado. Este acesso deve ser limitado a utilizadores específicos num domínio do Windows NT, mas pode ser aplicado a todos para acesso anónimo.
<%@ Language=VBScript %><%   Dim sRTF, sFileName, sConn   sConn = "c:\program files\microsoft office\office\samples\northwind.mdb"   Response.Buffer = True   'Create the file for the RTF   Dim fso, MyFile   Set fso = CreateObject("Scripting.FileSystemObject")   sFileName = "sample1.doc"   Set MyFile = fso.CreateTextFile(Server.MapPath(".") & "\" & _                                   sFileName, True)   MyFile.WriteLine("{\rtf1")   'Write the color table (for use in background and foreground colors)   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)   'Write the title and author for the document properties   MyFile.WriteLine("{\info{\title Sample RTF Document}" & _                    "{\author Microsoft Developer Support<AngularNoBind>}}</AngularNoBind>")   'Write the page header and footer   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<AngularNoBind>}}</AngularNoBind> of " & _                    "{\field{\*\fldinst NUMPAGES}{\fldrslt 1<AngularNoBind>}}</AngularNoBind> \par}")   'Write a sentence in the first paragraph of the document   MyFile.WriteLine("\par\fs24\cf2 This is a sample \b RTF \b0 " & _                    "document created with ASP.\cf0")   'Connect to the database in read-only mode   Dim conn, rs   Set conn = Server.CreateObject("ADODB.Connection")   conn.Provider = "Microsoft.Jet.OLEDB.4.0"   conn.Mode = 1    'adModeRead=1   conn.Open sConn            'Execute a query that returns ID, Product name and amount of sale   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")   'Write the table header row (appears at top of table on each page)   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        'Starting on a row for a different id, so add the last total and         'then a blank row        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     'Add a new row with the ID, the Product name and the amount     'Note: Amounts over 1000 are formatted with red.     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   'Add a page break and then a new paragraph   MyFile.WriteLine("\par \page")   MyFile.WriteLine("\pard\fs18\cf2\qc " & _                    "This sample provided by Microsoft Developer Support.")   'Close the recordset and database   rs.Close   conn.Close   Set rs = Nothing   Set conn = Nothing      'close the RTF string and file   MyFile.WriteLine("}")   MyFile.Close   Response.Write _       "<META HTTP-EQUIV=""REFRESH"" Content=""0;URL=" & sFileName & """>" %>				

Exemplo ASP 2

O ASP seguinte demonstra uma simulação de uma impressão em série do Word ou carta de formulário. Cada página no documento 170 plus página é gerada de um registo de um conjunto de registos ADO.

Nota Variável sConn neste exemplo de código contém o caminho para a base de dados Adamastor. Confirme se o caminho fornecido é adequado para a instalação do Office. Também terá de fornecer acesso escrita à pasta com o ASP para que o documento pode ser criado. Este acesso deve ser limitado a indivíduos específicos em um NT domínio, mas podem ser aplicadas a todos para acesso anónimo.
<%@ Language=VBScript %><%   Dim sRTF, sConn   sConn = "c:\program files\microsoft office\office\samples\northwind.mdb"   Response.Buffer = True   'Create the file for the RTF   Dim fso, MyFile, sFileName   Set fso = CreateObject("Scripting.FileSystemObject")   sFileName = "sample2.doc"   Set MyFile = fso.CreateTextFile(Server.MapPath(".") & "\" & _                                   sFileName, True)   MyFile.WriteLine("{\rtf1")   'Write the font table   sRTF = "{\fonttbl {\f0\froman\fcharset0 Times New Roman;}" & _          "{\f1\fswiss\fcharset0 Arial;}" & _          "{\f2\fmodern\fcharset0 Courier New;<AngularNoBind>}}</AngularNoBind>"   MyFile.WriteLine sRTF   'Write the title and author for the document properties   MyFile.WriteLine("{\info{\title Sample RTF Document}" & _                    "{\author Microsoft Developer Support<AngularNoBind>}}</AngularNoBind>")   'Write the document header and footer   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, " & _                    " Monday-Friday between 8:00 am and 5:00 pm} \par}")   'Connect to the database in read-only mode   Dim conn, rs   Set conn = Server.CreateObject("ADODB.Connection")   conn.Provider = "Microsoft.Jet.OLEDB.4.0"   conn.Mode = 1    'adModeRead=1   conn.Open sConn   'Execute a query that returns ID, Product name and amount of sale   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)          'Write the "body" of the form letter         MyFile.WriteLine   "\fs26\f1"   'Default font     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 Thank you for your order on " & _                        rs.Fields("ShippedDate").Value & _                        ". Your order has been shipped: "     MyFile.WriteLine   "\par"     MyFile.WriteLine   "\par"     MyFile.WriteLine   "\pard \li720 {\f2"     MyFile.WriteLine   "\par \b Order Number \b0 \tab " & _                        rs.Fields("OrderID").Value     MyFile.WriteLine   "\par \b Shipped By \b0 \tab " & _                        rs.Fields("ShipVia").Value     MyFile.WriteLine   "\par \b Shipped On \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     'Add a page break and then a new paragraph     If Not(rs.eof) Then MyFile.WriteLine("\pard \page")   Loop   'Close the recordset and database   rs.Close   conn.Close   Set rs = Nothing   Set conn = Nothing      'close the RTF string and file   MyFile.WriteLine("}")   MyFile.Close   Response.Write _        "<META HTTP-EQUIV=""REFRESH"" Content=""0;URL=" & sFileName & """>"%> 				
Referências
Para obter mais informações, clique números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft:
257757Considerações para a automatização do lado do servidor do Office
193998Como ler e apresentar dados binários no ASP
266263Erro: Word 2000 e Excel 2000 visualizar ASP origem quando utiliza o tipo de MIME a sequência de dados
247318Erro: Word 2000 e Excel 2000 não redireccionar correctamente quando utilizar Response.Redirect
RichText rich-text WD2007

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 270906 - Última Revisão: 04/19/2007 18:37:17 - Revisão: 8.1

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

  • kbmt kbexpertiseinter kbautomation kbfso kbhowto kbprogramming KB270906 KbMtpt
Comentários