Zadymiarka w C# -- czyli co złego w tym DLS SDK

Programowanie w C# pod Visual Studio
ODPOWIEDZ
Awatar użytkownika
SunRiver
Administrator
Posty: 517
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Zadymiarka w C# -- czyli co złego w tym DLS SDK

Post autor: SunRiver » 06 gru 2018, 21:25

Czasy dziś są takie że bez etykieciarki w sumie niema życia :)
No może przesada, ale wielu ma bo wciąż tanieją i są dostępne
szczególnie popularnością się cieszą termiczne drukarki DYMO szczególnie modele 400 i 450

Obrazek

Nic w sumie dziwnego papier do nich a właściwie naklejki są już nie za drogie i pełno zamienników dostępnych
za dobre pieniądze ... i jako drukarka etykietek dla naszych zasobników na elementy czy też adresówek itd ..
jest całkiem całkiem dobrze :)

Oprogramowanie dostarczane z Dymną jest całkiem znośne i można nieźle podręczyć na różne sposoby różne
naklepki ... ba nawet możemy sobie podrukować na papierze termicznym nie przylepnym :)

Obrazek

Ale ... ci co mają się jarają ... jak się potem okaże ... może nie do końca jest czym ... niemniej ... :)

------------------------------------------------------------------------------------------------------------------------------------------------------------

Zajmijmy się drukarką i jej obsługą w C# w naszej aplikacji ....
Cały nasz mały problemik będzie podzielony na 2 części i w taki sposób zorganizujemy sobie całe środowisko....

1. Instalcja oprogramowania i DLSSDK
2. Nasza aplikacja w C#

Zatem jedziemy z koksem i załatwiamy część 1 :)

------------------------------------------------------------------------------------------------------------------------------------------------------------



[glow]Instalcja oprogramowania i DLSSDK [/glow]


Tu mała ważna informacja .... DYMO to firma co robi dobre drukarki etykiet zresztą sam używam Rhino PRO 5000 i bardzo ja sobie
cenię ale to nie małe biureczkowe cudeńko Label Writer 400 czy 450 -- jak ja ich nie znoszę :)
Dlaczego ... własnie z winy SDK, które jest pozbawione sensu i logiki , zaś częste aktualizacje oprogramowania do etykiet, powodują
więcej kłopotów niż poprawiają błedów .... owszem to dobrze dla użytkowników oprogramowania Dymo Label , ale nie dla nas ... ale
po kolei :)

Najpierw wiadomo musimy zainstalować oprogramowanie dymo label i sterowniki gdy mamy to załatwione sprawdzamy czy wszystko
ładnie działa ... i pobieramy DLS SDK ze strony DYmo oczywiście ... sam pakiet wydaje się być ok , zatem możemy sobie oglądnąć
dodane przykłady które w sumie, a sami zobaczycie ....

W chwili kiedy tworzyłem w C# obsługę dla DYMO LW 400/450 najnowsze oprogramowanie było w wersji 8.3.1332
i właśnie na nim się skupię tworząc naszą przykładową aplikację .... ta wersja jest do pobrania

TUTAJ

i teraz możemy zainstalować potrzebne nam SDK dla DYMO , te zaś musi pasować do naszego softu ...
i dlatego zgodna używana prze ze mnie wersja jest do pobrania

TUTAJ

ufff... nawet łatwo poszło :) zatem czas na ...

UWAGI

Od tego czasu możemy ładnie drukować Etykietki oraz zacząć oprogramowywać naszą aplikację do ich druku. Niestety
o ile samo SDK jest w porządku, a opis funkcji i klas jest przejrzysty o tyle całe to SDK jest jest mocno poronione i bardzo
kłopotliwa jest obsługa drukarki DYMO (choć się wydaje że jest ok i wielu będzie uważać że jakiś ze mnie Forest czy coś
że nie ogarniam) , a jednak ...

Problemy:

1. SDK wymusza na nas konieczność instalowania aplikacji Dymo Label v8 (niby logiczne jak masz drukarkę to oprogramowanie)
ale -- zależność jest taka że jak nie ma Dymo Label software nie ważne co napiszemy nie zadziała ...
2. Jak piszemy naszą apkę używając Dymo Label v8.3.1 to po aktualizacji oprogramowania nic już nie działa
więc jak chcemy mieć nowe DLS np 8.7.2.xxxx musimy aktualizować SDK i zmieniać obsługę drukarki w naszej aplikacji
oraz .... generować nową templatkę .... , albo nie aktualizować oprogramowania , bo inaczej zwariujemy przy updateach
naszej aplikacji ... a bywa tego nawet kilka na tydzień ...
3. Odwołanie do drukarki odbywa się po jej nazwie -- to też jest kłopotliwe gdyż zmiana portu USB do którego jest podpięta
drukarka może nam namieszać i to bardzo ... np: Mamy zainstalowaną drukarkę Dymo Label Writer 400 , po zmianie USB
będzie to już -- > Dymo Label Writer 400 (kopia1) i zonek ... :)

Teoretycznie SDK nakazuje nam po dodaniu referencji do libsów z SDK dołączenie bibliotek do naszego projektu co jest normalne
i jak najbardziej oczywiste i zrozumiałe ... jednakże w ogóle ich nie używa :) Przez co właśnie występuje problem z punktu 2.

Trochę tego się nazbierało no nie :) Ale z tym sobie też poradzimy wiec spokojnie ... nie mniej musiałem wam pokazać
co i jak jest pomylone ... , ale daje się ogarnąć i choć jest dziwnie czasem da się z tym żyć ... zatem przygotujmy się do pisania aplikacji
w C# ...

Uruchamiamy aplikację Dymo Label v8 i szykujemy sobie naklejkę , ale tak nieco inaczej :)

Obrazek

Niech to będzie np 25mm x 54mm czyli papier 11352 :) Na początku oczywiście będzie podobnie wszystko do tego
jakbyśmy robili zwykłą etykietkę :)

Więc dodajemy elementy :

1. Text statyczny czyli napis który będzie zawsze obecny na naszej etykietce

Obrazek

w naszym wypadku to napis Etykietka forum.sunduino.pl

2. Kod kreskowy i elementy graficzne i kształty

tu w sumie żadne halo no nie ?? Skupimy się jednak na kodzie kreskowym ...

Obrazek

Skupimy w zasadzie na jego właściwościach ale to za chwilę ... gdyż teraz dodamy pola inteligentne :)

3. Adres -- czyli inteligentne pole textowe :)

Obrazek

dodajemy sobie dwa takie obiekty , lub więcej jak nam potrzeba ... tu jednak dwa i dla porządku nazywamy je:

- polePierwsze
- poleDrugie

4. Ustalamy sobie taki układ jak nam pasuje w wyglądzie naklejki , dopasowujemy rozmiary czcionek , dodajemy pogrubienia
i teraz zajmiemy się właściwą sprawą czyli parametrami takiej naklepki ...

Wróćmy zatem do naszego kodu paskowego i przejdźmy do jego właściwości:

Obrazek

--- tu ustawiamy sobie nasz kod na kodowanie UCC/EAN 128 co jest chyba dość uniwersalne :)
--- wykonujemy połączenie kodu z obiektem ADRES_1 (czyli poleDrugie) dzięki czemu wszystko co
się pojawi w poluDrugim będzie zakodowane w kodzie kreskowym ...

Tu już zrobiliśmy wszystko kod kreskowy ustawiony możemy przejść do właściwości naszych inteligentnych pól tekstowych

Obrazek

tu ważna dla nas jest zakładka Zaawansowane gdzie zmieniamy nazwę referencyjną na

--> lblTekst0 - dla polaPierwszego
--> lblTekst1 - dla polaDrugiego

i w tym momencie to wszystko :) zapisujemy naszą etykietkę jako np etykietka1.label np na pulpicie gdyż ją właśnie musimy
dołączyć do naszego projektu aplikacji :) Zamykamy program do edycji etykiet...

Tym sposobem zapewniliśmy sobie odpowiednie elementy i pola w naszej etykietce oraz mamy jej układ graficzny dzięki czemu
na pewno będzie wyglądać elegancko. Zanim jednak pokarzę wam co dalej ... zerkniemy do naszej etykietki nap . Notepadem++
  1.  
  2. <?xml version="1.0" encoding="utf-8"?>
  3. <DieCutLabel Version="8.0" Units="twips">
  4.     <PaperOrientation>Landscape</PaperOrientation>
  5.     <Id>ReturnAddressInt</Id>
  6.     <PaperName>11352 Return Address Int</PaperName>
  7.     <DrawCommands>
  8.         <RoundRectangle X="0" Y="0" Width="1440" Height="3060" Rx="180" Ry="180" />
  9.     </DrawCommands>
  10.     <ObjectInfo>
  11.         <TextObject>
  12.             <Name>TEKST</Name>
  13.             <ForeColor Alpha="255" Red="0" Green="0" Blue="0" />
  14.             <BackColor Alpha="0" Red="255" Green="255" Blue="255" />
  15.             <LinkedObjectName></LinkedObjectName>
  16.             <Rotation>Rotation0</Rotation>
  17.             <IsMirrored>False</IsMirrored>
  18.             <IsVariable>False</IsVariable>
  19.             <HorizontalAlignment>Left</HorizontalAlignment>
  20.             <VerticalAlignment>Top</VerticalAlignment>
  21.             <TextFitMode>ShrinkToFit</TextFitMode>
  22.             <UseFullFontHeight>True</UseFullFontHeight>
  23.             <Verticalized>False</Verticalized>
  24.             <StyledText>
  25.                 <Element>
  26.                     <String>Etykietka forum.sunduino.pl </String>
  27.                     <Attributes>
  28.                         <Font Family="Arial" Size="12" Bold="True" Italic="False" Underline="False" Strikeout="False" />
  29.                         <ForeColor Alpha="255" Red="0" Green="0" Blue="0" />
  30.                     </Attributes>
  31.                 </Element>
  32.             </StyledText>
  33.         </TextObject>
  34.         <Bounds X="130" Y="150" Width="2846" Height="128.721952341239" />
  35.     </ObjectInfo>
  36.     <ObjectInfo>
  37.         <ShapeObject>
  38.             <Name>KSZTAŁT</Name>
  39.             <ForeColor Alpha="255" Red="0" Green="0" Blue="0" />
  40.             <BackColor Alpha="0" Red="255" Green="255" Blue="255" />
  41.             <LinkedObjectName></LinkedObjectName>
  42.             <Rotation>Rotation0</Rotation>
  43.             <IsMirrored>False</IsMirrored>
  44.             <IsVariable>False</IsVariable>
  45.             <ShapeType>HorizontalLine</ShapeType>
  46.             <LineWidth>45</LineWidth>
  47.             <LineAlignment>Center</LineAlignment>
  48.             <FillColor Alpha="0" Red="255" Green="255" Blue="255" />
  49.         </ShapeObject>
  50.         <Bounds X="130" Y="318.373218153082" Width="2846" Height="45" />
  51.     </ObjectInfo>
  52.     <ObjectInfo>
  53.         <ImageObject>
  54.             <Name>GRAFIKA</Name>
  55.             <ForeColor Alpha="255" Red="0" Green="0" Blue="0" />
  56.             <BackColor Alpha="0" Red="255" Green="255" Blue="255" />
  57.             <LinkedObjectName></LinkedObjectName>
  58.             <Rotation>Rotation0</Rotation>
  59.             <IsMirrored>False</IsMirrored>
  60.             <IsVariable>False</IsVariable>
  61.             <Image>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</Image>
  62.             <ScaleMode>Uniform</ScaleMode>
  63.             <BorderWidth>0</BorderWidth>
  64.             <BorderColor Alpha="255" Red="0" Green="0" Blue="0" />
  65.             <HorizontalAlignment>Center</HorizontalAlignment>
  66.             <VerticalAlignment>Center</VerticalAlignment>
  67.         </ImageObject>
  68.         <Bounds X="2444.42607058292" Y="947.942675722843" Width="457.535865820196" Height="323.827721992748" />
  69.     </ObjectInfo>
  70.     <ObjectInfo>
  71.         <AddressObject>
  72.             <Name>lblTekst0</Name>
  73.             <ForeColor Alpha="255" Red="0" Green="0" Blue="0" />
  74.             <BackColor Alpha="0" Red="255" Green="255" Blue="255" />
  75.             <LinkedObjectName></LinkedObjectName>
  76.             <Rotation>Rotation0</Rotation>
  77.             <IsMirrored>False</IsMirrored>
  78.             <IsVariable>True</IsVariable>
  79.             <HorizontalAlignment>Left</HorizontalAlignment>
  80.             <VerticalAlignment>Top</VerticalAlignment>
  81.             <TextFitMode>ShrinkToFit</TextFitMode>
  82.             <UseFullFontHeight>True</UseFullFontHeight>
  83.             <Verticalized>False</Verticalized>
  84.             <StyledText>
  85.                 <Element>
  86.                     <String>polePierwsze</String>
  87.                     <Attributes>
  88.                         <Font Family="Arial" Size="12" Bold="False" Italic="False" Underline="False" Strikeout="False" />
  89.                         <ForeColor Alpha="255" Red="0" Green="0" Blue="0" />
  90.                     </Attributes>
  91.                 </Element>
  92.             </StyledText>
  93.             <ShowBarcodeFor9DigitZipOnly>False</ShowBarcodeFor9DigitZipOnly>
  94.             <BarcodePosition>AboveAddress</BarcodePosition>
  95.             <LineFonts>
  96.                 <Font Family="Arial" Size="12" Bold="False" Italic="False" Underline="False" Strikeout="False" />
  97.             </LineFonts>
  98.         </AddressObject>
  99.         <Bounds X="130" Y="873.660373596483" Width="2846" Height="120" />
  100.     </ObjectInfo>
  101.     <ObjectInfo>
  102.         <AddressObject>
  103.             <Name>lblTekst1</Name>
  104.             <ForeColor Alpha="255" Red="0" Green="0" Blue="0" />
  105.             <BackColor Alpha="0" Red="255" Green="255" Blue="255" />
  106.             <LinkedObjectName></LinkedObjectName>
  107.             <Rotation>Rotation0</Rotation>
  108.             <IsMirrored>False</IsMirrored>
  109.             <IsVariable>True</IsVariable>
  110.             <HorizontalAlignment>Left</HorizontalAlignment>
  111.             <VerticalAlignment>Top</VerticalAlignment>
  112.             <TextFitMode>ShrinkToFit</TextFitMode>
  113.             <UseFullFontHeight>True</UseFullFontHeight>
  114.             <Verticalized>False</Verticalized>
  115.             <StyledText>
  116.                 <Element>
  117.                     <String>poleDrugie</String>
  118.                     <Attributes>
  119.                         <Font Family="Arial" Size="12" Bold="False" Italic="False" Underline="False" Strikeout="False" />
  120.                         <ForeColor Alpha="255" Red="0" Green="0" Blue="0" />
  121.                     </Attributes>
  122.                 </Element>
  123.             </StyledText>
  124.             <ShowBarcodeFor9DigitZipOnly>False</ShowBarcodeFor9DigitZipOnly>
  125.             <BarcodePosition>AboveAddress</BarcodePosition>
  126.             <LineFonts>
  127.                 <Font Family="Arial" Size="12" Bold="False" Italic="False" Underline="False" Strikeout="False" />
  128.             </LineFonts>
  129.         </AddressObject>
  130.         <Bounds X="130" Y="1015.15309362092" Width="2846" Height="120" />
  131.     </ObjectInfo>
  132.     <ObjectInfo>
  133.         <BarcodeObject>
  134.             <Name>KOD KRESKOWY</Name>
  135.             <ForeColor Alpha="255" Red="0" Green="0" Blue="0" />
  136.             <BackColor Alpha="0" Red="255" Green="255" Blue="255" />
  137.             <LinkedObjectName>ADRES_1</LinkedObjectName>
  138.             <Rotation>Rotation0</Rotation>
  139.             <IsMirrored>False</IsMirrored>
  140.             <IsVariable>True</IsVariable>
  141.             <Text>poleDrugie</Text>
  142.             <Type>CodabarLibR</Type>
  143.             <Size>Medium</Size>
  144.             <TextPosition>Bottom</TextPosition>
  145.             <TextFont Family="Arial" Size="8" Bold="False" Italic="False" Underline="False" Strikeout="False" />
  146.             <CheckSumFont Family="Arial" Size="8" Bold="False" Italic="False" Underline="False" Strikeout="False" />
  147.             <TextEmbedding>None</TextEmbedding>
  148.             <ECLevel>0</ECLevel>
  149.             <HorizontalAlignment>Center</HorizontalAlignment>
  150.             <QuietZonesPadding Left="0" Top="0" Right="0" Bottom="0" />
  151.         </BarcodeObject>
  152.         <Bounds X="130" Y="423.014407363234" Width="2846" Height="417.918638019471" />
  153.     </ObjectInfo>
  154. </DieCutLabel>
  155.  
Tak nasza templatka to plik xml ... i teraz nim właśnie będziemy się bawić w C# -- Gdyż ta nasza templatka to baza do naszej
etykietki -- ale o tym później ...
.... z każdym bitem serca ....
💫SunDUINO
💦Google+
💦Kanał Youtube
💦Sotton

Awatar użytkownika
SunRiver
Administrator
Posty: 517
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: Zadymiarka w C# -- czyli co złego w tym DLS SDK

Post autor: SunRiver » 06 gru 2018, 23:34

---- Dobrnęliśmy wreszcie do niemal końca drogi ... właściwie do punktu bez odwrotu
w sumie ... to albo będziecie zadowoleni , albo walniecie Zadymiarką o ścianę i posiądziecie
normalny ludzki zestaw narzędzi w postaci Citizena :P tak czy siak jednak skoro powiedzieliśmy A
warto powiedzieć i B wiec zróbmy tą aplykację .....


Część 2 --- > Poszarpana zadymiarka .....

Tu w zasadzie nic odkrywczego nie będzie na początku bowiem odpalamy nasze Visual Studio i tworzymy nowy projekt Windows Form
tak jak wszystkie inne i nic nowego nie ma tutaj ...

Obrazek

nazwiemy go sobie Etykieta ... a co .... w sumie nic specjalnego to nie będzie jedynie przypadek w którym
zademonstruję wam jak to działa i jak się tym bawić kiedy już mamy utrapienie w postaci Zadymiarki i chcemy by nasz
program z niej mógł korzystać ....

Tak więc nasza aplikacja musi potrafić 2 rzeczy ...

1.. umieszczać nasze napisy we własciwych miejscach templatki
2.. drukować tak przygotowaną tempaltkę na naklepce :P

wiec na naszej formie dodajemy 1 combo box , 2 pola tekstowe i jeden przycisk

Obrazek

o takie coś .... nam wystarczy :) i będzie działać następująco :

1. Wybierzemy drukarkę z ComboBOX'a
2. Wprowadzimy napis w polu1 i 2
3. Wydrukujemy etykietkę ....

Zatem dodać musimy teraz biblioteki do naszego projektu i dodać referencje by móc z nich skorzystać
w tym celu z folderu SDK kopiujemy do naszego projektu 3 pliki DLL

---> DYMO.Common.dll
---> DYMO.DLS.Runtime.dll
---> DYMO.Label.Framework.dll

Oraz przygotowaną wcześniej naklejkę czyli nasz plik etykieta1.label
Tak to ma wyglądać w folderze projektu :

Obrazek

a tak w projekcie w VS :

Obrazek

... się napisał ... każdy to wie i umie ... co nas tu będzie uczył od zera jak jakiś tam lamów ...

- pewnie macie rację każdy powinien wiedzieć jak utworzyć projekt i dodać referencje do projektu i biblioteki i inne obiekty
ale pozwólcie mi się nieco podroczyć z wami , bo taka lama jak ja musi zawsze wszystko od początku ... :)
może tak mi łatwiej pisać ... może czytają to ci co nie wiedzą , a może jak uważa większość z Was ... udaję śpeca i was traktuję z góry :P

Tak czy siak idziemy dalej i jak dotrwacie do końca ... to może napiszecie coś w komentarzach :) może wasza drukarka będzie was słuchać
a może ....

Mamy przygotowany nasz projekt z referencjami i templatką zacząć zatem czas pisanie ...
kod może nie będzie grzeszył genialnością , a wręcz będzie okropny łysy i niezbyt gekowy ale będzie działał :) mam nadzieję :P

Obrazek

zatem jedziemy ....

Dodajemy naszego zadymionego frametforka do kodu byśmy mogli używać go na upadłego i przyda się też obsługa plików wiec dopisujemy :P
  1.  
  2. using DYMO.Label.Framework;
  3. using System.IO;
  4.  
Teraz trzeba by jakoś znaleźć naszą drukarkę ... w sumie możemy zrobić to na 2 sposoby , mało eleganckie to po prostu
wpisanie we właściwościach naszego comboBox1 nazw drukarek tych popularnych :

-- DYMO Label Writer 400
-- DYMO Label Writer 450

Dokładnie tak jak to zrobi każdy szanujący się śpec ... przecież i tak się odwołujemy do drukarki po jej nazwie ..

Obrazek

i w zasadzie to wystarczy ... gdyż wybrać z 2ch modeli drukarek , i do funkcji drukującej wystarczy przekazać:
  1.  
  2.  etykietka.Print(comboBox1.Text);
  3.  
Dzięki czemu nazwa naszej drukarki trafi do dll'a , który wyśle tam co trzeba ....
Fajnie i ge.... tylko .. nie wiemy więcej nic , a każda zmiana połączenia USB czy inne windowsowe widzimisię
spowoduje sporo kłopotów i problemów ... Dlatego po lamersku napiszemy funkcję wykrywającą drukarki zainstalowane
w naszym systemie co jest w sumie banalnie proste :) a nasza funkcja wyglądać powinna tak:
  1.  
  2.  private void WyszukajDrukarki()
  3.         {
  4.             // Wyczyść wszystko najpierw  ....................
  5.             comboBox1.Items.Clear();
  6.  
  7.             foreach (IPrinter printer in Framework.GetPrinters())
  8.                 comboBox1.Items.Add(printer.Name);
  9.  
  10.             if (comboBox1.Items.Count > 0)
  11.                 comboBox1.SelectedIndex = 0;
  12.  
  13.             comboBox1.Enabled = comboBox1.Items.Count > 0;
  14.  
  15.         }
  16.  
Funkcja dzięki mechanizmom w dllach od DYMO jest prosta i przejrzysta , po prostu wyszukuje DYMO i dodaje je jako pozycje comboBoxa...
Tak mi się wydaje jest bardziej elegancko i fajniej napisane i przy okazji zawsze odwołamy się do właściwej Drukarki w naszym systemie
a nawet, (ha ha ha ... muszę się nieco po napawać moją tajemną wiedzą i pokazać jaki to jestem zajebisty w te klocki ) ...
pokusić się o dodanie możliwości wybrania Tacki dla Drukarek TWIN i TWIN TURBO
co teraz nam nie jest potrzebne :)

Dobrze umiemy już wykryć naszą drukarkę , możecie sprawdzić czy działa :) -- Nie działa .... Kermit spartolił a taki ten kod cudowny :P
-- dokładnie bo przecież nic nie wywołuje tej funkcji ... a jako że potrzebujemy wykryć drukarki na starcie wiec musimy tą funkcyjkę naszą
wywołać na starcie aplikacji -- w tym celu dopisujemy wywołanie w :
  1.  
  2. private void Form1_Load(object sender, EventArgs e)
  3.         {
  4.             WyszukajDrukarki();
  5.         }
  6.  
  7.  
I teraz ślicznie znajduje naszą drukarkę / lub drukarki .... (chyba że nie macie takiej to nie znajdzie ...)

Obrazek

Teraz pora przygotować naszą templatkę zatem do dzieła ....

Tu sprawa jest prosta ... całość bezczelnie chowamy pod przyciskiem drukuj , a co ... pójdziemy na łatwiznę i zamiast
jak prawdziwy geek edytować dłutem plik xml ... my go sobie wczytamy , a następnie podmienimy napisy i wyślemy do
drukarki , którą wykryliśmy ... a wszystko to całkowicie w locie bez ruszania i zmieniania naszego pliku etykietka1.label.

a wyglądać to będzie tak.... :
  1.  
  2.        private void button1_Click(object sender, EventArgs e)
  3.         {
  4.            
  5.                 // ładowanie pliku template dla etykiety
  6.                 var etykieta = DYMO.Label.Framework.Label.Open(@"etykietka1.label");
  7.  
  8.                 // podmienianie opisów na labelce
  9.                 etykieta.SetObjectText("lblTekst0", textBox1.Text);
  10.                 etykieta.SetObjectText("lblTekst1", textBox2.Text);
  11.                
  12.                 // drukowanie etykiety
  13.                 etykieta.Print(comboBox1.Text);
  14.         }
  15.  
  16.  
  17.  
ta daaaaa .... Nasza etykietka jest pięknie drukowana na DYMO LW 400 :)

Obrazek

Ja przynajmniej w to wierzę gdyż pisze softa na drukarkę której nie mam , jedynie offlineowa instancja :)
Ale na pewno działa .. może nie jestem śpecem i geekiem , ale kody działają :)

Teraz tak w skrócie co się tam stało ... ano jak widzicie moi drodzy :

var etykieta = DYMO.Label.Framework.Label.Open(@"etykietka1.label"); tu do zmiennej etykieta przypisuje zawartość
pliku etykietka1.label ...

etykieta.SetObjectText("lblTekst0", textBox1.Text); tu dokonuje się podmiana w locie
-- lbTekst0 pamiętacie to nasze polePierwsze Inteligentnego textu :) w miejsce tej nazwy referencyjnej podstawiam tekst
z textboxa ... i to wszystko :)

Ta prosta metoda umożliwia nam dopasowanie etykietki do np danych z bazy czy innych podobnych
i nasze aplikacje będą potrafiły drukować etykietki na Zadymiarce :)

Do kodu jeszcze możemy sobie dodać sprawdzanie czy etykietka1.label jest w folderze z naszym programem ,
bo może jej nie być :) Co jest równie proste i banalne a całość wygląda następująco :
  1.  
  2. private void button1_Click(object sender, EventArgs e)
  3.         {
  4.             if (File.Exists(@"etykietka1.label")) //  sprawdzenie czy plik template dla labelki istnieje w folderze...
  5.             {
  6.  
  7.                 // ładowanie pliku template dla etykiety
  8.                 var etykieta = DYMO.Label.Framework.Label.Open(@"etykietka1.label");
  9.  
  10.                 // podmienianie opisów na labelce
  11.                 etykieta.SetObjectText("lblTekst0", textBox1.Text);
  12.                 etykieta.SetObjectText("lblTekst1", textBox2.Text);
  13.                
  14.                 // drukowanie etykiety
  15.                 etykieta.Print(comboBox1.Text);
  16.  
  17.             }
  18.             else
  19.             {
  20.                 MessageBox.Show("Nie znaleziono pliku etykietka1.label dla DYMO!", "Ostrzeżenie !",
  21.                 MessageBoxButtons.OK, MessageBoxIcon.Warning);
  22.             }
  23.  
  24.  

a to dlatego że zapomniałem wspomnieć że właściwość pliku etykietka1.label musi być ustawiona w projekcie na COPY ALWAYS :) taka zemnie
lama programistyczna że zapominam o ważnych i podstawowych rzeczach ... ale dzięki temu jedynie słusznemu i wspaniałemu kodowi ,
już zawsze programy wasze drukować na dymo etykietki będą :P

Miłego Drukowania ...
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
.... z każdym bitem serca ....
💫SunDUINO
💦Google+
💦Kanał Youtube
💦Sotton

Awatar użytkownika
tungu
Użytkownik
Posty: 17
Rejestracja: 21 maja 2018, 17:44

Re: Zadymiarka w C# -- czyli co złego w tym DLS SDK

Post autor: tungu » 07 gru 2018, 0:46

Czwarty raz czytam aby ogarnąć i przerasta mnie to!

Awatar użytkownika
l3n1n
Moderator
Posty: 197
Rejestracja: 28 paź 2017, 8:46
Lokalizacja: 3M

Re: Zadymiarka w C# -- czyli co złego w tym DLS SDK

Post autor: l3n1n » 07 gru 2018, 7:04

Po przeczytaniu tekstu zacząłem się zastanawiać nad zakupem takiego Dymo. Do tej pory miałem tylko Rhino 5200
Obrazek
i byłem bardzo zadowolony, ale teraz zacząłem się zastanawiać nad opisanym przez Ciebie "złem". Mam w firmie wprawdzie Zebrę ZD620
Obrazek
ale nigdy jej nie używałem do etykiet elektroniki, wolałem paseczki z Rhino. Ale Twoje przygody z LabelWriter 450 są takie emocjonujące, że pomyślałem, iż warto je przeżyć :D.

Awatar użytkownika
SunRiver
Administrator
Posty: 517
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: Zadymiarka w C# -- czyli co złego w tym DLS SDK

Post autor: SunRiver » 07 gru 2018, 7:33

hehehe ... ja ze swojego Rhino 5000 pro też jestem zadowolony LW450 za to mnie wk... i zaliczył lot nad kukułczym gniazdem
a potem posiadłem citizena cl-s521 i to jest to ... zebra tez jest całkiem spoko :)
.... z każdym bitem serca ....
💫SunDUINO
💦Google+
💦Kanał Youtube
💦Sotton

ODPOWIEDZ