String mit Font-Eigenschaften an eine txt-Datei übergeben

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von Kouki.

    String mit Font-Eigenschaften an eine txt-Datei übergeben

    hi leute,



    ich habe eine txt-datei erstellt und füge in diese mit dem filestreamwriter.writeline() strings ein.

    es wäre der optik halber recht gut, wenn die font-eigenschaften des strings geändert an die txt-datei übergeben werden könnten, so das der text am ende in einer anderen schriftart, größe und fett oder kursiv dargestellt wird.

    der windows-texteditor unterstützt diese funktion, aber wie kann ich das per code lösen?



    lg arcus

    arcus schrieb:

    hi leute,
    ich habe eine txt-datei erstellt und füge in diese mit dem filestreamwriter.writeline() strings ein.
    es wäre der optik halber recht gut, wenn die font-eigenschaften des strings geändert an die txt-datei übergeben werden könnten, so das der text am ende in einer anderen schriftart, größe und fett oder kursiv dargestellt wird.
    der windows-texteditor unterstützt diese funktion, aber wie kann ich das per code lösen?
    lg arcus

    In Textdateien werden immer "reiner" Text gespeichert, d.h. ohne irgendwelche Formatierung.
    Wenn Du einen formatierten Text speichern willst, musst Du anderes Format wie z.B. Richtext nehmen.
    Am besten setzt du dich mit dem RichText-Format auseinander: Wikipedia
    Dann generierst du einfach anhand deiner Kenntnisse einen String, der RTF-Formatierungen enthält, und schreibst ihn in eine RTF-Datei.

    Oder die Methode für Faule: In RichTextBox Kopieren, Font festlegen und mit SaveFile() speichern.

    Und violá: Du hast eine RTF-Datei :D
    laso, habe mir den wiki-artikel durchgelesen. da stand mehr oder weniger dass, was ich bereits wusste. habe das programm nun soweit, dass es die rtf-datei erstellt und mit den textzeilen gefüllt öffnet. aber für die font-formatierung festlegen habe ich noch keinen befehl gefunden. habe zum erstellen und schreiben der rtf-datei folgenden code verwendet:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    3. TextBox7.Text = Label4.Text
    4. lz = Math.Round((80 - TextBox7.TextLength) / 2, 0)
    5. path = "C:\Dokumente und Einstellungen\All Users\Desktop\Druckbericht.rtf"
    6. Dim File As System.IO.FileStream
    7. File = System.IO.File.Create(path)
    8. File.Close()
    9. Dim objStreamWriter As StreamWriter
    10. objStreamWriter = New StreamWriter(path)
    11. objStreamWriter.WriteLine(Space(lz) & Label4.Text)
    12. objStreamWriter.WriteLine("")objStreamWriter.WriteLine("")
    13. objStreamWriter.WriteLine("Berechnungsparameter")
    14. objStreamWriter.WriteLine("--------------------------------------------------------------------------------")
    15. objStreamWriter.WriteLine("Medientemperatur= " & TextBox3.Text & " C")
    16. objStreamWriter.WriteLine("Lufttemperatur= " & TextBox1.Text & " C")
    17. objStreamWriter.WriteLine("rel. Luftfeuchte= " & TextBox2.Text & " %")
    18. objStreamWriter.WriteLine("Windgeschwindigkeit= " & TextBox4.Text & " m/s")
    19. objStreamWriter.WriteLine("Auftsellungsbereich= " & TextBox5.Text)
    20. objStreamWriter.WriteLine("Blechmantel= Alu- bzw. VA-Blech")
    21. objStreamWriter.WriteLine("")objStreamWriter.WriteLine("")
    22. objStreamWriter.WriteLine("Berechnungsergebnisse")
    23. objStreamWriter.WriteLine("--------------------------------------------------------------------------------")
    24. objStreamWriter.WriteLine("Wrmeleitfhigkeit= " & Math.Round(lambda, 4) & " W/(mK)")
    25. objStreamWriter.WriteLine("--------------------------------------------------------------------------------")
    26. objStreamWriter.Close()
    27. Call OpenDocument(path)
    28. If OpenDocument(path) = False Then
    29. MsgBox("Die Berichtdatei konnte nicht geffnet werden!", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "Fehler")
    30. End If
    31. End Sub
    32. Public Function OpenDocument(ByVal path As String) As Boolean
    33. Try
    34. Dim pinfo As New Diagnostics.ProcessStartInfo
    35. With pinfo
    36. .FileName = path
    37. .Verb = "open"
    38. End With
    39. Process.Start(pinfo)
    40. Return True
    41. Catch ex As Exception
    42. Return False
    43. End Try
    44. End Function

    nun die frage, wie kann ich per oben stehendem code die font-formatierung festlegen?
    @Hastling: Er weiß nicht, wie er angeben soll, wie der Text formatiert wird.

    @arcus: Du musst die Formatierungen in Tags angeben. In den Header kommt die RTF-Definierung:

    Quellcode

    1. {\rtf1\ansi\ansicpg1252\deff0\deflang1031\uc1

    Und so. Dann legst du verschiedene Fonts fest:

    Quellcode

    1. {\f0\fnil\fcharset0 sans-serif;}

    Und den Text in einem speziellen Tag:

    Quellcode

    1. \uc1\pard\cf1\f0\fs24 Dein Text, den du einfuegen willst.

    Und das Endzeichen:

    Quellcode

    1. }

    Das ist eine RTF-Datei. Es ist also eig. eine unformatierte TXT-Datei, die aber so formuliert ist, dass ein Programm wie WordPad, Word oder WritePad (:P) es als formatierten Text übersetzt. Strings können nämlich an sich keine Formatierungen enthalten.

    Anscheinend hattest du es NICHT gewusst. Unwissen ist nicht schlimm, aber zu behaupten, etwas zu wissen, was man garnicht weiß, ist nicht so toll :P
    @kouki: das was du im code beschrieben hast, war der teil des wiki-beitrages den ich noch nicht wusste.

    habe jetzt den code mal in folgender form eingegeben:

    VB.NET-Quellcode

    1. objStreamWriter.WriteLine("{\rtf1\ansi\ansicpg1252\deff0\deflang1031\uc1")
    2. objStreamWriter.WriteLine("{\f0\fnil\fcharset0 arial;")
    3. objStreamWriter.WriteLine("\uc1\pard\cf1\f0\fs24" & Space(lz) & Label4.Text)
    4. objStreamWriter.WriteLine("}")

    beim debuggen öffnet sich dann word und gibt eine fehlermeldung, dass der dokumentname oder pfad ungültig sei.
    wo liegt der fehler?
    GERADE den solltest du dir anschauen ;)

    In Zeile 2 fehlt am End das "}"
    In Zeile 3 muss hinter "fs24" noch ein Leerzeichen.

    Sonst sehe ich keine Fehler, aber versuch mal, dich selber mit RTF zu beschäftigen, denn dieses Format zu beherrschen geht nicht von heute auf morgen.

    Edit:// Dokumentname oder Pfad? Dann zeig mal bitte deinen FileStream und deinen StreamWriter.
    habe die fehler korrigiert und das ergbis sieht so aus:

    arial; Dämmdickenberechnung zur Tauwasserverhinderung mit PUR-Ortschaum



    die space-funktion fügt 8 leerzeichen ein und der rest ist label4.text.

    die deklaration von filestream und stremwriter stehen in dem code im beitrag nr.8
    also das endzeichen "}" in der zweiten zeile ist nachwievor vorhanden und die schriftart arial steht weiter in der datei. mit den umlautumschreibungen muss ich mir noch was einfallen lassen, weil ich den string direkt von der text-eigenschaft des label-elementes auslese.

    nun nochdie frage: wo ist die schriftgröße und der anzeigemodus fett einzusetzen und hast du vielleicht eine emfehlung oder einen link für ein brauchbares handbuch zu rtf?
    Zum 1.: Ich glaube, in Zeile 3 musst du noch vorne "{" und hinten "}" machen.

    Zum 2.: Nein, aber sieh dir den Code im Wiki-Beitrag an und öffne RTF-Dateien im Editor und guck dir dort dessen Code an und versuch so zu verstehen, wie es funktioniert. Ansonsten hilft Google.
    auch mit den klammern in zeile 3 ändert sich das ergebnis nicht.

    die idee mit den rtf's im editor öffnen ist zwar gut, aber hat den hacken, wenn man mit den einzelnen tags vom inhalt her von anfang an nichts anfangen kann, erschliesst sich einem auch der zusammenhang nicht wirklich. drum war die frage ob es (am besten auf deutsch) ein handbuch oder ne spezifikation zu diesem format gibt.

    hab das mal probiert mit dem satz "Dämmdickenberechnung zur Tauwasserverhinderung mit PUR-Ortschaum" zentriert, times new rowman gr. 14 und fett im word geschrieben.

    im editor kam folgendes raus:

    Quellcode

    1. {\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1031\deflangfe1031{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f213\froman\fcharset238\fprq2 Times New Roman CE;}
    2. {\f214\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f216\froman\fcharset161\fprq2 Times New Roman Greek;}{\f217\froman\fcharset162\fprq2 Times New Roman Tur;}{\f218\froman\fcharset177\fprq2 Times New Roman (Hebrew);}
    3. {\f219\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f220\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f221\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;
    4. \red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;
    5. \red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1031\langfe1033\cgrid\langnp1031\langfenp1033 \snext0 Normal;}{\*\cs10 \additive \ssemihidden
    6. Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
    7. \ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}}{\*\rsidtbl \rsid2521\rsid218965\rsid678649\rsid1132862\rsid1791987
    8. \rsid2301573\rsid2442976\rsid2511858\rsid2825929\rsid5201880\rsid6445671\rsid8072918\rsid8268973\rsid8986639\rsid9781123\rsid11022089\rsid11545247\rsid11683674\rsid12405114\rsid12460910\rsid12473825\rsid12731789\rsid13644596\rsid13846536\rsid16212006
    9. \rsid16349772\rsid16390879}{\*\generator Microsoft Word 10.0.6856;}{\info{\title D\'e4mmdickenberechnung zur Tauwasserverhinderung mit PUR-Ortschaum}{\author Michel Berdyn}{\operator Michel Berdyn}{\creatim\yr2010\mo6\dy30\hr22\min11}
    10. {\revtim\yr2010\mo6\dy30\hr22\min13}{\version1}{\edmins0}{\nofpages1}{\nofwords12}{\nofchars77}{\nofcharsws88}{\vern16393}{\*\password 00000000}}{\*\xmlnstbl }\paperw11906\paperh16838\margl1417\margr1417\margt1417\margb1134\gutter0
    11. \deftab708\widowctrl\ftnbj\aenddoc\hyphhotz425\grfdocevents0\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1417\dgvorigin1417\dghshow1\dgvshow1
    12. \jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\ApplyBrkRules\wrppunct\asianbrkrule\rsidroot12460910
    13. \fet0{\*\wgrffmtfilter 013f}\sectd \linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}
    14. {\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}
    15. {\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain
    16. \qc \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid218965 \fs24\lang1031\langfe1033\cgrid\langnp1031\langfenp1033 {\b\fs28\insrsid218965\charrsid218965 D\'e4
    17. mmdickenberechnung zur Tauwasserverhinderung mit PUR-Ortschaum}{\b\fs28\insrsid11545247

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „arcus“ ()