System do automatycznego drukowania dokumentów z bazy danych Wapro Mag na różnych platformach (Windows/Linux). System monitoruje bazę danych w poszukiwaniu nowych dokumentów i drukuje je na podłączonych drukarkach termicznych lub sieciowych.
- Windows 10/11
 - Python 3.7 lub nowszy
 - Sterownik ODBC dla SQL Server
 - Drukarka termiczna (np. ZD421) skonfigurowana w systemie
 - Dostęp do bazy danych Wapro Mag
 
- Ubuntu 20.04/22.04/25.04 lub inna dystrybucja z Python 3.7+
 - FreeTDS i unixODBC do połączenia z SQL Server
 - Drukarka sieciowa lub podłączona lokalnie
 - Dostęp do bazy danych Wapro Mag
 
git clone https://github.com/text2doc/waproprint.git
cd waproprint# Zainstaluj wymagane pakiety systemowe
sudo apt-get update
sudo apt-get install -y python3-pip python3-venv tdsodbc unixodbc unixodbc-dev \
    freetds-dev freetds-bin dnsutils telnet arp-scan netdiscover nmap \
    wkhtmltopdf imagemagick ghostscript
# Utwórz i aktywuj środowisko wirtualne Pythona
python3 -m venv venv
source venv/bin/activate
# Zainstaluj zależności Pythona
pip install --upgrade pip
pip install -r requirements.txtSprawdź czy plik /etc/odbcinst.ini zawiera wpis dla FreeTDS:
[FreeTDS]
Description = FreeTDS Driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1Edytuj plik config.ini i ustaw odpowiednie parametry połączenia:
[DATABASE]
# Użyj FreeTDS jako sterownika na Linuxie
driver = FreeTDS
# Adres IP lub nazwa hosta serwera SQL
server = adres_serwera
# Nazwa bazy danych
database = WAPRO_DEMO
# Dane logowania
trusted_connection = no
username = twoj_uzytkownik
password = twoje_haslo
[PRINTING]
# Konfiguracja drukarki
printer_name = TWOJA_DRUKARKA
# Katalog tymczasowy do przechowywania plików PDF
temp_folder = /tmp/waproprint
# Częstotliwość sprawdzania nowych zamówień (w sekundach)
check_interval = 5System zawiera skrypt do testowania połączenia z bazą danych:
# W katalogu projektu, z aktywowanym środowiskiem wirtualnym:
python test_db_connection.pySkrypt wyświetli szczegółowe informacje o próbie połączenia i ewentualnych błędach.
- Sprawdź czy serwer SQL jest dostępny z Twojego komputera:
telnet adres_serwera 1433
 - Sprawdź konfigurację FreeTDS w pliku 
/etc/freetds/freetds.conf - Upewnij się, że użytkownik ma uprawnienia do łączenia się z bazą danych
 
- Sprawdź czy drukarka jest dostępna w sieci
 - Upewnij się, że port drukarki (zazwyczaj 9100) nie jest zablokowany przez zaporę sieciową
 - Sprawdź logi systemowe pod kątem błędów związanych z drukowaniem
 
# Aktywuj środowisko wirtualne
source venv/bin/activate
# Uruchom główny skrypt
python waproprint.pyAby uruchomić system jako usługa systemd, utwórz plik /etc/systemd/system/waproprint.service:
[Unit]
Description=WaproPrint Service
After=network.target
[Service]
User=twoj_uzytkownik
WorkingDirectory=/sciezka/do/waproprint
Environment="PATH=/sciezka/do/waproprint/venv/bin"
ExecStart=/sciezka/do/waproprint/venv/bin/python /sciezka/do/waproprint/waproprint.py
Restart=always
[Install]
WantedBy=multi-user.targetNastępnie włącz i uruchom usługę:
sudo systemctl daemon-reload
sudo systemctl enable waproprint
sudo systemctl start waproprintTen projekt jest dostępny na licencji MIT. Szczegóły znajdują się w pliku LICENSE.
W przypadku pytań lub problemów, prosimy o zgłoszenie problemu w repozytorium projektu.
https://github.com/ArtifexSoftware/ghostpdl-downloads/releases
- Pobierz i zainstaluj Python 3.7 lub nowszy ze strony python.org
 - Podczas instalacji zaznacz opcję "Add Python to PATH"
 
Uruchom wiersz poleceń jako administrator i wykonaj:
pip install pywin32 pyodbc reportlab configparser
Jeśli nie masz zainstalowanego sterownika ODBC dla SQL Server:
- Pobierz sterownik ze strony Microsoftu: Microsoft ODBC Driver for SQL Server
 - Zainstaluj sterownik zgodnie z instrukcjami
 
- Umieść wszystkie pliki projektu w wybranym katalogu, np. 
C:\WaproPrintSystem - Dostosuj plik konfiguracyjny 
config.inido swoich potrzeb:- Ustaw parametry połączenia z bazą danych
 - Skonfiguruj nazwę drukarki
 - Ustaw folder tymczasowy
 - Określ dozwolonych użytkowników (opcjonalnie)
 
 
- Uruchom wiersz poleceń jako administrator
 - Przejdź do katalogu z plikami systemu: 
cd C:\WaproPrintSystem - Uruchom skrypt instalacyjny: 
install.bat - Wybierz opcję "1" aby zainstalować usługę
 - Wybierz opcję "2" aby uruchomić usługę
 
Plik config.ini zawiera wszystkie ustawienia systemu:
[DATABASE]
server = localhost
database = WAPRO
trusted_connection = yes
# lub dla uwierzytelniania SQL:
# trusted_connection = no
# username = sa
# password = StrongPassword123server- nazwa serwera SQLdatabase- nazwa bazy danych Waprotrusted_connection- czy używać uwierzytelniania Windowsusernameipassword- dane logowania dla uwierzytelniania SQL
[PRINTING]
printer_name = ZD421
temp_folder = C:\WaproPrints
check_interval = 5printer_name- dokładna nazwa drukarki w systemie Windowstemp_folder- katalog do przechowywania tymczasowych plików PDFcheck_interval- częstotliwość sprawdzania bazy danych (w sekundach)
[USERS]
allowed_users = admin,operatorallowed_users- lista dozwolonych użytkowników (operatorów) oddzielonych przecinkami
[DOCUMENT]
paper_width = 80
print_logo = no
# logo_path = C:\WaproPrints\logo.pngpaper_width- szerokość papieru w mmprint_logo- czy drukować logo firmylogo_path- ścieżka do pliku z logo (opcjonalna)
Po zainstalowaniu i uruchomieniu usługi, system działa automatycznie:
- Monitoruje bazę danych Wapro Mag co 5 sekund (lub zgodnie z konfiguracją)
 - Wykrywa nowe dokumenty ZO utworzone przez dozwolonych użytkowników
 - Generuje pliki PDF z dokumentami
 - Drukuje dokumenty na wskazanej drukarce termicznej
 - Zapisuje informacje o wydrukach w tabeli 
WaproPrintHistoryw bazie danych - Prowadzi dziennik zdarzeń w plikach 
db_monitor.logiservice_wrapper.log 
python install_service.py
Widzę, że występuje problem z uruchamianiem usługi. Spróbujmy naprawić to używając ulepszonej wersji usługi (enhanced_service.py), która ma lepszą obsługę błędów i diagnostykę.
Najpierw zatrzymajmy i usuńmy obecną usługę:
python db_monitor.py stop
python db_monitor.py removeTeraz zainstalujmy ulepszoną wersję usługi:
python enhanced_service.py installI uruchommy ją:
python enhanced_service.py startGłówne zmiany w ulepszonej wersji usługi:
- Lepsza obsługa błędów i logowanie
 - Bezpieczniejsze uruchamianie procesów
 - Poprawna obsługa ścieżek i katalogów
 - Lepsze zarządzanie zmiennymi środowiskowymi
 - Bardziej szczegółowa diagnostyka
 
Jeśli usługa nadal nie działa, sprawdźmy logi:
python enhanced_service.py statusDodatkowo, możemy spróbować uruchomić usługę w trybie debug, aby zobaczyć dokładnie, co się dzieje:
python enhanced_service.py debugJeśli nadal występują problemy, proszę o przesłanie zawartości pliku enhanced_service.log po wykonaniu tych kroków. Szczególnie interesują mnie komunikaty błędów, które mogą wskazywać na przyczynę problemu.
Dodatkowo, sprawdźmy czy plik sql2html.py ma odpowiednie uprawnienia i czy wszystkie zależności są poprawnie zainstalowane:
python sql2html.pyTo pomoże nam zidentyfikować, czy problem leży w samej usłudze, czy w skrypcie sql2html.py.
Na podstawie przesłanych logów zidentyfikowano następujące problemy:
- Problem z usługą Windows: Usługa działa prawidłowo w trybie debug, ale nie działa po zainicjowaniu jako usługa Windows
 - Problem z katalogiem roboczym: Usługa może mieć problem z ustawieniem właściwego katalogu roboczego
 - Problem z uprawnieniami: Usługa działająca jako Windows Service może nie mieć odpowiednich uprawnień
 - Problem z kodowaniem: Widoczne problemy z polskimi znakami w logach
 
Przygotowałem trzy skrypty, które rozwiązują wszystkie powyższe problemy:
- 
enhanced_service.py- ulepszona usługa Windows z poprawioną obsługą:- katalogów roboczych
 - uprawnień
 - kodowania znaków
 - logowania
 
 - 
install_service.py- narzędzie do instalacji/zarządzania usługą:- instalacja/deinstalacja usługi
 - zatrzymywanie/uruchamianie usługi
 - pełna reinstalacja usługi
 
 - 
manual_run.py- skrypt do ręcznego uruchomienia monitorowania w trybie interaktywnym:- uruchamia sql2html.py co 5 sekund
 - monitoruje wyjście w czasie rzeczywistym
 - nie wymaga instalacji usługi
 
 
Wykonaj poniższe kroki, aby naprawić usługę:
Utwórz trzy nowe pliki w katalogu C:\Users\tom\github\zlecenia\wapromagpy\:
enhanced_service.py- zawartość z pierwszego artefaktuinstall_service.py- zawartość z drugiego artefaktumanual_run.py- zawartość z trzeciego artefaktu
Przed instalacją usługi, zaleca się przetestowanie działania w trybie ręcznym:
python install_service.pyWybierz opcję 6 (Pełna reinstalacja), która:
- Zatrzyma i usunie starą usługę (jeśli istnieje)
 - Zainstaluje nową usługę
 - Uruchomi nową usługę
 
Nowa usługa powinna być widoczna w Usługach Windows jako "Enhanced DB Monitor Service".
Sprawdź logi w pliku enhanced_service.log aby upewnić się, że usługa działa poprawnie.
W Windows Server możesz skonfigurować uruchamianie skryptu co 5 sekund na kilka sposobów. Oto najlepsze rozwiązania:
Najłatwiejszym rozwiązaniem jest stworzenie skryptu, który sam się uruchamia w pętli co 5 sekund i działa w tle:
- 
Użyj skryptu
db_monitor_nonservice.py, który już posiadasz:- Ten skrypt zawiera wewnętrzną pętlę, która uruchamia 
sql2html.pyco 5 sekund - Można go uruchomić jako zwykły proces: 
python db_monitor_nonservice.py 
 - Ten skrypt zawiera wewnętrzną pętlę, która uruchamia 
 - 
Uruchamianie przy starcie systemu:
- Utwórz plik .bat w katalogu autostartu lub skonfiguruj zadanie w harmonogramie, które uruchomi się przy starcie systemu
 
 
Jeśli chcesz użyć harmonogramu zadań Windows, skonfiguruj go do uruchamiania co 5 sekund:
- 
Otwórz Harmonogram zadań:
- W menu Start wpisz 
taskschd.msclub przejdź do Panelu sterowania → Narzędzia administracyjne → Harmonogram zadań 
 - W menu Start wpisz 
 - 
Utwórz nowe zadanie:
- Kliknij prawym przyciskiem na "Biblioteka harmonogramu zadań" i wybierz "Utwórz zadanie"
 - Na zakładce "Ogólne":
- Nadaj nazwę, np. "DB Monitor SQL"
 - Wybierz "Uruchom niezależnie od tego, czy użytkownik jest zalogowany"
 - Zaznacz "Uruchom z najwyższymi uprawnieniami"
 
 
 - 
Ustaw wyzwalacz:
- Przejdź do zakładki "Wyzwalacze"
 - Kliknij "Nowy..." i wybierz "Przy uruchomieniu"
 - W sekcji "Ustawienia zaawansowane":
- Zaznacz "Powtórz zadanie co:" i wpisz "5 sekund"
 - W polu "przez:" wybierz "nieokreślony"
 
 - Kliknij OK
 
 - 
Skonfiguruj akcję:
- Przejdź do zakładki "Akcje"
 - Kliknij "Nowy..."
 - Akcja: "Uruchom program"
 - Program/skrypt: 
python - Dodaj argumenty: 
C:\Users\[USERNAME]\wapromag\sql2html.py - Rozpocznij w: 
C:\Users\[USERNAME]\wapromag - Kliknij OK
 
 - 
Ustaw dodatkowe opcje:
- W zakładce "Ustawienia" zaznacz:
- "Zezwalaj na uruchamianie zadania na żądanie"
 - "Uruchom zadanie tak szybko, jak to możliwe po niewykonanym zaplanowanym uruchomieniu"
 - W "Jeśli zadanie już działa, obowiązuje następująca reguła:" wybierz "Zatrzymaj istniejące wystąpienie"
 
 
 - W zakładce "Ustawienia" zaznacz:
 - 
Zapisz i przetestuj:
- Kliknij OK, aby zapisać zadanie
 - Znajdź zadanie na liście, kliknij prawym przyciskiem i wybierz "Uruchom"
 - Sprawdź dzienniki, aby potwierdzić, że zadanie działa prawidłowo
 
 
Możesz utworzyć prosty skrypt .bat z pętlą nieskończoną:
@echo off
:loop
    echo Uruchamianie sql2html.py...
    python C:\Users\[USERNAME]\wapromag\sql2html.py
    timeout /t 5 /nobreak
goto loopZapisz ten skrypt jako run_monitor.bat i skonfiguruj jego uruchamianie przy starcie systemu.
Dla serwera produkcyjnego najbardziej zalecane jest rozwiązanie z opcji 1 - używanie skryptu db_monitor_nonservice.py, który sam zawiera logikę pętli i jest bardziej odporny na błędy. Następnie skonfiguruj jedno zadanie w harmonogramie zadań, które uruchamia ten skrypt przy starcie systemu.
Jeśli nadal występują problemy:
- 
Sprawdź logi w plikach:
enhanced_service.log- logi nowej usługiservice_install.log- logi instalacji usługimanual_run.log- logi z ręcznego uruchomienia
 - 
Upewnij się, że ścieżki w skryptach są prawidłowe:
SCRIPT_DIRpowinien wskazywać na katalog z plikami skryptówsql2html_pathpowinien wskazywać na plik sql2html.py
 - 
Sprawdź uprawnienia:
- Usługa domyślnie działa jako LocalSystem
 - Upewnij się, że użytkownik ma dostęp do bazy danych
 - Jeśli potrzebne są szczególne uprawnienia, zmodyfikuj konto usługi w ustawieniach Windows
 
 - 
Problem z kodowaniem:
- Skrypty ustawiają kodowanie utf-8 i obsługują polskie znaki
 - W przypadku problemów z kodowaniem, sprawdź ustawienia systemowe Windows
 
 
Usługa jest skonfigurowana do automatycznego uruchamiania po restarcie komputera. Jeśli to nie działa:
- Otwórz Panel sterowania → Narzędzia administracyjne → Usługi
 - Znajdź "Enhanced DB Monitor Service"
 - Kliknij prawym przyciskiem myszy i wybierz "Właściwości"
 - Ustaw typ uruchamiania na "Automatyczny"
 - Kliknij "OK"
 
Jeśli pojawi się konieczność zmiany konfiguracji nowej usługi, należy:
- Zmodyfikować plik 
enhanced_service.py - Uruchomić skrypt 
install_service.pyi wybrać opcję 6 (pełna reinstalacja) 
W razie potrzeby testowania bez usługi, zawsze można użyć skryptu manual_run.py.
Nowe rozwiązanie naprawia problemy z:
- Uruchamianiem usługi Windows
 - Katalogiem roboczym
 - Uprawnieniami
 - Kodowaniem polskich znaków
 - Zarządzaniem usługą
 
Dzięki tym zmianom, usługa powinna działać stabilnie w środowisku produkcyjnym.
python manual_run.py
Ten tryb pozwala weryfikować działanie skryptu sql2html.py bez instalowania usługi.
Naciśnij Ctrl+C, aby zatrzymać program.
### 3. Zatrzymaj i usuń starą usługę
Jeśli stara usługa jest już zainstalowana, należy ją zatrzymać i usunąć:
```powershell
sc stop DBMonitorService
sc delete DBMonitorService
Uruchom skrypt instalacyjny z uprawnieniami administratora:
python enhanced_service_fixed.py debug
W Windows Server możesz skonfigurować uruchamianie skryptu co 5 sekund na kilka sposobów. Oto najlepsze rozwiązania:
Najłatwiejszym rozwiązaniem jest stworzenie skryptu, który sam się uruchamia w pętli co 5 sekund i działa w tle:
- 
Użyj skryptu
db_monitor_nonservice.py, który już posiadasz:- Ten skrypt zawiera wewnętrzną pętlę, która uruchamia 
sql2html.pyco 5 sekund - Można go uruchomić jako zwykły proces: 
python db_monitor_nonservice.py 
 - Ten skrypt zawiera wewnętrzną pętlę, która uruchamia 
 - 
Uruchamianie przy starcie systemu:
- Utwórz plik .bat w katalogu autostartu lub skonfiguruj zadanie w harmonogramie, które uruchomi się przy starcie systemu
 
 
Jeśli chcesz użyć harmonogramu zadań Windows, skonfiguruj go do uruchamiania co 5 sekund:
- 
Otwórz Harmonogram zadań:
- W menu Start wpisz 
taskschd.msclub przejdź do Panelu sterowania → Narzędzia administracyjne → Harmonogram zadań 
 - W menu Start wpisz 
 - 
Utwórz nowe zadanie:
- Kliknij prawym przyciskiem na "Biblioteka harmonogramu zadań" i wybierz "Utwórz zadanie"
 - Na zakładce "Ogólne":
- Nadaj nazwę, np. "DB Monitor SQL"
 - Wybierz "Uruchom niezależnie od tego, czy użytkownik jest zalogowany"
 - Zaznacz "Uruchom z najwyższymi uprawnieniami"
 
 
 - 
Ustaw wyzwalacz:
- Przejdź do zakładki "Wyzwalacze"
 - Kliknij "Nowy..." i wybierz "Przy uruchomieniu"
 - W sekcji "Ustawienia zaawansowane":
- Zaznacz "Powtórz zadanie co:" i wpisz "5 sekund"
 - W polu "przez:" wybierz "nieokreślony"
 
 - Kliknij OK
 
 - 
Skonfiguruj akcję:
- Przejdź do zakładki "Akcje"
 - Kliknij "Nowy..."
 - Akcja: "Uruchom program"
 - Program/skrypt: 
python - Dodaj argumenty: 
C:\Users\[USERNAME]\wapromag\sql2html.py - Rozpocznij w: 
C:\Users\[USERNAME]\wapromag - Kliknij OK
 
 - 
Ustaw dodatkowe opcje:
- W zakładce "Ustawienia" zaznacz:
- "Zezwalaj na uruchamianie zadania na żądanie"
 - "Uruchom zadanie tak szybko, jak to możliwe po niewykonanym zaplanowanym uruchomieniu"
 - W "Jeśli zadanie już działa, obowiązuje następująca reguła:" wybierz "Zatrzymaj istniejące wystąpienie"
 
 
 - W zakładce "Ustawienia" zaznacz:
 - 
Zapisz i przetestuj:
- Kliknij OK, aby zapisać zadanie
 - Znajdź zadanie na liście, kliknij prawym przyciskiem i wybierz "Uruchom"
 - Sprawdź dzienniki, aby potwierdzić, że zadanie działa prawidłowo
 
 
Możesz utworzyć prosty skrypt .bat z pętlą nieskończoną:
@echo off
:loop
    echo Uruchamianie sql2html.py...
    python C:\Users\[USERNAME]\wapromag\sql2html.py
    timeout /t 5 /nobreak
goto loopZapisz ten skrypt jako run_monitor.bat i skonfiguruj jego uruchamianie przy starcie systemu.
Dla serwera produkcyjnego najbardziej zalecane jest rozwiązanie z opcji 1 - używanie skryptu db_monitor_nonservice.py, który sam zawiera logikę pętli i jest bardziej odporny na błędy. Następnie skonfiguruj jedno zadanie w harmonogramie zadań, które uruchamia ten skrypt przy starcie systemu.
pip install -r requirements.txt
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
python db_monitor.py install
python db_monitor.py start
python db_monitor.py stop
python db_monitor.py status
python db_monitor.py remove
# a manual registry cleanup:
reg delete "HKLM\SYSTEM\CurrentControlSet\Services\DBMonitorService" /f
# check the details of the service installation:
sc qc DBMonitorService
sc queryex DBMonitorService
# Przejdź do katalogu ze skryptem
cd C:\Users\tom\github\zlecenia\wapromagpy
# Zainstaluj usługę z pełną ścieżką do Pythona
python db_monitor.py install --startup=auto
# Uruchom usługę
python db_monitor.py start
python -m pip install --upgrade pywin32
python pywin32_postinstall.py -install
- Open an administrative PowerShell
 - Run these commands:
 
# Stop the service if it's running
sc stop DBMonitorService
# Delete the service
sc delete DBMonitorService
# Clean up registry entries
reg delete "HKLM\SYSTEM\CurrentControlSet\Services\DBMonitorService" /fIf those commands don't work, we'll need to diagnose further. Let's create a more comprehensive diagnostic script:
I recommend taking these steps:
- Save the script as 
service_diagnostic.py - Run it with administrative privileges:
 
python service_diagnostic.py- Share the contents of 
service_diagnostic.log 
Additionally, please run these commands in an administrative PowerShell and share the outputs:
wmic service where name="DBMonitorService" get *This will help us understand:
- The exact state of the service
 - Any registry entries
 - Potential permission or configuration issues
 
Let's diagnose this further. The error code 1058 suggests there might be an issue with the service configuration.
I'll create a comprehensive diagnostic script that will help us understand exactly what's happening:
I'll also create a more robust installation script:
Recommended steps:
- Run the diagnostic script to gather more information:
 
python advanced_service_diagnostics.py- Then run the ultimate installation script:
 
python ultimate_service_installation.pyPlease share:
- Contents of 
service_deep_diagnostics.log - Contents of 
ultimate_service_installation.log - Output of these commands in an admin PowerShell:
 
sc qc DBMonitorService
reg query "HKLM\SYSTEM\CurrentControlSet\Services\DBMonitorService"Some potential issues that could cause error 1058:
- Incorrect service binary path
 - Missing dependencies
 - Permissions issues
 - Corrupt service configuration
 
This is a persistent Windows service configuration issue. Let's try a more manual approach:
- 
First, we'll create a PowerShell script to forcefully clean up the service:
 - 
Save this script as
clean_service.ps1 - 
Open an administrative PowerShell and run:
 
powershell.exe -ExecutionPolicy Bypass -File clean_service.ps1Then try installing the service:
python db_monitor.py installIf this doesn't work, we'll need to do a more in-depth investigation.
The "marked for deletion" error typically occurs when:
- A previous service removal was interrupted
 - There are lingering references in the Windows service configuration
 - There are permission issues preventing complete service removal
 
To help diagnose, could you also run these commands in an admin PowerShell and share the output:
# Check service details
sc.exe qc DBMonitorService
# List all services containing DBMonitor
Get-Service | Where-Object { $_.Name -like "*DBMonitor*" }
# Check registry entries
Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Services" | 
    Where-Object { $_.Name -like "*DBMonitorService*" } | 
    Select-Object NameWould you like to proceed with these steps?
The service still appears to be in a problematic state. Let's try a more aggressive approach:
- 
First, I'll create a Python script that uses advanced Windows API techniques to force service removal:
 - 
Save the script as
advanced_service_cleanup.py - 
Run the script with administrative privileges:
 
python advanced_service_cleanup.py- Then try installing the service:
 
python db_monitor.py installThis script provides a more comprehensive approach to service removal:
- Multiple removal methods
 - Detailed logging
 - Attempts to stop and remove the service through various Windows APIs
 - Handles registry cleanup
 
Would you like to proceed with these steps? If successful, this should clear out any lingering service configuration and allow you to reinstall the service.
Please share:
- The output of the 
advanced_service_cleanup.pyscript - The contents of 
advanced_service_cleanup.log - Any errors when trying to install the service
 
This persistent issue suggests a deep-seated problem with the Windows Service configuration. Let's try a more extreme approach:
- First, use Windows Management Instrumentation (WMI) to forcefully remove the service:
 
Open an administrative PowerShell and run:
# Use WMI to find and remove the service
$service = Get-WmiObject -Class Win32_Service | Where-Object {$_.Name -eq "DBMonitorService"}
if ($service) {
    $service.Delete()
}
# Additional cleanup
sc.exe delete DBMonitorService /f
reg delete "HKLM\SYSTEM\CurrentControlSet\Services\DBMonitorService" /f- I'll create a comprehensive WMI-based removal script:
 
IMPORTANT: Before running this script, you'll need to install the wmi package:
pip install wmi- 
Save the script as
extreme_service_removal.py - 
Run the script with administrative privileges:
 
python extreme_service_removal.py- Then attempt to install the service:
 
python db_monitor.py installThis script uses multiple removal methods:
- Windows Management Instrumentation (WMI)
 - Service Control (SC)
 - PyWin32
 - Registry entry removal
 - Verification of removal
 
Please share:
- The output of the 
extreme_service_removal.pyscript - The contents of 
extreme_service_removal.log - Any errors when trying to install the service
 
The error message indicates that the service "DBMonitorService" already exists in the Windows Service Manager. Here are the steps to resolve this:
- First, remove the existing service:
 
sc delete DBMonitorService- Then, try reinstalling the service:
 
python db_monitor.py install- 
Save the script as
service_management.pyin the same directory as your service files. - 
Remove the existing service:
 
python service_management.py remove- Install the service:
 
python service_management.py install- If you want to completely remove and reinstall:
 
python service_management.py reinstallThe script provides:
- Detailed logging to 
service_management.log - Error handling
 - Environment diagnostics
 - Ability to remove, install, or reinstall the service
 
Przepraszam za zamieszanie. Spróbujmy najpierw sprawdzić status usługi, a następnie zatrzymać ją w bezpieczny sposób:
- Najpierw sprawdź status usługi:
 
python db_monitor.py status- Następnie spróbuj zatrzymać usługę:
 
python db_monitor.py stop- Jeśli usługa nadal działa, spróbujmy odinstalować ją:
 
python db_monitor.py remove- Następnie zainstalujmy usługę ponownie:
 
python db_monitor.py install- I uruchommy ją:
 
python db_monitor.py start- I uruchommy ją:
 
python db_monitor.py testJeśli powyższe kroki nie pomogą, możemy spróbować zatrzymać usługę przez Windows Services:
- Naciśnij 
Win + R - Wpisz 
services.msci naciśnij Enter - Znajdź usługę "DB Monitor Service"
 - Kliknij prawym przyciskiem myszy i wybierz "Stop"
 - Następnie spróbuj ponownie uruchomić usługę przez komendę:
 
python db_monitor.py startDaj znać, czy któreś z tych rozwiązań pomogło. Jeśli nie, możemy spróbować innych metod.
W przypadku problemów sprawdź pliki logów:
db_monitor.log- główny log działania systemuservice_wrapper.log- log usługi Windowsstdout.logistderr.log- standardowe wyjście i błędy skryptu
Aby uruchomić system w trybie konsoli (do diagnozowania problemów):
- Uruchom 
install.bat - Wybierz opcję "5. Uruchom w trybie konsoli"
 
- Problem z połączeniem do bazy danych: Sprawdź ustawienia w sekcji [DATABASE]
 - Drukarka nie drukuje: Upewnij się, że nazwa drukarki w konfiguracji jest dokładnie taka sama jak w systemie Windows
 - Usługa nie uruchamia się: Sprawdź logi i upewnij się, że masz uprawnienia administratora
 - Dokumenty nie są wykrywane: Sprawdź, czy dokumenty są typu ZO i czy utworzyli je dozwoleni użytkownicy
 
Poniżej przedstawiam kompletną listę plików składających się na system automatycznego drukowania dokumentów ZO z bazy danych Wapro Mag.
- 
db_monitor.py ✅
- Główny skrypt monitorujący bazę danych i drukujący dokumenty
 - Status: Utworzony
 
 - 
service_wrapper.py ✅
- Wrapper umożliwiający uruchomienie skryptu jako usługa Windows
 - Status: Utworzony
 
 - 
config.ini ✅
- Plik konfiguracyjny zawierający ustawienia systemu
 - Status: Utworzony
 
 - 
install.bat ✅
- Skrypt instalacyjny do konfiguracji, instalacji i zarządzania usługą
 - Status: Utworzony
 
 - 
README.md ✅
- Dokumentacja systemu z instrukcjami instalacji i użytkowania
 - Status: Utworzony
 
 
- 
db_monitor.log
- Plik logów z działania głównego skryptu
 - Status: Generowany automatycznie podczas pracy skryptu
 
 - 
service_wrapper.log
- Plik logów z działania usługi Windows
 - Status: Generowany automatycznie podczas pracy usługi
 
 - 
stdout.log i stderr.log
- Pliki zawierające standardowe wyjście i błędy skryptu
 - Status: Generowane automatycznie podczas pracy usługi
 
 
- Pliki PDF w folderze tymczasowym
- Tymczasowe pliki PDF generowane przed drukowaniem
 - Status: Generowane podczas pracy systemu, usuwane po wydrukowaniu
 
 
- Tabela WaproPrintHistory
- Tabela w bazie danych Wapro Mag do śledzenia wydrukowanych dokumentów
 - Status: Tworzona automatycznie podczas pierwszego uruchomienia skryptu
 
 
Wszystkie niezbędne pliki do działania systemu zostały utworzone. System jest kompletny i gotowy do wdrożenia.
Do poprawnego działania systemu wymagane jest:
- Python 3.7 lub nowszy zainstalowany w systemie
 - Zainstalowane biblioteki: pywin32, pyodbc, reportlab, configparser
 - Sterownik ODBC dla SQL Server
 - Dostęp do bazy danych Wapro Mag
 - Drukarka termiczna (np. ZD421) skonfigurowana w systemie Windows
 
Aby rozpocząć korzystanie z systemu:
- Umieść wszystkie pliki w wybranym katalogu (np. C:\WaproPrintSystem)
 - Uruchom skrypt install.bat z uprawnieniami administratora
 - Wybierz opcję 1 aby zainstalować usługę
 - Wybierz opcję 2 aby uruchomić usługę
 
Po wykonaniu tych kroków, system będzie automatycznie monitorował bazę danych i drukował nowe dokumenty ZO.
- Create and activate virtual environment:
 
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
python -m venv venv
venv\Scripts\activate- Install requirements:
pip install --upgrade pip C:\Users\[USERNAME]\wapromag\venv\Scripts\python.exe -m pip install --upgrade pip pip install -r requirements.txt
 
https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases
- Start the server:
 
python html2zpl2pdf.pyThe main differences are:
- In Windows, the Python command is typically just 
pythoninstead ofpython3 - The virtual environment activation path uses backslashes and is located in the Scripts directory
 - The activation command doesn't use 
sourcein Windows 
Would you like any further adjustments to these commands for your Windows environment?
- 
Create and activate virtual environment:
python3 -m venv venv source venv/bin/activate - 
Install requirements:
pip install --upgrade pip python.exe -m pip install --upgrade pip pip install -r requirements.txt
 - 
Start the server:
python html2escpos5.py zamowienie.html --width 60 --small-font 1 --encoding cp852
 
pip install pywin32 beautifulsoup4 pillow qrcode pyodbc configparser weasyprint reportlab PyPDF2 PyMuPDF numpy html2text escpos tabulate cssutils tinycss zebrafypython sql2html.pypython html2zpl1.py zamowienie.html --printer "ZDesigner GK420d"
python zpl/html2zpl.py ZO_HTML/ZO_0023_25.html --printer "ZDesigner GK420d"
python zpl/html2zpl.py ZO_HTML/ZO_0023_25.html
python zpl/html2zpl1.py zamowienie.html
python zpl/html2zpl2pdf.py 
python zpl/html2zpl2print.py
python html_to_continuous_pdf.py
python html_to_continuous_pdf.py input.html -o output.pdfWszystkie opcje html_to_continuous_pdf_file_fix.py
python html_to_continuous_pdf.py input.html --output output.pdf --width 4.0 --margin 5 --dpi 203 --items 34 --verboseinput_file: Ścieżka do pliku HTML-o, --output: Ścieżka do pliku wyjściowego PDF (opcjonalnie, domyślnie nazwa taka jak plik wejściowy z rozszerzeniem .pdf)--width: Szerokość strony w calach (domyślnie 4.0)--margin: Margines w milimetrach (domyślnie 5)--dpi: Roz# Skrypt konwersji HTML do ciągłego PDF dla drukarek termicznych
Ten skrypt rozwiązuje problem konwersji plików HTML do formatu PDF w sposób ciągły (bez podziału na strony) - idealny dla drukarek termicznych i innych zastosowań, gdzie potrzebny jest dokument bez podziału na strony.
- Generowanie PDF o dokładnej długości treści - dokument będzie tak długi, jak jego zawartość, bez zbędnej białej przestrzeni
 - Dwuprzebiegowa konwersja - pierwszy przebieg tworzy PDF do analizy, drugi przebieg generuje PDF o dokładnej wysokości
 - Automatyczne wykrywanie końca dokumentu - skrypt wykrywa gdzie faktycznie kończy się treść
 - Obsługa problematycznych formatowań - eliminuje problemy z podziałami stron i nieprawidłowym formatowaniem HTML
 - Elastyczne opcje rozmiaru i marginesów - możliwość dostosowania do drukarek termicznych różnej szerokości
 
- Python 3.6 lub nowszy
 - Biblioteka PyPDF2: 
pip install PyPDF2 - wkhtmltopdf: Pobierz i zainstaluj
 
- PyMuPDF: 
pip install PyMuPDF(dokładniejsza analiza zawartości PDF) - PIL i NumPy: 
pip install pillow numpy(analiza obrazu PDF) - pdf2image: 
pip install pdf2image(konwersja PDF na obrazy do analizy) 
- 
Zainstaluj wymagane zależności:
pip install PyPDF2 - 
Pobierz i zainstaluj wkhtmltopdf:
- Dla Windows: Pobierz instalator z wkhtmltopdf.org
 - Dla Linux: 
sudo apt-get install wkhtmltopdf(Ubuntu/Debian) lub odpowiednik dla Twojej dystrybucji - Dla macOS: 
brew install wkhtmltopdf(wymaga Homebrew) 
 - 
Upewnij się, że wkhtmltopdf jest dostępny w ścieżce systemowej lub wskaż jego lokalizację w skrypcie.
 
python html_to_pdf_cont.py input.html -o output.pdfpython html_to_pdf_cont.py input.html --output output.pdf --width 4.0 --margin 5 --dpi 203 --items 34 --verbosepython html_to_continuous_pdf.py ZO_HTML/ZO_0020_25.html --output output.pdf --width 4.0 --margin 1 --dpi 203 --split-pdf --verbose  input_file: Ścieżka do pliku HTML-o, --output: Ścieżka do pliku wyjściowego PDF (opcjonalnie, domyślnie nazwa taka jak plik wejściowy z rozszerzeniem .pdf)--width: Szerokość strony w calach (domyślnie 4.0)--margin: Margines w milimetrach (domyślnie 5)--dpi: Rozdzielczość w DPI (domyślnie 203, typowa dla drukarek termicznych)--items: Liczba pozycji w dokumencie - pomaga obliczyć optymalną wysokość PDF (opcjonalnie)--verbose, -v: Wyświetlaj szczegółowe komunikaty
- 
Jeśli PDF jest generowany z podziałem na strony:
- Upewnij się, że używasz najnowszej wersji skryptu
 - Zwiększ wartość parametru 
--width, aby dostosować ją do szerokości Twojej drukarki 
 - 
Jeśli PDF ma białą przestrzeń na końcu:
- Może być to powodowane przez specyficzne style CSS w dokumencie HTML
 - Spróbuj edytować plik HTML aby usunąć elementy dodające dodatkową przestrzeń
 
 - 
Jeśli wkhtmltopdf nie jest znajdowany:
- Upewnij się, że jest poprawnie zainstalowany
 - Dodaj ścieżkę do katalogu bin wkhtmltopdf do zmiennej PATH
 - Możesz też ręcznie zmodyfikować funkcję 
find_wkhtmltopdf_path()w skrypcie 
 
- Skrypt najpierw przetwarza plik HTML, dodając specjalne style CSS, które wymuszają ciągły format bez podziału na strony.
 - Następnie uruchamia wkhtmltopdf z odpowiednimi opcjami, aby wygenerować PDF.
 - Na końcu używa PyPDF2 do przetworzenia PDF, usuwając ewentualną nadmiarową białą przestrzeń i zapewniając odpowiedni format wyjściowy.
 
Dla drukarki termicznej o szerokości 80mm (około 3.15 cala), możesz użyć:
python html_to_pdf_cont.py faktura.html --width 3.15 --margin 2 --dpi 203Ten skrypt jest idealny do generowania:
- Paragonów i faktur
 - Etykiet
 - Długich list i raportów
 - Dokumentów, które mają być drukowane na drukarkach termicznych
 
- Niektóre skomplikowane układy HTML mogą nie konwertować się idealnie. W takich przypadkach warto uprościć HTML.
 - Skrypt został zoptymalizowany do pracy z drukarkami termicznymi i podobnymi zastosowaniami wymagającymi ciągłego dokumentu.