Pustil jsem se do psaní kódu, který před samotným tiskem zjišťuje celkový počet stránek. Ke zjišťování, kolik řádků textu mohu umístit na stránku vycházím z výšky a šířky stránky, přičemž ke zjištění množství alokovaných řádků při nastavené šířce stránky využívám funkci MeasureString a její vlastnost Height. Narazil jsem ale na jeden problém. Řekněme, že mám textový řetězec "Tisková sestava". Vertikální rozměr textu zjistím následujícím způsobem:
Dim Y as integer = g.MeasureString("Tisková sestava", Dim Y As Integer = g.MeasureString("Tisková sestava", New Font("Arial", 12), PageWidth, New StringFormat(StringFormatFlags.LineLimit)).Height
Výsledek je 20. Potud vše v pořádku. Problém ale nastane, když naprosto shodný kód vložím do metody, která slouží k vykreslování textu na stránku - tedy do kódu pro obsluhu tisku. V tom případě obdržím jako výsledek hodnotu 21, což je rozdíl. Při větším množství textových řádků na stránce pak může být celkový rozdíl způsobený touto nepřesností již značný a může dojít k chybnému vyhodnocení požadovaného počtu stránek. Netušíte, kde by mohl být problém? Jak je možné, že stejná funkce se stejnými parametry vrací pokaždé jinou hodnotu? Je možné, že by toto způsobovalo nastavení nějaké vlastnosti třídy Graphic, kterou při tisku přejímám z parametru PrintEventArgs a ve funkci, kterou používám před samotným tiskem ke zjištění počtu stránek tuto třídu vytvářím následujícím způsobem:
Dim g As Graphics
Using b As New System.Drawing.Bitmap(1, 1)
g = System.Drawing.Graphics.FromImage(b)
End Using
Budu moc vděčný za jakékoliv nasměrování správný směrem. Díky moc.
|