Bezpośredni wydruk na drukarkę z RESTa

Bezpośredni wydruk na drukarkę z RESTa
AZ
  • Rejestracja:około 3 lata
  • Ostatnio:9 miesięcy
  • Postów:15
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?

ZD
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
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ć

If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
ZD
Oczywiście bezpośredni druk REST jest niemożliwy, REST wystawia serwer, a to musi skonsumować "jakiś" klient, jaki by nie był, dla człowieka (przeglądarka) czy "elektroniczny"
woolfik
Nie wiem jak z rest ale np drukarki HP mogą mieć ten temacik załatwiony tym: https://www.hpsmart.com/pl/pl/cms/HPC/ePrint mam w domu i działa rewelacyjnie choć jest lekkie opóźnienie ;)
ZD
Że drukarki HP "drukują przez internet" ale to nie ma nic wspołnego jak to kolega zamotał.
AZ
  • Rejestracja:około 3 lata
  • Ostatnio:9 miesięcy
  • Postów:15
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.

cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Poznań
  • Postów:8760
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?

AZ
  • Rejestracja:około 3 lata
  • Ostatnio:9 miesięcy
  • Postów:15
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)
edytowany 1x, ostatnio: AnetaZ
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Poznań
  • Postów:8760
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?


cerrato
Tak przy okazji - @AdamWox i @jurek1980 moga mieć coś sensownego do dodania w temacie :)
AdamWox
Nie znam subiekta, ja jestem od Comarch Optima ✌️
AZ
REST nie ma nic wspólnego z Subiektem. Jest własnej roboty i powstał tylko po to aby z aplikacji na tablet/kolektor danych współpracować z Subiektem. Ta współpraca jest w porządku i nic tu nie należy zmieniać. Mnie chodzi tylko o dodatkowy raport wygenerowany przez webserwer.i wydrukowany na wskazanej drukarce w sieci.
jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:11 minut
  • Postów:3460
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

Kopiuj
// 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.

edytowany 1x, ostatnio: jurek1980
ZD
"A co ma być drukowane? " Myślę, że to tzreba zapić, zapomnieć, wytrzeźwieć, i założyć projekt od nowa
jurek1980
@ZrobieDobrze: być może masz i rację, ale ciężko coś powiedzieć jak nie znamy w pełni wymagań.
AZ
  • Rejestracja:około 3 lata
  • Ostatnio:9 miesięcy
  • Postów:15
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

ZD
"drukarka jest zainstalowana na serwerze" i trzeba było dawkowac informację małą łyzeczką ?
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
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.


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
edytowany 1x, ostatnio: abrakadaber
jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:11 minut
  • Postów:3460
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.

AZ
  • Rejestracja:około 3 lata
  • Ostatnio:9 miesięcy
  • Postów:15
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?

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Laska, z Polski
  • Postów:10056
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.

jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:11 minut
  • Postów:3460
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ść.

edytowany 1x, ostatnio: jurek1980
Riddle
Nie korzystałem.
AZ
  • Rejestracja:około 3 lata
  • Ostatnio:9 miesięcy
  • Postów:15
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)

ZD
Pewnie że są proset / "po bożemu" sposoby, to mnie wcale nie dziwi - tylko mocno zamotałaś w swoich założeniach początkowych
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)