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.txt
Sprawdź 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 = 1
Edytuj 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 = 5
System zawiera skrypt do testowania połączenia z bazą danych:
# W katalogu projektu, z aktywowanym środowiskiem wirtualnym:
python test_db_connection.py
Skrypt 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.py
Aby 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.target
Następnie włącz i uruchom usługę:
sudo systemctl daemon-reload
sudo systemctl enable waproprint
sudo systemctl start waproprint
Ten 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.ini
do 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 = StrongPassword123
server
- nazwa serwera SQLdatabase
- nazwa bazy danych Waprotrusted_connection
- czy używać uwierzytelniania Windowsusername
ipassword
- dane logowania dla uwierzytelniania SQL
[PRINTING]
printer_name = ZD421
temp_folder = C:\WaproPrints
check_interval = 5
printer_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,operator
allowed_users
- lista dozwolonych użytkowników (operatorów) oddzielonych przecinkami
[DOCUMENT]
paper_width = 80
print_logo = no
# logo_path = C:\WaproPrints\logo.png
paper_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
WaproPrintHistory
w bazie danych - Prowadzi dziennik zdarzeń w plikach
db_monitor.log
iservice_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 remove
Teraz zainstalujmy ulepszoną wersję usługi:
python enhanced_service.py install
I uruchommy ją:
python enhanced_service.py start
Głó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 status
Dodatkowo, możemy spróbować uruchomić usługę w trybie debug, aby zobaczyć dokładnie, co się dzieje:
python enhanced_service.py debug
Jeś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.py
To 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.py
Wybierz 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.py
co 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.msc
lub 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 loop
Zapisz 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_DIR
powinien wskazywać na katalog z plikami skryptówsql2html_path
powinien 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.py
i 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.py
co 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.msc
lub 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 loop
Zapisz 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" /f
If 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.py
Please 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.ps1
Then try installing the service:
python db_monitor.py install
If 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 Name
Would 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 install
This 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.py
script - 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 install
This 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.py
script - 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.py
in 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 reinstall
The 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 test
Jeśli powyższe kroki nie pomogą, możemy spróbować zatrzymać usługę przez Windows Services:
- Naciśnij
Win + R
- Wpisz
services.msc
i 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 start
Daj 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.log
istderr.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.py
The main differences are:
- In Windows, the Python command is typically just
python
instead ofpython3
- The virtual environment activation path uses backslashes and is located in the Scripts directory
- The activation command doesn't use
source
in 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 zebrafy
python sql2html.py
python 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.pdf
Wszystkie 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 --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
: 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.pdf
python html_to_pdf_cont.py input.html --output output.pdf --width 4.0 --margin 5 --dpi 203 --items 34 --verbose
python 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 203
Ten 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.