2015-07-22 28 views
6

Ich versuche einen einfachen Text im RTF-Format zu konvertieren. Daher verwende ich RichTextBox (WinForms).
Die betroffene Methode das RTF-Markup als String.Rich Text Format Zeilenabstand

Jetzt möchte ich Zeilenabstand in das Markup einfügen. Ich fand, dass es 2 Parameter:

- \slX (Space between lines in twips) 
- \slmultX (either 0 or 1) 

Wenn I \slmult0 gesetzt ist, wird der Zeilenabstand oben die Textzeile.
Wenn ich \slmult1 setze, ist der Zeilenabstand unter die Textzeile.

I berechnen, um den Abstand in der folgenden Art und Weise:

(lineSpacing + fontSize)*20 

Wenn ich von \slmult0 zu \slmult1 schaltete, I bestimmt, daß der Linienabstand ist etwas kleiner als bei \slmult0.

Kennt jemand den Grund für dieses Verhalten? Muss ich mit einer anderen Formel rechnen?

+1

Es könnte einfacher sein, etwas zu durchlaufen wie docx als Zwischendarstellung hier als Werkzeug ist besser. –

+0

_Ich habe festgestellt, dass der Zeilenabstand etwas kleiner ist _ Wie hast du das gemacht? – TaW

+0

Sie können es zum Beispiel in Wordpad sehen: Erstellen Sie eine neue RTF-Datei Wechselabstand zu "2". Dann speichere + schließe die Datei -> kopiere sie -> ändere in der Kopie \ slmult0 auf 1 und vergleiche beide Dateien in Wordpad. – Chris2011931

Antwort

2

Wenn ich \ slmult0 setze, ist der Zeilenabstand oberhalb der Textzeile. Wenn ich \ slmult1 einstelle, liegt der Zeilenabstand unter der Textzeile.

Das ist nicht was ich in der specs gelesen habe.

So wie ich es verstehen, bedeutet es, dass \slmult0 sagt, dass der Wert von \slN in irgendeiner Einheit direkt als Abstand verwendet werden soll, während \slmult1 die N in \slN sagt als Faktor gemeint von denen Der regelmäßige Zeilenabstand wird multipliziert.

Siehe den letzten Beitrag here für (einige) mehr Details! (Aber es gibt auch eine Notiz es zu spät Effekt eine Zeile unter ..)

Beachten Sie auch tun, um die Bedeutung des Zeichens von N im \slN! (Dies war der Grund meines Kommentars oben: Die Wirkung von, sagt \sl234, von der Größe der höchsten Zeichen in der Zeile abhängen ..)

Here ist eine nette Diskussion einiger RTF Dinge; eine Notiz über Einheiten:

Messungen in RTF sind in der Regel in Twips. Ein Twip ist ein Zwanzigstel eines Punktes, d. H. Ein 1440. eines Zolls.Das führt zu einigen großen Zahlen manchmal (wie \ li2160, den linken Einzug zu einem Zoll zu setzen und eine Hälfte)

und eine klaren Definition von zusätzlichem Abstand vor und nach den Absätzen:

\ SBN - N twips extra (vertikal) Raum vor diesem Absatz (Standard: 0)
\ saN - N twips extra (vertikal) Raum nach diesem Absatz (Standard: 0)

Here sind mehr direkte Anweisungen:

Um Doppelraum einen Absatz, setzen Sie den Code \ sl480 \ slmult1 rechts nach die \ pard. Um es zu verdreifachen, benutze \ sl720 \ slmult1. Um nur 1,5-Abstände zu verwenden, verwenden Sie \ sl360 \ slmult1. Ein einzelner Absatz ist der Standardwert und benötigt keinen bestimmten Code. (Die magischen Zahlen 480, 720 und 360 ist nicht abhängig von der Punktgröße des Textes im Absatz.)

+0

Hallo TaW, danke für die prompte Anser. Ich denke, ich muss meine Frage klären. Ich brauche das Verhalten von \ slmult0 (Abstand), aber der Abstand sollte unterhalb der Textzeile liegen. Außerdem eine Frage zum Beitrag im Link. Was ist der einzelne Zeilenabstand in pt/twips ("\ slN bedeutet, dass der Zeilenabstand N/240 * (einzeiliger Zeilenabstand) ist") – Chris2011931

+0

Ich habe ein paar weitere Links und Zitate hinzugefügt, um sie zu studieren. Ich würde immer erwarten, dass sich der Abstand nur auf den einen Absatz auswirkt, für den Sie ihn festlegen, also den Abstand zwischen allen Zeilen. Hast du es vor oder (wie empfohlen direkt nach dem \ pard oder (wenn du den Absatz nicht nach \ par zurückgesetzt hast) gesetzt? – TaW