Deze stapsgewijze handleiding voor het genereren van RTF-indeling gebruiken
(RTF) van XML (Extensible Markup Language) met behulp van Visual Basic.NET.
RTF-indeling is een op tekst gebaseerde indeling gecodeerd opgemaakte tekst,
document indeling en afbeeldingen. Het wordt algemeen gebruikt met Microsoft Word. Omdat
RTF tekst gebaseerde, dat gemakkelijk kan worden gegenereerd met code. Als u XML-gegevens
dat u wilt weer geven in Word als een catalogus lijst/of type document voor Afdruk samenvoegen
vervolgens uw XML-gegevens transformeren naar een RTF-stream kan zijn een ideale oplossing
voor u. En, in feite, als u een oplossing ontwikkelen waar u genereren
documenten op een webserver, die vervolgens met behulp van een op tekst gebaseerde documenten genereren
indeling, bijvoorbeeld HTML of RTF, heeft de voorkeur boven de automatisering van server-side
Word.
Dit artikel bevat voorbeeldcode met stapsgewijze
instructies voor het omzetten van XML naar RTF voor weergave in Word via verschillende
benaderingen:
Sla het RTF naar een bestand en opent in Word.
De RTF overzetten naar Word met behulp van Windows
Klembord.
De RTF naar Word gehost in Microsoft Internet streamen
Explorer vanaf een ASP-pagina.NET Web toepassing.
De specificatie RTF-indeling
De specificatie RTF (RICH Text Format) is een openbare
specificatie voor het genereren van RTF-compatibele tekstbestanden. U kunt de
documentatie voor de specificatie op de volgende Microsoft Developer
Network (MSDN)-website als een bron om te helpen bij het bouwen van uw eigen RTF-bestanden.
Echter, de specificatie wordt geleverd "als-is", en geen ondersteuning wordt geleverd door
Technische ondersteuning van Microsoft voor de specificatie. Klik op de volgende koppelingen
de RTF-specificatie:
U kunt geldige XML uit elke bron en transformeren naar RTF.
De volgende procedure laat zien hoe u aangepaste XML kan transformeren naar RTF
een opgeslagen in een bestand of naar het Klembord gekopieerd.
Maak een nieuwe Visual Basic.NETTOWindows-toepassing. Formulier1 wordt gemaakt.
Voeg twee knoppen toe aan Form1.
Op deWeergavemenu, klikt u opCode.
De volgende invoegen boven aan het code venster voordat u
de implementatie klasse Form1:
Voeg de volgende code in de klasse Form1 uitvoering
(vóórEnd Class):
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Button1.Text = "To File"
Button2.Text = "To Clipboard"
End Sub
Private Sub ButtonsClick(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click, Button2.Click
Dim sPath As String = Directory.GetParent(Directory.GetCurrentDirectory()).ToString
' Open the XML file.
Dim xmlDoc As New XmlDocument()
xmlDoc.Load(sPath & "\Dictionary.xml")
' Open the XSL file.
Dim xslDoc As New XslTransform()
xslDoc.Load(sPath & "\Dictionary.xslt")
Select Case sender.name
Case "Button1"
' Transform the XSL and save it to file.
Dim TWrtr As New XmlTextWriter(sPath & "\Dictionary.RTF", System.Text.Encoding.Default)
xslDoc.Transform(xmlDoc, Nothing, TWrtr, Nothing)
TWrtr.Close()
MsgBox("Transformed RTF saved to " & sPath & "\Dictionary.RTF")
Case "Button2"
' Transform the XSL and copy it to the clipboard.
Dim SWrtr As New StringWriter()
xslDoc.Transform(xmlDoc, Nothing, SWrtr, Nothing)
Dim datObj As New DataObject(DataFormats.Rtf, SWrtr)
Clipboard.SetDataObject(datObj)
SWrtr.Close()
MsgBox("Transformed RTF copied to the clipboard.")
End Select
End Sub
Een XML-bestand toevoegen aan uw project:
Op deProjectmenu, klikt u opNieuw Item toevoegen.
Klik in de lijst met sjablonenXML-bestand.
Typ de naamDictionary.XMLen
Klik vervolgens opOpen.
Het volgende toevoegen aan de inhoud van Dictionary.xml:
<Dictionary>
<Entries>
<Entry>
<Word Type="1">Energetic</Word>
<Definition>Having, exerting, or displaying energy</Definition>
</Entry>
<Entry>
<Word Type="1">Happy</Word>
<Definition>Enjoying, displaying, or characterized by pleasure or joy</Definition>
</Entry>
<Entry>
<Word Type="2">Emotion</Word>
<Definition>A complex, strong subjective response</Definition>
</Entry>
</Entries>
</Dictionary>
Een XSLT-bestand aan uw project toevoegen:
Op deProjectmenu, klikt u opNieuw Item toevoegen.
Klik in de lijst met sjablonenXSLT-bestand.
Typ de naamDictionary.XSLTen klik vervolgens opOpen.
Vervangen door de inhoud van Dictionary.xslt met de
volgende:
Druk op F5 om te bouwen en uitvoeren van het programma.
Klik opNaar bestandhet XML-bestand getransformeerd opslaan naar een bestand (Dictionary.rtf). U kunt
het RTF-bestand opent in Word bekijkt u de resultaten van de
transformatie.
Klik opNaar Klembordde getransformeerde XML kopiëren naar het Klembord van Windows. U kunt
Plak de inhoud van het Klembord in een nieuw of bestaand Word-document wilt weer geven
de resultaten.
Een gegevens set te transformeren naar RTF
In Visual Basic.NET kunt u gemakkelijk doen transformaties op
gegevens sets. Deze procedure laat zien hoe u kunt nemen gerelateerde gegevens uit de
voorbeeld data base Noorden wind en transformeren naar RTF. Twee verschillende
transformaties worden aangetoond: een eenvoudige RTF-document met een overzicht van de klant
contact gegevens en een iets complexer RTF-document dat wordt weer gegeven
Order informatie voor klanten in een samen voeg type indeling.
Start een nieuwe Visual BasicASP-PAGINA.NET Web toepassingen sla het ophttp://localhost/RTFDemo.
WebForm1voor u gemaakt.
Twee toevoegenKnopbesturings elementen naar WebForm1.
OPMERKING: De volgende code wordt ervan uitgegaan dat u SQL Server hebt geïnstalleerd op de
localhost. Als u een andere computer te gebruiken, lid van de gegevensbron wijzigen
van de verbindings reeks dienovereenkomstig.
Private Sub ButtonsClick(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click, Button2.Click
' Connect to the data source.
Dim nwindConn As SqlConnection = New SqlConnection( _
"Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI")
nwindConn.Open()
' Build a dataset based on whether you requested to view a list of
' orders or a list of contacts.
Dim ds As DataSet
Dim sXSL As String
Select Case (sender.id)
Case "Button1"
ds = New DataSet("Contacts")
Dim ContactsDA As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM Customers", nwindConn)
ContactsDA.Fill(ds, "Customers")
' XSLT to use for transforming this dataset.
sXSL = "Contacts.xslt"
Case "Button2"
ds = New DataSet("CustomerOrders")
Dim custDA As SqlDataAdapter = New SqlDataAdapter("SELECT CustomerID, CompanyName, " & _
"Address, City, Region, PostalCode, Country FROM Customers", nwindConn)
custDA.Fill(ds, "Customers")
Dim ordersDA As SqlDataAdapter = New SqlDataAdapter("SELECT OrderID, CustomerID, Freight " & _
"FROM Orders", nwindConn)
ordersDA.Fill(ds, "Orders")
Dim ordersdetailDA As SqlDataAdapter = New SqlDataAdapter( _
"SELECT [Order Details].OrderID, Products.ProductName, [Order Details].Quantity, " & _
"[Order Details].[UnitPrice]*[Quantity]*(1-[Discount]) AS ItemTotal " & _
"FROM Products INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID " _
, nwindConn)
ordersdetailDA.Fill(ds, "OrderDetails")
nwindConn.Close()
ds.Relations.Add("CustOrders", _
ds.Tables("Customers").Columns("CustomerID"), _
ds.Tables("Orders").Columns("CustomerID")).Nested = True
ds.Relations.Add("OrdersToOrdersDetail", _
ds.Tables("Orders").Columns("OrderID"), _
ds.Tables("OrderDetails").Columns("OrderID")).Nested = True
' XSLT to use for transforming this dataset.
sXSL = "CustOrders.xslt"
End Select
' Close the connection to the data source.
nwindConn.Close()
' Transform the dataset by using the appropriate stylesheet.
Dim xmlDoc As XmlDataDocument = New XmlDataDocument(ds)
Dim xslTran As XslTransform = New XslTransform()
xslTran.Load(Server.MapPath(sXSL))
' Stream the results of the transformation to Word.
Response.ContentType = "application/msword"
Response.Charset = ""
Response.ContentEncoding = System.Text.Encoding.Default
xslTran.Transform(xmlDoc, Nothing, Response.Output)
End Sub
Voeg de volgende regels code aan het begin van
WebForm1.aspx.vb, vóór de implementatie van WebForm1 klasse:
Op deProjectmenu, klikt u opNieuw Item toevoegen. Klik in de lijst met sjablonenXSLT-bestand, de bestands naamContacts.XSLT, en klik vervolgens opOpen.
De inhoud van Contacts.xslt vervangen door het volgende:
Op deProjectmenu, klikt u opNieuw Item toevoegen. Klik in de lijst met sjablonenXSLT-bestand, de bestands naamCustOrders.xslt, en klik vervolgens opOpen.
De inhoud van CustOrders.xslt vervangen door het volgende:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="urn:my-scripts" >
<xsl:output method="text"/>
<msxsl:script language="VB" implements-prefix="user">
Dim CustomerTotal as Double = 0
Dim OrderSubtotal as Double = 0
Function AddToOrderSubtotal(amt)
amt.MoveNext
OrderSubtotal = OrderSubtotal + System.Convert.ToDouble(amt.Current.Value)
End Function
Function GetOrderSubtotal
GetOrderSubtotal = OrderSubtotal
End Function
Function GetCustomerTotal
GetCustomerTotal = CustomerTotal
CustomerTotal = 0
End Function
Function GetOrderTotal(freight)
freight.MoveNext
nFreight = System.Convert.ToDouble(freight.Current.Value)
GetOrderTotal = nFreight + OrderSubtotal
CustomerTotal = nFreight + OrderSubtotal + CustomerTotal
OrderSubtotal = 0
End Function
</msxsl:script>
<xsl:template match="CustomerOrders">
<xsl:text>{\rtf1</xsl:text>
<xsl:text>{\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;\red221\green221\blue221;}</xsl:text>
<xsl:text>{\info{\title Sample RTF Document}{\author Microsoft Developer Support}}</xsl:text>
<xsl:text>{\header\pard\qc{\fs50 ASP-Generated RTF\par}{\fs18\chdate\par}\par\par}</xsl:text>
<xsl:text>{\footer\pard\qc\brdrt\brdrs\brdrw10\brsp100\fs18 Page {\field{\*\fldinst PAGE}</xsl:text>
<xsl:text>{\fldrslt }} of {\field{\*\fldinst NUMPAGES}{\fldrslt 1}} \par}</xsl:text>
<xsl:apply-templates select="Customers"/>
<xsl:text>}</xsl:text>
</xsl:template>
<xsl:template match="Customers">
<xsl:text>\par\pard\fs20\cf2\qr\b </xsl:text><xsl:value-of select="CustomerID"/><xsl:text>\cf0\b0</xsl:text>
<xsl:text>\par\pard </xsl:text><xsl:value-of select="CompanyName"/>
<xsl:text>\par </xsl:text><xsl:value-of select="Address"/>
<xsl:text>\par </xsl:text><xsl:value-of select="City"/>
<xsl:text>, </xsl:text><xsl:value-of select="Region"/>
<xsl:text> </xsl:text><xsl:value-of select="PostalCode"/>
<xsl:text>\par </xsl:text><xsl:value-of select="Country"/>
<xsl:text>\par\par</xsl:text>
<xsl:apply-templates select="Orders"/>
<xsl:text>\trowd\cellx7000\cellx9000\pard\intbl\ql\b\cbpat1 </xsl:text>
<xsl:text>Order Total for the Current Period:\cell </xsl:text>
<xsl:text>\qr</xsl:text>
<xsl:variable name="CustTtl" select="user:GetCustomerTotal()"/>
<xsl:value-of select="format-number($CustTtl,'$###0.00')"/>
<xsl:text>\cell</xsl:text>
<xsl:text>\pard\intbl\row</xsl:text>
<xsl:text>\pard\par\pard</xsl:text>
<xsl:text>\pard\plain\fs18\cf6\qc</xsl:text>
<xsl:choose>
<xsl:when test="$CustTtl = 0">
<xsl:text>\b We've missed hearing from you!\b0 </xsl:text>
<xsl:text> At your convenience, please call your personal sales representative </xsl:text>
<xsl:text>so that we may discuss our specials for new and returning customers!</xsl:text>
</xsl:when>
<xsl:when test="$CustTtl > 2000">
<xsl:text>\b Congratulations!\b0 Your purchases for this period qualify you for a \b 20%\b0 </xsl:text>
<xsl:text> discount on one of your next orders. To take advantage of this offer, provide </xsl:text>
<xsl:text>the coupon code ABC123XYZ when placing your order.</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text> We value your patronage with Northwind Traders and would love to hear from you. </xsl:text>
<xsl:text>If you have any questions about our upcoming line of products or if you want </xsl:text>
<xsl:text>a catalog for the coming season, call 1-888-000-000.</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:text>\par\pard</xsl:text>
<xsl:text>\par \page</xsl:text>
</xsl:template>
<xsl:template match="Orders">
<xsl:text>\trowd\cellx9000\pard\intbl\cbpat9</xsl:text>
<xsl:text>\ql\b </xsl:text><xsl:value-of select="OrderID"/><xsl:text>\b0\cell </xsl:text>
<xsl:text>\pard\intbl\row</xsl:text>
<xsl:apply-templates select="OrderDetails"/>
<xsl:text>\trowd\cellx7000\cellx9000\pard\intbl</xsl:text>
<xsl:text>\qr Subtotal:\cell </xsl:text>
<xsl:value-of select="format-number(user:GetOrderSubtotal(),'$###0.00')"/><xsl:text>\cell</xsl:text>
<xsl:text>\pard\intbl\row</xsl:text>
<xsl:text>\trowd\cellx7000\cellx9000\pard\intbl</xsl:text>
<xsl:text>\qr Freight:\cell </xsl:text>
<xsl:value-of select="format-number(Freight,'$###0.00')"/><xsl:text>\cell</xsl:text>
<xsl:text>\pard\intbl\row</xsl:text>
<xsl:text>\trowd\cellx7000\cellx9000\pard\intbl</xsl:text>
<xsl:text>\qr Total:\cell </xsl:text>
<xsl:value-of select="format-number(user:GetOrderTotal(Freight), '$###0.00')"/><xsl:text>\cell</xsl:text>
<xsl:text>\pard\intbl\row</xsl:text>
<xsl:text>\trowd\cellx9000\pard\intbl \cell\pard\intbl\row</xsl:text>
</xsl:template>
<xsl:template match="OrderDetails">
<xsl:text>\trowd\cellx5000\cellx7000\cellx9000\pard\intbl\ql </xsl:text>
<xsl:value-of select="ProductName"/><xsl:text>\cell </xsl:text>
<xsl:text>\qc </xsl:text><xsl:value-of select="Quantity"/><xsl:text>\cell </xsl:text>
<xsl:text>\qr </xsl:text>
<xsl:value-of select="format-number(ItemTotal,'$###0.00')"/><xsl:text>\cell</xsl:text>
<xsl:variable name="RunTotal" select="user:AddToOrderSubtotal(ItemTotal)"/>
<xsl:text>\pard\intbl\row</xsl:text>
</xsl:template>
</xsl:stylesheet>
Op deBuildmenu, klikt u opOplossing bouwen.
Start Internet Explorer en Ga naar
http://localhost/RTFDemo/Webform1.aspx.
Klik opContact gegevens weer gevenhet eerste XML-transformatie naar RTF in Word weer.
Klik opBack-upin Internet Explorer.
Klik opKlant Orders weer gevende tweede XML-transformatie naar RTF in Word weer.
RTF Tips voor probleemoplossing
Zoals geschreven, de voorbeeldcode hetEen gegevens set te transformeren naar RTFsectie, RICH stromen rechtstreeks naar de browser. U kunt ook opslaan de
RTF naar een bestand en omleiden naar het opgeslagen bestand. Om dit te doen, vervangen deze regels
de voorbeeld code
Dim writer As XmlTextWriter = New XmlTextWriter( _
Server.MapPath("Results.doc"), System.Text.Encoding.Default)
xslTran.Transform(xmlDoc, Nothing, writer)
writer.Close()
Response.Redirect("Results.doc")
De RTF naar een bestand op te slaan op deze manier kunt u eenvoudig controleren
de structuur van de RTF in het bestand met behulp van een teksteditor, zoals Klad blok.
De RTF naar een bestand op te slaan is een handige techniek voor probleemoplossing als het XSL
transformatie heeft niet de verwachte resultaten opleveren.
Bij het transformeren naar RTF, zich bewust zijn van de manier waarop u de presentatie
spatie en vervoer resulteert in je stylesheet omdat die kan invloed hebben op hoe
Uw RTF in Word geïnterpreteerd. Beide code voorbeelden in dit artikel gebruikt de<xsl:text></xsl:text>element omdat u gedwongen wordt alle witruimte informatie in het
behouden.
Gebruik<xsl:output method="text"></xsl:output>in je stylesheet om ervoor te zorgen dat uw XML wordt getransformeerd naar
tekst (plaats XML, de standaard uitvoer methode is). Als u geen
tekst opgeven, zoals de uitvoer methode XML verwerkings instructies kan worden toegevoegd aan
het bestand. Dit kan voorkomen dat Word correct interpeting de tekst
RTF.
Voor meer informatie over
server-side automatiseren van Microsoft Word en andere Office-toepassingen, klikt u op
het volgende artikelnummer om het artikel in de Microsoft Knowledge Base te bekijken:
INFO: Overwegingen bij de automatisering van Office op servers
Voor
Als u meer informatie over het gebruik van RTF in oplossingen, klikt u op het artikel
volgende nummers voor de artikelen in de Microsoft Knowledge Base:
PROCEDURE: Plakken RTF-opmaak reeks in Word met Visual Basic Auto mat ion
Voor meer informatie over het transformeren van XML met behulp van Visual
Basis.Net werk, klikt u op het volgende artikelnummer om het artikel weer te geven in de Microsoft
Knowledge Base:
Artikel ID: 311461 - Laatste beoordeling: maandag 28 februari 2011 - Wijziging: 2.0
De informatie in dit artikel is van toepassing op:
Microsoft Office Word 2007
Microsoft Visual Basic .NET 2002 Standard Edition
Microsoft ASP.NET 1.0
Microsoft Word 2002 Standard Edition
Microsoft Visual Basic .NET 2003 Standard Edition
Microsoft ASP.NET 1.1
Trefwoorden:
kbhowto kbmt KB311461 KbMtnl
Automatische vertaling
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:311461
Dank u! Uw feedback wordt gebruikt om ons te helpen onze inhoud voor ondersteuning te verbeteren. Bezoek de Startpagina voor Hulp en ondersteuning voor meer assistentieopties.