Verwenden Sie dieses detaillierte Handbuch zum Generieren von RTF-Format (RTF) von Extensible Markup Language (XML) mithilfe von Visual Basic .NET.
RTF ist ein textbasiertes Format, das formatierten Text, Layout des Dokuments und Grafiken codiert. Es wird häufig mit Microsoft Word verwendet. Da RTF auf Text basiert, können Sie problemlos mit Code generiert werden. Wenn Sie XML-Daten, die Sie in Word als Katalog-Liste oder Typ von Seriendruckdokument anzeigen möchten haben, dann in eine RTF-Stream transformiert die XML-Daten eine ideale Lösung für Sie möglicherweise. Und in der Tat Wenn Sie eine Lösung entwickeln, generieren Sie Dokumente auf einem Webserver, generieren diese Dokumente mit einem textbasierten Format wie HTML oder RTF, bevorzugte über serverseitige Automatisierung von Word verwenden.
Dieser Artikel enthält Beispielcode mit schrittweise Anleitungen zum in RTF für die Anzeige in Word transformiert mithilfe mehrerer Ansätze:
Speichern Sie die RTF in eine Datei und öffnen Sie es in Word.
Die RTF auf Word übertragen, indem mithilfe des Windows-Zwischenablage.
Stream RTF zu Word, befindet sich in Microsoft Internet Explorer von einer ASP.NET-Webanwendung.
Die Spezifikation (RTF) ist eine öffentliche Spezifikation um RTF-kompatiblen Textdateien zu generieren. Die Dokumentation können für die Spezifikation als Ressource in der folgenden Website von Microsoft Developer Network (MSDN) zum Erstellen eigener RTF-Dateien. Die Spezifikation wird jedoch bereitgestellt "als-ist", und keine Unterstützung wird für die Spezifikation von Microsoft Technical Support bereitgestellt. Klicken Sie für die RTF-Spezifikationen auf die folgenden Verknüpfungen:
Können Sie gültiges XML aus einer beliebigen Quelle nutzen und in das RTF-Format zu transformieren. Das folgende Verfahren veranschaulicht, wie Sie benutzerdefiniertes XML in RTF in einer Datei gespeichert oder in die Zwischenablage kopiert umwandeln können.
Erstellen Sie eine neue Visual Basic .NET Windows-Anwendung . Form1 wird für Sie erstellt.
Fügen Sie zwei Button-Steuerelemente zu Form1 hinzu.
Klicken Sie im Menü Ansicht auf Code .
Fügen Sie die folgenden am Anfang des Codefensters vor der Implementierung der Klasse Form1:
Fügen Sie der Klasse Form1-Implementierung (vor der End Class ) 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
Eine XML-Datei dem Projekt hinzufügen:
Klicken Sie im Menü Projekt auf Neues Element hinzufügen .
Klicken Sie in der Liste der Vorlagen auf XML-Datei .
Geben Sie den Namen Dictionary.xml , und klicken Sie dann auf Öffnen .
Der Inhalt des Dictionary.xml die folgenden anhängen:
<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 eine XSLT-Datei zum Projekt hinzu:
Klicken Sie im Menü Projekt auf Neues Element hinzufügen .
Klicken Sie in der Liste der Vorlagen auf XSLT-Datei .
Geben Sie den Namen Dictionary.xslt , und klicken Sie dann auf Öffnen .
Ersetzen der Inhalt des Dictionary.xslt durch die folgenden:
Drücken Sie die Taste [F5], um das Programm erstellen und ausführen zu lassen.
Klicken Sie auf In Datei , um die transformierte XML in einer Datei (Dictionary.rtf) zu speichern. Sie können die RTF-Datei in Word, untersuchen die Ergebnisse der Transformation öffnen.
Klicken Sie auf Zwischenablage , um die transformierte XML auf der Windows-Zwischenablage zu kopieren. Sie können dann den Inhalt der Zwischenablage in einem neuen oder vorhandenen Word-Dokument die Ergebnisse einfügen.
Visual Basic .NET können Sie problemlos Transformationen auf Datasets dazu. Diese Prozedur zeigt Sie, wie Sie verwandte Daten aus der Northwind-Beispieldatenbank und in das RTF-Format transformieren können. Zwei verschiedene Transformationen werden veranschaulicht: ein einfaches RTF-Dokument, Listen Kunden, kontaktieren Informationen und eine etwas komplexere RTF-Dokument, zeigt Informationen für Kunden in einem Seriendruck-Typ-Format bestellen.
Starten Sie eine neue Visual Basic ASP.NET-Webanwendung und speichern Sie es auf http://localhost/RTFDemo .
WebForm1 wird für Sie erstellt.
Fügen Sie zwei Button -Steuerelemente hinzu WebForm1.
Klicken Sie im Menü Ansicht auf Code .
Fügen Sie folgenden Code an die Page_Load -Funktion:
Fügen Sie die folgende Funktion für die Klasse WebForm1 .
Hinweis : der folgende Code ausgegangen SQL Server auf dem lokalen Host installiert. Wenn Sie haben einen anderen Computer verwenden, ändern den Member Datenquelle der Verbindungszeichenfolge entsprechend.
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 am Anfang der WebForm1.aspx.vb, bevor Sie die Implementierung der WebForm1-Klasse:
Klicken Sie im Menü Projekt auf Neues Element hinzufügen . Klicken Sie aus der Liste der Vorlagen auf XSLT-Datei der Name der Datei Contacts.xslt , und klicken Sie dann auf Öffnen .
Ersetzen der Inhalt des Contacts.xslt durch die folgenden:
Klicken Sie im Menü Projekt auf Neues Element hinzufügen . Klicken Sie aus der Liste der Vorlagen auf XSLT-Datei der Name der Datei CustOrders.xslt , und klicken Sie dann auf Öffnen .
Ersetzen der Inhalt des CustOrders.xslt durch die folgenden:
<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 im Menü Erstellen auf Projektmappe erstellen .
Starten Sie Internet Explorer, und navigieren Sie zu http://localhost/RTFDemo/Webform1.aspx.
Klicken Sie auf Kontaktinformationen anzeigen , um die erste XML-Transformation in das RTF-Format in Word anzuzeigen.
Klicken Sie auf zurück in Internet Explorer.
Klicken Sie auf Ansicht Kundenbestellungen um die zweite XML-Transformation in das RTF-Format in Word anzuzeigen.
Als geschrieben Abschnitt der Beispielcode in die Transform a DataSet Into RTF, Streams RTF direkt an den Browser. Alternativ können Sie in einer Datei im RTF speichern und an die gespeicherte Datei umleiten. Ersetzen Sie dies tun, diese 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")
Speichern von RTF in eine Datei auf diese Weise können Sie problemlos untersuchen die Struktur von RTF in der Datei mit jedem Text-Editor, wie z. B. Editor. Speichern von RTF in eine Datei kann eine hilfreiche Problembehandlung Technik Wenn die XSL-Transformation erzeugt keine die erwarteten Ergebnisse.
Bei der Transformation in RTF berücksichtigen wie Sie Leerzeichen präsentieren und Wagenrücklaufzeichen in Ihrem Stylesheet da, wie Word Ihr RTF interpretiert auswirken können. Beide Codebeispiele in diesem Artikel verwenden die <xsl:text> Element da zwingt alle Leerraum Informationen darin aufbewahrt werden.
Verwenden Sie < xsl: output methode = "Text" > in Ihrem Stylesheet um sicherzustellen, dass Ihre XML-Text (anstatt XML (die Standardausgabemethode) transformiert wird. Wenn Sie Text nicht als Output-Methode angeben, können XML-Verarbeitungsanweisungen in der Datei hinzugefügt werden. Dadurch kann Word richtig Interpeting den Text als RTF verhindert.
Weitere Informationen zu serverseitigen Automatisierung von Microsoft Word und anderen Office-Anwendungen finden Sie im Artikel der Microsoft Knowledge Base:
257757
(http://support.microsoft.com/kb/257757/EN-US/
)
INFO: Was bei der serverseitigen Automatisierung von Office zu beachten ist
Weitere Informationen mithilfe von RTF in Ihren Lösungen finden Sie in der Microsoft Knowledge Base:
270906
(http://support.microsoft.com/kb/270906/EN-US/
)
Wie Verwenden von ASP zum Generieren eines RTF-Format (RTF) Dokuments in Stream zu Microsoft Word
258513
(http://support.microsoft.com/kb/258513/EN-US/
)
So wird 's gemacht: Einfügen RTF-formatierten Zeichenfolge in Word mit Visual Basic Automation
Weitere Informationen dazu, Transformieren von XML mithilfe von Visual Basic .NET folgendem Artikel der Microsoft Knowledge Base:
300934
(http://support.microsoft.com/kb/300934/EN-US/
)
Gewusst wie: Anwenden eine XSL-Transformation auf XML für Streaming mithilfe von Visual Basic .NET
300929
(http://support.microsoft.com/kb/300929/EN-US/
)
Gewusst wie: Anwenden eine XSL-Transformation aus einer XML-Dokument auf ein XML-Dokument mithilfe von Visual Basic .NET
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.
Bitte geben Sie Ihr Feedback zu diesem Artikel ab
Hat dieser Artikel bei der Lösung Ihres Problems geholfen?
Ja
Nein
Ich weiß nicht
Waren die Informationen für Ihr Problem relevant?
Ja
Nein
Wie könnte man den Artikelinhalt verbessern?
Hinweis: Leider können wir keine Kommentare persönlich beantworten.
Danke! Dieses Feedback hilft uns dabei, die Supportartikel weiter zu verbessern. Weitere Informationen finden Sie auf der Hilfe und Support-Startseite.