ASP를 사용하여 RTF(서식 있는 텍스트 형식) 문서를 생성하여 Microsoft Word에 스트리밍하는 방법

Office 2003에 대한 지원이 종료되었습니다.

Microsoft는 2014년 4월 8일 Office 2003에 대한 지원을 종료했습니다. 이러한 변경에 따라 해당 소프트웨어 업데이트 및 보안 옵션이 영향을 받습니다. 사용자에게 미치는 영향 및 계속 보호를 받는 방법에 대해 알아보십시오.

요약
이 문서에서는 ASP 스크립트를 사용하여 RTF(서식 있는 텍스트 형식) 파일을 생성한 다음 이러한 파일을 Microsoft Word에 스트리밍하는 방법을 설명합니다. 이 기법은 런타임 문서 생성을 위한 Microsoft Word의 서버쪽 자동화에 대한 대안을 제공합니다.
추가 정보
ASP 서버쪽 자동화를 사용하여 Word 문서를 생성하는 데는 단점이 있습니다.
  • 성능 - Microsoft Word는 Out-of-Process(독립 프로세스) 자동화 서버이며 독립 프로세스 호출은 실행하는 데 오래 걸립니다.

  • 확장성 - 자동화 서버로서 Word의 풍부한 개체 모델의 이점을 활용하려면 Winword.exe 파일을 로드해야 하므로 Microsoft Word에는 상당한 오버헤드가 있습니다.
Word 개체 모델을 사용하지 않고 문서를 처음부터 생성하여 ASP 응용 프로그램을 더욱 확장성 있게 만들고 성능도 향상시킬 수 있습니다. 이 방법은 FileSystemObject를 사용하여 브라우저 클라이언트의 Microsoft Word에서 해석할 수 있는 RTF 파일을 만드는 방법을 보여 주는 다음 예제에 사용됩니다.

첫 번째 예제에서는 ASP를 사용하여 머리글과 바닥글 및 표가 있는 RTF 문서를 만들고 문서 전체의 텍스트에 다양한 글꼴과 색상을 사용하는 방법을 보여 줍니다. 이 예제에서는 ADO를 사용하여 예제 Northwind Access 데이터베이스의 데이터에 액세스하여 90페이지 이상의 문서를 만듭니다.

두 번째 예제에서는 Word 편지 병합에서와 비슷한 RTF 문서를 만드는 방법을 보여 줍니다. 생성되는 문서는 머리글과 바닥글, 다양한 단락 서식과 페이지 나누기를 포함하며 문서 전체에 다양한 글꼴 스타일과 글꼴 종류를 사용합니다. 이 예제에서는 ADO를 사용하여 Northwind 데이터베이스의 데이터에 액세스하여 170페이지 이상의 문서를 만듭니다.

참고 RTF(서식 있는 텍스트) 사양은 RTF 호환 텍스트 파일을 생성하는 공용 사양합니다. 다음 MSDN(Microsoft Developer Network) 웹 사이트에서 사양에 대한 설명서를 RTF 파일을 만드는 데 리소스로 사용할 수 있습니다. 그러나 사양은 "있는 그대로" 제공되며 Microsoft 기술지원부에서는 지원하지 않습니다. RTF 사양의 최신 버전은 다음 MSDN 웹 사이트를 참조하십시오.

ASP 예제 1

다음 ASP에서는 계산된 수치로 구성된 보고서를 포함하는 90페이지 이상의 RTF 문서를 만드는 방법을 보여 줍니다.

참고 이 코드 예제에서 변수 sConn에는 Northwind 데이터베이스에 대한 경로가 포함되어 있습니다. 제공되는 경로가 Office 설치에 적합한지 확인합니다. 문서를 만들 수 있도록 ASP가 속한 폴더에 대해 쓰기 권한을 제공해야 합니다. 이 액세스는 Windows NT 도메인 아래의 특정 개인으로 제한해야 하지만 익명 액세스를 위해 Everyone에 적용할 수 있습니다.
<%@ 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}}")   '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}} of " & _                    "{\field{\*\fldinst NUMPAGES}{\fldrslt 1}} \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 & """>" %>				

ASP 예제 2

다음 ASP에서는 Word 편지 병합 또는 편지 양식의 시뮬레이션을 보여 줍니다. 170페이지 이상 되는 문서의 모든 페이지는 ADO 레코드 집합에 있는 레코드에서 생성됩니다.

참고 이 코드 예제에서 변수 sConn에는 Northwind 데이터베이스에 대한 경로가 포함되어 있습니다. 제공되는 경로가 Office 설치에 적합한지 확인합니다. 문서를 만들 수 있도록 ASP가 속한 폴더에 대해 쓰기 권한을 제공해야 합니다. 이 액세스는 NT 도메인 아래의 특정 개인으로 제한해야 하지만 익명 액세스를 위해 Everyone에 적용할 수 있습니다.
<%@ 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;}}"   MyFile.WriteLine sRTF   'Write the title and author for the document properties   MyFile.WriteLine("{\info{\title Sample RTF Document}" & _                    "{\author Microsoft Developer Support}}")   '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 & """>"%> 				
참조
자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
257757 Office의 서버쪽 자동화에 대한 고려 사항
193998 HOWTO: ASP에서 이진 데이터 읽기 및 표시
266263 BUG: Word 2000과 Excel 2000에서 MIME 유형을 사용하여 데이터 스트림을 전송할 경우 ASP 소스가 표시된다
247318 BUG: Response.Redirect를 사용할 때 Word 2000 및 Excel 2000이 제대로 리디렉션되지 않는다




Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.
richtext rich-text
속성

문서 ID: 270906 - 마지막 검토: 09/13/2006 04:32:00 - 수정: 7.0

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

  • kbhowto kbprogramming kbautomation kbfso KB270906
피드백