Bezpośredni wydruk na drukarkę z RESTa

0

Cześć

Mam dość prosty REST, który spina mi androida z programem do sprzedaży. Mam teraz za zadanie zrobić wydruk na drukarkę sieciową pewnego zestawienia z MSSQLa.
Jak najprościej wygenerować raport z prostego zapytania SQL i wrzucić na wybraną (nie domyślną) drukarkę bez żadnych okien, wyboru drukarki itp?

1

Nie mam pełnego przekonania, że cię rozumiem.

  1. swoisty agent napisany np w C++, zainstalowany jako obsługujący specyficzny URL (jak mailto: , gg: i podobne) - aplikacja webowa wystawia ten URL. Przynajmniej na pececie., nie wiem jak na andku.
  2. JavaScriptowy Dcument.print() ma spore możliwości, musiałbyś popróbować
0

Tak, wiem, że sam rest nic mi nie jest w stanie wydrukować. To tak jak teraz mam metodę, która uruchamia mój program do sprzedaży i tak w trochę pokręcony sposób robię wydruk na wskazaną w jsonie drukarkę. Pytałam bardziej o jakieś łatwiejsze rozwiązania w przypadku kiedy mam wysyłać z RESTa wynik zapytania SQL na określoną drukarkę w sieci.
Wywołuję jakąś metodę za pomocą REST, w tej metodzie mam treść zapytania, parametry przesyłam w jsonie, pobieram dane z bazy mssql (do tego miejsca już mam) i teraz jak to query ubrać najprościej w raport i wysłać na drukarkę. Oczywiście najlepiej bez komercyjnych reportbuilderów.

1

Ale chwila, może najpierw wyjaśnij/zdefiniuj pojęcia. konkretnie, to czym u Ciebie są:

  • mój program do sprzedaży: jak jest on odpalany: po stronie klienta? Na serwerze? Jest to apka desktopowa czy webowa?
  • wydruk na drukarkę sieciową pewnego zestawienia z MSSQLa: czy ten SQL jest na tym samym serwerze co aplikacja z poprzedniego punktu? Jak się to ma do Androida - czy te urządzenia są w ramach sieci lokalnej, czy masz to wystawione w świat?
  • wrzucić na wybraną (nie domyślną) drukarkę bez żadnych okien, wyboru drukarki: z poziomu czego chcesz drukować? Apka desktopowa? Serwer? Jaki serwer - Windows czy Linux? Masz tam cups i samba?
  • opisz jak masz zrobione zależności/powiązania pomiędzy poszczególnymi elementami: REST, apka, SQL, serwer WWW, PHP, Android. Co się z czym łączy, w jaki sposób, co jest serwerem a co klientem
  • Za do odpowiada w tym całym zamieszaniu PHP - czy tylko ogarnia REST'a czy coś jeszcze się tam dzieje?
0

OK - przepraszam jeżeli napisałam niezrozumiale.

  1. REST jest napisany w PHP i jest na serwerze Windowsowym (xamp). Serwer apache jest uruchomiony jako usługa
  2. Serwer MsSQL jest na tej samej maszynie do mój xamp, ale to chyba nie ma wielkiego znaczenia
  3. Za pomocą określonej metody w REST uruchamiam Subiekta GT (aplikacja desktopowa) przez jego API czyli Sferę. Tworzę kontrahentów, towary, dokumenty - drukuję je na wybrane drukarki.
  4. Androidy wykorzystują RESTa, między innymi żeby tworzyć dokumenty w Subiekcie za pomocą jago API. Wszystko się dzieje w sieci lokalnej
  5. Potrzebuję wywołać z androida (przez RESTa) żądanie wydruku pewnego zestawienia SQL na określona drukarkę w sieci (do której serwer Windowsowy ma dostęp)
0

Czy ten REST jest dostarczony przez subiekta, czy to park ktoś inny?

Odnośnie pkt.3 - czy dobrze rozumiem, że klienci się łączą z serwerem i subiekt uruchamia się na serwerze i tam wykonuje wybrane czynności?

Jak się ma API subiekta do tego RESTa?

2

A co ma być drukowane? Czy ten Json z danymi w postaci txt? Czy jakiś dokument pokoju pdf?
Można by próbować wywołać jakąś komendę do drukowania przez PHPowy shell_exec()
Jak to txt to sprawa wydaje się do ogarnięcia przy użyciu czegoś takiego

// tworysz jakiś plik tekstowy i zapisujesz
$printCommmand = 'print /x:\\printserver\sharedprinter c:\test.txt';
shell_exec($command);

Oczywiście musisz pozamieniać sobie na swoje ścieżki.
Z pdfami na pewno będzie gorzej.

0

To ma byc prosty raport, który np po wywołaniu zapytania SQL:
"SELECT tw_symbol Symbol, tw_Nazwa Nazwa FROM dbo.tw__Towar tt WHERE tw_idgrupa=1" (gdzie parametr grupy podam w jsonie przy wywołaniu metody reportu)
wydrukuje mi na drukarce w w magazynie (drukarka jest zainstalowana na serwerze) raport w takiej postaci:
screenshot-20220412200851.png

2

Najprościej (nie mówię, że najlepiej czy że poprawnie) to zmodyfikować serwer RESTowy i dodać do niego możliwość drukowania raportu. Raport sam z siebie się nie wydrukuje.
Na upartego można taki raport urzeźbić w notatniku (znaczy napisać zapytanie, które wypluje "gotowy" raport do pliku textowego z użyciem | i - lub _ dla ramek) i potem po prostu wydrukować plik TXT.

Jakby tego nie rozwiązać to będzie potrzebna zmiana istniejącego softu (np. wspomniany wcześniej serwer RESTowy) lub dodanie nowego, który będzie potrafił drukować "sprytniejsze" raporty a nie tylko prosty tekst.

Jeszcze tak mi przyszło do głowy - jak macie tam jakichś speców od excela to można na serwerze zainstalować albo MS Excela albo darmowego Calc (nieważne libre czy open office), podpiąć go pod bazę i w nim stworzyć taki raport.

0

Wklejony screen z excela sugeruje że chcesz drukować arkusz kalkulacyjny.
Jaki dokładnie chcesz drukować format pliku?
Ten serwer to jakaś maszyna z Windows na której jest Xampp i ten REST i do niego podłączona jest drukarka?
Pytam bo troszkę chaotycznie piszesz.
Generalnie z PHP można wywołać komendę w linii poleceń. Ale trzeba wiedzieć co drukujesz. Bo screen z Excela nic nie mówi.
Jak napisał @abrakadaber być może najprościej będzie zrobić tabelkę w txt. Być może masz na tym serwerze excela i można by próbować drukować taki plik excela z użyciem pwoershella. Być może ktoś i inny zaproponuje jeszcze inne rozwiązanie, bo ja np. nie rozumiem czemu nie chcesz np. pobrać danych na tego androida i nie wydrukować z tego telefonu tej tabelki.

0

@jurek1980:
Tak jak wcześniej napisałam to serwer z Windowsem na którym jest XAMP.
Format pliku jest mi obojętny - pytam o jak najprostsze rozwiązanie problemu . Excel jest tylko po to aby pokazać jak ma wyglądać raport. Rzeźbienie raportu w pliku txt jakoś mi się nie uśmiecha. JUż chyba wolałabym utworzyć plik html (łatwiej o ramki, formatowanie itp), ale czy można wydrukować taki plik html bezpośrednio na wskazaną (nie domyślną) drukarkę?

Dlaczego nie chcę wydrukowac z androida? Chciałabym aby był to uniwersalny mechanizm, bo za jakiś czas może się okazać, że część raportów będzie musiał być dostępna z poziomu aplikacji WEBowej a w zasadzie już jest chęć aby była dostępna też innej aplikacji desktopowej. Po co więc dla każdego z tych klientów robić osobny mechanizm skoro mogę wywołać jedną metodę na webserwisie i osiągnąć to samo?

3

Jest taki extension do PHP, php_printer.dll. Trzeba go pobrać, i włożyć do katalogu ext/, a co za tym idzie, spokojnie możesz to postawić na swoim lokalnym serwerze/komputerze. Z wrzuceniem tego na jakiś hosting będzie ciężej, ale to chyba i tak nie o to chodzi u Ciebie? :)

Można dzięki niemu wykryć drukarki, ustawić format oraz inne bajery.

0

@TomRiddle: korzystałeś z tego? Średnia dokumentacja jest tego wynalazku, albo gugiel nie podpowiada nic konkretnego. Z tego co czytałem też to wygląda na to, że to też może drukować tylko tekst.

@AnetaZ: no ale rozchodzi się o to, że to co ładne i może łatwe do stworzenia jest cięższe do wydrukowania. PHP nie jest językiem stworzonym do takich działań. Spróbuj najpierw wydrukować coś z CMD z serwera w podany sposób i zobacz czy zadziała. Potem można kombinować dalej i rozszerzać ewentualną funkcjonalność.

0

Dziękuję wszystkim za podpowiedzi. Znalazłam wg mnie prosty i skuteczny sposób na łatwe raportowanie.
https://docs.microsoft.com/en-us/previous-versions/ms252091(v=vs.140)

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