Z mojich osobných skúseností môžem povedať, že metóda DrawString nevykresľuje celkom dobre tieto biele znaky. Celkom dobre v nej funguje vbcrlf , ale to je tak maximum na čo sa dá spoľahnúť a to myslím pri akomkoľvek fonte a dokonca po formátovaní výsledných stringov. Medzery samozrejme fungujú, ale ak skúsite zobraziť 10 riadkov rôzneho textu pod sebou s rovnakým počtom medzier na začiatku, s výsledkom zarovnania nebudete spokojní. V princípe si musíte uvedomiť že formát textu v RichTextBoxe už z výsledným formátom strany nemá nič spoločné, snaď len samotný text, ktorý si metoda DrawString vyžaduje, takisto ako je aj font a výška písma a neviem čo ešte v jej rôznych formách preťaženia. Metóda DrawString, má zrejme pre účely presného zobrazenia geometrické parametre, najmä asi preto, že sa jedná o vektorovú grafiku a nie nejaký textový režim. Čiže ak máte dobré skúsenosti s vektorovou grafikou, na tlačiacu sa stránku kreslíte presne rovnakým spôsobom a rovnakými metódami z menného priestoru system.drawing. A teda nemôže byť problém riadok začínajúci tabulátorom zobraziť odsadený o x pixelov vpravo. V závislosti od zložitosti dokumentu to môže byť dosť babračka, keď berieme do úvahy rôzne editorské problémy so zarovnaním textu a podobne. Keďže ste presne nešpecifikovali požiadavky na riešenie, je tu ešte možnosť uložiť súbor z richtextboxu metódou SaveFile s príponou *.rtf a potom výsledný súbor otvoríte kľudne vo Worde či WordPade a vytlačíte bez akýchkoľvek problémov ktoré popisujete. Toto riešenie má hodnotu ešte z iného pohľadu, dáta sú prenositeľné a editovateľné, pokiaľ nezmeníte formát súboru aj naďalej zobraziteľné spätne vo Vašej aplikácii, alebo môžete konvertovať na doc. Zaujímavé už bude len to, či sa dá tento proces programovo vyvolať, aby ste zamedzili zbytočnej interakcii užívateľa, ak je to nutné. Zdar.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
dim rtf as string = ""
rtf = "{\rtf1\ansi\ansicpg1250\deff0\deflang1029{\fonttbl{\f0\froman\fprq2\fcharset238{\*\fname Times New Roman;}Times New Roman CE;}{\f1\fswiss\fprq2\fcharset238 Calibri;}}"
rtf &= "{\colortbl ;\red0\green0\blue0;}"
rtf &= "\viewkind4\uc1\pard\sa200\sl276\slmult1\lang1051\b\i\f0\fs36 Uk\'e1\'9eka ako by to mohlo vyzera\'9d ...\par"
rtf &= "\b0\i0\f1\fs22 Nejak\'e1 tabu\'beka\par"
rtf &= "\trowd\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 \clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx3099\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx6306\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx9514\pard\intbl\cell\cell\cell\row"
rtf &= "\intbl\cell\cell\cell\row"
rtf &= "\intbl\cell\cell\cell\row"
rtf &= "\pard\sa200\sl276\slmult1\par"
rtf &= "}"
REM RichTextFormat skripty podľa mňa nikto nepíše ručne
Clipboard.SetText(rtf, TextDataFormat.Rtf)
Me.RichTextBox1.Paste()
Me.RichTextBox1.SaveFile("d:\rtf.rtf")
Process.Start("write.exe", " /p d:\rtf.rtf")
MsgBox("H O T O V O")
End Sub
|