Rozszerzenie przeglądarki operujące na DLL - drukowanie na drukarce fiskalnej

Rozszerzenie przeglądarki operujące na DLL - drukowanie na drukarce fiskalnej

Wątek przeniesiony 2022-03-15 13:04 z Inne języki programowania przez cerrato.

TR
  • Rejestracja:ponad 7 lat
  • Ostatnio:23 dni
  • Lokalizacja:700m n.p.m.
  • Postów:677
0

Po pierwsze sorry, ale nie wiedziałem do jakiego działu to wsadzić, więc piszę tutaj, jeżeli zły - proszę moderatora o przeniesienie.

Aktualnie mój klient ma sklep internetowy, gdzie z poziomu starej przeglądarki IE, przy pomocy kontrolki ActiveX drukuje sobie wygodnie paragony na drukarce fiskalnej.

Problem polega na tym, że IE coraz bardziej odstaje od standardów, oraz, od czerwca 2022 Microsoft planuje prawdopodobnie wyłączenie tej przeglądarki.

Klient musi mieć możliwość wygodnego drukowania paragonów z poziomu przeglądarki, najlepiej w Chrome, albo Firefox-ie

Czy jest w takim razie możliwość stworzenia własnego rozszerzenia do chrome lub firefoxa, tak, żeby komunikowało się z windowsową biblioteką DLL odpowiedzialną za drukowanie?

Jeżeli to możliwe to w jaki sposób to robić - gdzie o tym poczytać?

Ewentualnie jeszcze inaczej / lepiej:

Przeglądarka <- własny protokół wymiany danych -> aplikacja lokalna działająca na jakimś porcie <-> DLL drukujące na drukarce fiskalnej

Znam w miarę Java, gorzej z C/C++....


DRY > SOLID (nie bierz tego zbyt poważnie)
edytowany 2x, ostatnio: TomRZ
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 19 godzin
  • Lokalizacja:Poznań
  • Postów:8749
2

Zdecydowanie drugie rozwiązanie - czyli aplikacja zewnętrzna, komunikująca się jakimś AJAX'em czy czymkolwiek z przeglądarką.

Jak możesz to unikaj łączenia przeglądarki z urządzeniami po stronie klienta, bo to proszenie się o kłopoty. Drukarka - urządzenie lokalne, komunikacja z aplikacją desktopową/jakąś usługą działającą w tle. Przeglądarka siedzi sobie w swoim sandboksie i nie ma pojęcia, na czym jest odpalona, jedynie daje znać, że coś ma się wydrukować, ale szczegóły takiej akcji jej nie interesują.

Plusem zrobienia dodatkowej usługi pośredniczącej jest to, że możesz wtedy z kilku przeglądarek/komputerów korzystać z jednej drukarki. Po prostu - do jednego kompa podłączasz drukarkę, wystawiasz jakiegoś webservice'a i mogą z niego korzystać zarówno użytkownicy tej konkretnej maszyny, jak i np. komputer biurko obok.


TR
  • Rejestracja:ponad 7 lat
  • Ostatnio:23 dni
  • Lokalizacja:700m n.p.m.
  • Postów:677
0

Czyli mam:

  1. Zrobiony extension np. do Chrome
  2. Aplikacje zrobioną lokalnie na komputerze działającą np. na porcie 9888
  3. Osoba ma otwarty panel administracyjny sklepu, i robi to na komputerze na którym działa aplikacja z pkt 2). Zaznacza sobie np. 300 zamówień do wydruku, klika drukuj, rozszerzenie z pkt 1) zaczyna pompować na port 9888 dane, a aplikacja z pkt 2) te dane wysyła do DLL które drukuje na drukarce fiskalnej, po czym zwraca sukces z powrotem do pluginu z pkt 1). Idzie informacja zwrotna (przez JS) do panelu administracyjnego, że się wydrukowało, a system sklepu sobie oznacza zamówienia jako wydrukowane.

Ma to sens?

Można na tej maszynie z drukarką postawić też Webservice jak sugerujesz, i to dobry pomysł, ale na razie wystarczyłoby tak jak to opisałem wyżej.


DRY > SOLID (nie bierz tego zbyt poważnie)
S4
  • Rejestracja:około 3 lata
  • Ostatnio:około rok
  • Postów:1268
2
Zobacz pozostałe 2 komentarze
cerrato
@S4t: co za człowiek.. tak pogardzić 15pkt :P
S4
Punkty szczęścia nie dają :)
cerrato
Nie. Ale seks już tak. A mając dużo punktów na 4P łatwiej laski wyrywać :D
S4
W moim wieku to już mnie głowa boli :)
cerrato
@S4t: nie przesadzaj, jeszcze nawet do 60-tki nie dobiłeś.
S4
  • Rejestracja:około 3 lata
  • Ostatnio:około rok
  • Postów:1268
1

A po co ci to rozszerzenie do przeglądarki. Robisz (kupujesz) jakieś API w czymś, co jest w stanie obsłużyć tego DLLa. Wystawiasz end pointa, do którego strzelasz z frontu np z id zamówień, pozycjami itp itd i tam robisz pobranie danych z bazy i wysłanie do drukarki.

TR
  • Rejestracja:ponad 7 lat
  • Ostatnio:23 dni
  • Lokalizacja:700m n.p.m.
  • Postów:677
0

No dobrze ale jak "strzelać" do endpointa z poziomu javascript? Ja to muszę obsługiwać javascriptem. Teraz mam activex które obługuję sobie z javascripta,


DRY > SOLID (nie bierz tego zbyt poważnie)
S4
  • Rejestracja:około 3 lata
  • Ostatnio:około rok
  • Postów:1268
1
TomRZ napisał(a):

No dobrze ale jak "strzelać" do endpointa z poziomu javascript? Ja to muszę obsługiwać javascriptem. Teraz mam activex które obługuję sobie z javascripta,

Tak jak pisał szczurek. Najlepiej Ajaxe i niech już tam się dzieje na serwerze co ma się dziać.

TR
  • Rejestracja:ponad 7 lat
  • Ostatnio:23 dni
  • Lokalizacja:700m n.p.m.
  • Postów:677
0

Ja wiem, że AJAXem, ale JAK TECHNICZNIE? Na co ja wysyłam te dane?

Musiałbym z poziomu javascripta pisać coś na localhost do określonego portu - chyba tak?

Czyli piszę sobie aplikacje np. w Javie która komunikuje się z DLL i otwiera port, ten powiedzmy 9888 na localhoście.

Javascript kontaktuje się z http://127.0.0.1:9888/ i tak przebiega komunikacja?

Tyle, że wtedy ta aplikacja w Javie musiałaby obsługiwać protokół HTTP - to jest problem, chociaż już nie taki duży.


DRY > SOLID (nie bierz tego zbyt poważnie)
edytowany 1x, ostatnio: cerrato
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 19 godzin
  • Lokalizacja:Poznań
  • Postów:8749
2

Czyli mam: 1) Zrobiony extension np. do Chrome

Powtórzę - nie twórz i nie instaluj żadnych rozszerzeń do przeglądarki. Nie tędy droga. Poza tym - bez tego możesz się połączyć z usługą drukowania z dowolnego kompa w sieci, a nie tylko z tych, które mają to coś doinstalowane. Zwyczajna komunikacja typu REST/AJAX i mamy to ogarnięte. Zwłaszcza, że jeśli to ma działać tylko w ramach firmowego LAN to wiele kwestii związanych z zabezpieczeniami odpada.

Javie musiałaby obsługiwać protokół HTTP - to jest problem, chociaż już nie taki duży.

No tak, musiałaby. Aczkolwiek nie jest to jakaś przeszkoda nie do przeskoczenia. Sam Javy unikam, nie lubię, nie znam, nie używam, ale podejrzewam (w oparciu o to, co widze w innych językach) że jest pewnie jakaś gotowa biblioteka/rozwiązanie/moduł/komponent, które po prostu dodajesz do projektu, odpalasz i przy minimalnej konfiguracji używasz.

Ewentualnie, jakby ta komunikacja przez sieć była problemem, to możesz postawić lokalnie jakiś sewer WWW, JS z przeglądarki klienta niech do niego się łączy. A ten serwer WWW niech zapisuje zlecenia w bazie. Potem piszesz w tej swojej Java apkę/workera odpowiedzialnego za wydruki. Niech ta usługa co powiedzmy 5 sekund sprawdza, czy są nowe zlecenia druku w bazie. W ten sposób masz może trochę więcej pracy, ale jest to sensownie rozbite, do tego ładnie zapewnia wielodostęp i masz niezłe możliwości skalowania.


edytowany 1x, ostatnio: cerrato
S4
  • Rejestracja:około 3 lata
  • Ostatnio:około rok
  • Postów:1268
2
TomRZ napisał(a):

Ja wiem, że AJAXem, ale JAK TECHNICZNIE? Na co ja wysyłam te dane?

Musiałbym z poziomu javascripta pisać coś na localhost do określonego portu - chyba tak?

No jak wszystko będziesz miał na jednym komputerze to po lokal hoście. Ale ja bym się nie ograniczał i założył, że może zacząć używać tego ktoś z innego komputera i po prostu miał tam odpowiedni adres.

Czyli piszę sobie aplikacje np. w Javie która komunikuje się z DLL i otwiera port, ten powiedzmy 9888 na localhoście.

Tak,

Javascript kontaktuje się z http://127.0.0.1:9888/ i tak przebiega komunikacja?

Tak.

Tyle, że wtedy ta aplikacja w Javie musiałaby obsługiwać protokół HTTP - to jest problem, chociaż już nie taki duży.

No nie do końca musi obsługiwać HTTP ale będzie najłatwiej to tego z JS strzelić.

TR
  • Rejestracja:ponad 7 lat
  • Ostatnio:23 dni
  • Lokalizacja:700m n.p.m.
  • Postów:677
0

@cerrato - raczej w aplikacji Javy wykorzystam jakiś komponent żeby zrobić z niej mini-serwer www, żeby tych warstw nie było tak dużo. Plus oczywiście zabezpieczenie, że można się do tego dostać tylko z localhosta.

@S4t - żeby nie komplikować sprawy w samym JS-sie to zrobię jak napisałem wyżej - czyli komunikacja przez HTTP.

Zrobienie później z tego jakiegoś webserwisu, gdyby była taka potrzeba, to już będzie prosta sprawa. Jednak raczej będzie tylko jedno stanowisko do drukowania paragonów - mniejsza możliwośc pomyłki i wchodzenia sobie w drogę, bo to generalnei wykonuje się raz dziennie przed wysyłką zamówień hurtowo na wielu zamówieniach na raz.


DRY > SOLID (nie bierz tego zbyt poważnie)
edytowany 1x, ostatnio: cerrato
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)