Verwenden Sie diese schrittweise Anleitung, um RTF von XML zu generieren, indem Sie Visual Basic .NET verwenden.
Rich Text Format ist ein textbasiertes Verschlüsselungsformat von formatiertem Text, Dokumentlayout und Grafiken. Es wird häufig für Microsoft Word verwandt. Mit Code kann es problemlos generiert werden, da RTF textbasieren ist. Wenn Sie XML-Daten enthalten, die Sie wie einem Catalog/list oder einem Seriendrucktypendokument in Word anzeigen sollen, kann für Sie dann das Umwandeln Ihrer XML-Daten in einem RTF-Stream eine ideale Lösung sein. Wenn Sie eine Lösung entwickeln wo Sie, um Dokumente auf einem Webserver zu generieren, wird tatsächlich über die Verwendung serverseitigen Automation of Word bevorzugt, die Dokumente dann zu erstellen, die ein textbasiertes Format wie HTML oder RTF verwenden.
Dieser Artikel enthält Beispielcode mit schrittweisen Anleitungen, um in RTF XML für Anzeige in Word umzuwandeln, indem dieser Artikel mehrere Methoden verwendet:
Speichern Sie das RTF in einer Datei und öffnen Sie es in dem Word.
Übertragen Sie auf Word das RTF, indem Sie die Windows-Zwischenablage verwenden.
Übertragen Sie das RTF in in Microsoft Internet Explorer von einer Asp.net-webanwendung gehosteten Word.
Die RTF-Spezifikation ist eine RTF-compatible-Textdateien generierende öffentliche Spezifikation. Als Hilfe bei dem Erstellen Ihrer eigenen RTF-Dateien können Sie die Dokumentation für die Spezifikation auf der folgenden Microsoft Developer Network ( MSDN )-Website als eine Ressource verwenden. Wird jedoch die Spezifikation geboten " wie- ist ", und für die Spezifikation wird keine Unterstützung von Microsoft Software Service geboten. Klicken Sie für den RTF Specifications auf die folgenden Verknüpfungen:
Aus beliebiger Quelle können Sie gültigen XML-Code dauern und auf RTF können es transformieren. Die folgende Vorgehensweise zeigt, ob Sie benutzerdefiniertes XML in RTF umwandeln können, wie in einer Datei gespeichert, ist oder die in der Zwischen-Ablage kopiert wird.
Erstellen Sie neue Windows-Anwendung in Visual Basic. Form1 wird für Sie erstellt.
Add two-Button-Steuerelemente zu Form1.
Klicken Sie in dem Menü Ansicht auf Code.
Fügen Sie folgende an dem oberen Rand des Codefensters vor der Implementierung von Form1 Class ein:
Fügen Sie der Implementierung von Form1 Class (vor End Class) den folgenden Code hinzu:
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
Fügen Sie Ihrem Projekt eine XML-Datei so hinzu:
Klicken Sie in dem Menü Projekt auf Neues Element.
Klicken Sie in der Liste der Vorlagen auf XML-Datei.
Geben Sie den Name ein Dictionary.xml Klicken Sie dann auf Öffnen.
Fügen Sie folgende auf den Inhalten von Dictionary.xml an:
<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>
Fügen Sie Ihrem Projekt eine XSLT-Datei hinzu:
Klicken Sie in dem Menü Projekt auf Neues Element.
Klicken Sie in der Liste der Vorlagen auf XSLT-Datei.
Geben Sie den Name ein Dictionary.xslt
Klicken Sie dann auf Öffnen.
Ersetzen Sie die Inhalte von Dictionary.xslt durch folgend:
Drücken Sie die Taste [F5], um das Programm erstellen und ausführen zu lassen.
Klicken Sie auf To File, um das transformierte XML in einer Datei (Dictionary.rtf) zu speichern. Um die Ergebnisse der Transformation zu überprüfen, können Sie die RTF-Datei in Word öffnen.
Klicken Sie auf To Clipboard, um das transformierte XML in der Windows-zwischen-Ablage zu kopieren. Um die Ergebnisse anzuzeigen, können Sie die Inhalte in Zwischen-Ablage anschließend in einem neuen oder vorhandenen Worddokument einfügen.
Visual Basic .NET kann Sie Transformationen auf Datasets problemlos zu Ihnen ausführen. Dieser Ablauf zeigt Ihnen, wie Sie zugehörige Daten aus dem Beispieldatenbank Nordwind dauern, und es auf RTF transformieren können. Zwei andere Transformationen ein einfaches RTF-Dokument in dem Kundenkontaktinformation und ein eher komplexeres RTF-Dokument aufgelistet sind, die Bestellinformation für Kunden in einem mail merge-type-Format anzeigt, werden veranschaulicht.
Starten Sie neue Visual Basic Asp.net-webanwendung, und speichern Sie es in dem http://localhost/RTFDemo.
WebForm1 wird für Sie erstellt.
Add two-Steuerelemente Button zu WebForm1.
Klicken Sie in dem Menü Ansicht auf Code.
Fügen Sie der Page Load Funktion den folgenden Code hinzu:
Fügen Sie der WebForm1 Klasse die folgende Funktion hinzu.
Hinweis: der folgende Code setzt voraus, dass SQL Server auf dem Localhost installiert ist. Ändern Sie das Datenquellenelement der Verbindungszeichenfolge entsprechend, wenn Sie ein anderen Computer verwenden müssen.
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
Fügen Sie die folgenden Codezeilen an dem Anfang von WebForm1.aspx.vb vor der WebForm1-Klassenimplementierung hinzu:
Klicken Sie in dem Menü Projekt auf Neues Element. Klicken Sie in der Liste der Vorlagen auf XSLT-Datei Name die Datei Contacts.xslt und klicken Sie dann auf Öffnen.
Ersetzen Sie die Inhalte von Contacts.xslt durch folgend:
Klicken Sie in dem Menü Projekt auf Neues Element. Klicken Sie in der Liste der Vorlagen auf XSLT-Datei Name die Datei CustOrders.xslt und klicken Sie dann auf Öffnen.
Ersetzen Sie die Inhalte von CustOrders.xslt durch folgend:
<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>
Klicken Sie in dem Menü Erstellen auf Projektmappe erstellen.
Starten Sie Internet Explorer, und wechseln Sie zu http://localhost/RTFDemo/Webform1.aspx.
Klicken Sie auf View Contact Information, um in Word die erste XML-Transformation auf RTF anzuzeigen.
Klicken Sie auf Zurück in Internet Explorer.
Klicken Sie auf View Customer Orders, um in Word die zweite XML-Transformation auf RTF anzuzeigen.
Der wie in dem Beispielcode schreiben
Umwandeln Sie in dem RTF ein DataSet
Abschnitt Stream RTF direkt an dem Browser. Sie können das RTF in einer Datei alternativ speichern und Sie können zu der gespeicherten Datei umleiten. Ersetzen Sie zu Zweck die Codezeilen in dem Beispiel
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")
Das Speichern des RTF in einer Datei auf dieser Weise ermöglicht Ihnen Editor wie Editor problemlos bei dem Überprüfen der Struktur von dem RTF in der Datei, indem Sie beliebigen Text verwenden. Wenn die XSL-Transformation die Ergebnisse nicht zurückgibt, die Sie erwarten, kann das Speichern des RTF in einer Datei eine hilfreiche Methode zu Problembehandlung sein.
Kennen Sie, wie Sie Leerzeichen darstellen, wenn Sie auf RTF transformieren, und Wagenrücklauf kehrt in Ihrem Stylesheet zurück, da sich das auswirken kann Word auf Ihr RTF wie interpretiert. Das <xsl:text> Element wird in beiden Codebeispielen in diesem Artikel verwandt, da es alle Leerraum-Information in es beibehalten zwingt.
Sie verwendet <B> < xsl:output-Methode "Texts" = > </B> in Ihrem Stylesheet, sicherzustellen, dass Ihr XML in Text ( lieber als XML, dessen Standardausgabenmethode verwandt wird) transformiert wird. Wenn Sie Text als die Ausgabenmethode nicht angeben, können XML-Verarbeitungsanweisungen an der Datei hinzugefügt werden. Das kann Word in RTF-Format korrekt von Interpeting dem Text verhindern.
Erhalten Sie Weitere Informationen über serverseitiges Automatisierung von Microsoft Word und andere Office-Anwendungen, wenn unten auf Artikelnummer klickt, um den Beitrag in dem Microsoft Knowledge Base anzuzeigen:
257757
(http://support.microsoft.com/kb/257757/EN-US/
)
INFO: Überlegungen für serverseitige Automatisierung von Office
Erhalten Sie Weitere Informationen zu der Verwendung von RTF in Ihren Lösungen, wenn unten auf Artikelnummer klickt, um die Beiträge in dem Microsoft Knowledge Base anzuzeigen:
270906
(http://support.microsoft.com/kb/270906/EN-US/
)
HOWTO: verwenden Sie ASP, um RTF (RTF) Dokument in Stream zu Microsoft Word zu generieren
258513
(http://support.microsoft.com/kb/258513/EN-US/
)
HOWTO: RichText zu dem Einfügen formatierte Zeichenfolge in Word mit Visual Basic - Automatisierungsclient
Erhalten Sie Weitere Informationen über das Transformieren von XML, indem Visual Basic .NET verwendet, wenn unten auf Artikelnummer klickt, um den Beitrag in dem Microsoft Knowledge Base anzuzeigen:
300934
(http://support.microsoft.com/kb/300934/EN-US/
)
Welcher VERFAHRENSWEISE: TO: Sie wenden XSL-Transformation in XML auf Streaming, indem Visual Basic .NET verwendet, an
300929
(http://support.microsoft.com/kb/300929/EN-US/
)
Welcher VERFAHRENSWEISE: TO: Sie wenden XSL-Transformation von einem XML-Dokument zu einem XML-Dokument an, indem Sie Visual Basic .NET verwenden
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 311461
(http://support.microsoft.com/kb/311461/en-us/
)
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.