RichTextBox i druk na nietypowym papierze

0

Drodzy Forumowicze, potrzebuję pomocy z nietypowym drukiem.

Mam kontrolkę RichTextBox i w niej tekst (jakośtam sformatowany itd, ale to nie problem) w jednej bardzo długiej linii i dosyć dużym (175-225pt) fontem. Muszę to wydrukować na jednym pasku na nietypowej drukarce (wydruki mają 200-1000cm i 1-8cm szerokości). Problemem jest to, że nie wiem jak dobrać wielkość papieru, do tego co mam na RichTextBox. Z uwagi na to, że jest to jeden z kilku drukowanych elementów, muszę bardzo dokładnie określić jak długa będzie taśma na której drukuję.

I teraz tak:
Printing.PaperSize przyjmuje długość w 1/100 cala (nie wiem ile podać tej właśnie długości i o to się rozbija cały problem, jak oszacuję długość wydruku to problemu nie będzie)

Testowałem rozwiązania:
RichTextBox1.PreferredSize.Width - padaje jakąś ilość pixeli, ale nie jest to ilość jaka miałaby sens jako parametr dla PaperSize
g.MeasureString(RichTextBox1.Text, RichTextBox1.Font).Width - podaje niby długość w pixelach, ale też nie działa jako PaperSize
rozwiązanie oparte o MeasureCharacterRanges też coś podaje, ale to wciąż za mała wartość

Jeżeli próbuję podać któreś z rozwiązań jako parametr dla PaperSize, wydruk jest minimalnie za krótki - gdzieś w okolicach 3-4 metrów błąd wynosi kilkanaście milimetrów - nie zauwazyłem jednak jaka jest zależność, zwłaszcza, że sytuacji nie ułatwiają różne kroje fontów.

Przebiłem się przez różne rzeczy - na przykład marginesy, które robi mi złośliwie ta drukarka, pomimo ustawienia Margin(0,0,0,0), ale przeliczenie tego co wychodzi z podanych przeze mnie funkcji na długość taśmy wychodzącej z drukarki - jest dla mnie niepojęte. Może po prostu źle patrzę na problem.

Sytuacji nie ułatwia to, że w zasadzie jeżeli chodzi o projekty w VisualStudio jestem w zasadzie początkujący. Będę wdzięczny za każdą podpowiedź, zwłaszcza, że obawiam się, że problem jest dosyć nietypowy - nigdzie nie znalazłem podobnego problemu.

Projekt w zasadzie piszę w vb, ale to chyba nie za za bardzo znaczenia obecnie - podpowiedzi do C# będą dla mnie tak samo przydatne.

0

Problemem jest to, że nie wiem jak dobrać wielkość papieru, do tego co mam na RichTextBox.

No jak to jaką wielkość papieru. Taką, jaką użytkownik w opcjach drukowania ustawi - nie masz z kodu przecież fizycznego wpływu na papier załadowany w drukarce.

Papier jest więc taki jaki jest - i mając jego rozmiary jako dane, dopiero się zastanawiasz jak ten wielki napis podzielić na kartki.

na przykład marginesy, które robi mi złośliwie ta drukarka, pomimo ustawienia Margin
Drukarki często nie mają możliwości drukowania do samej krawędzi. Ograniczenie techniczne, by nie drukować w powietrzu rozpylając tusz.

0

Witam,

Może podaj co to za model drukarki, przy takich nietypowych rozwiązaniach przypuszczam że to może być coś obsługuje się w sposób natywny wysyłając komunikaty np do portu szeregowego

Pozdrawiam,

mr-owl

0

Definiuję "papier" jak chcę. Modeli do tego jest od metra, niestety program musi obsługiwac wszystkie dostepne modele. Testuję na TSC TPP-244 Pro, ale sterowniki nie są problemem. Chodzi jak burza pod USB.

Nie ładuje się do niej papieru tylko rolkę. Rolka ma 300m długości i do 10 cm szerokości. Ile wydrukuję, to moje - ona drukuje dokładnie tyle cali ile jej pozwolę, ustawiając właśnie "papersize". Drukarka przycina mi z mojego 'papersize' 0,38 cala na marginesy (bez znaczenia dla projektu). Użytkownik nie ma mieć dostępu do ustawień drukarki i z tego programu nigdy nie będzie miał. Wszystko musi być ustawione na sztywno i kierowane jest od razu na tą właściwą drukarkę z pominięciem innych urządzeń drukujących.

Ale: projekt ma działać tak, że osoba obsługująca wpisuje tekst i ustawia font, a potem wyskakuje jej informacja jak długi odcinek taśmy to zabierze. Oczywiście potem może go zwiększyć, ustawić/dodać marginesy itd. To bez znaczenia - jeżeli na podstawie wpisanego tekstu będę wiedział jak duży on będzie na wydruku. O ten jeden element - oszacowanie ile cali/cm ma dowolny napis dowolnym fonetem po wydrukowaniu.

Inaczej: jeżeli jej każę drukować napis przez 3 cale, to zrobi napis na trzy cale... tylko, że ja nie wiem jaka jest długość napisu wymyślonego przez uzykownika.

Jakoś się to musi dać zrobić - są programy, które to robią.

Dziękuję za zainteresowanie tematem.

0

Szkoda że nie napisałeś że chodzi o rolkę. Taki szczegół... ;-)

https://msdn.microsoft.com/en-us/library/6xe5hazb%28v=vs.110%29.aspx

0

Dziękuję za próbę pomocy, ale jak napisałem w pierwszym poście - próbowałem z tym co podałeś (tak na prawdę zacząłem od tej funkcji właśnie) i to nie załatwiło sprawy. Stanowczo za mała precyzja i do tego - to nie przeliczy mi na realną wielkość w wydruku. Wydawało mi się, że jak napisałem format wydruku (8cm x 10cm do 100cm) to będzie oczywiste, że rolka - mój błąd - przepraszam za nieporozumienie.

W tym momencie na stackoverflow podpowiedzieli mi jak rozwiązać problem i wstępnie działa (też nie jest idealnie z precyzją, ale wystarczająco).

Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1