A tool for generating and printing documents from database queries
Project description
waproprint
WaproPrintSystem - System automatycznego drukowania dokumentów ZO z Wapro Mag
Opis
Prosty system monitorujący bazę danych Wapro Mag i automatycznie drukujący dokumenty Zamówień Odbiorcy (ZO) na drukarce termicznej. System działa jako usługa Windows, sprawdzając co 5 sekund (konfigurowalne) bazę danych w poszukiwaniu nowych dokumentów ZO i drukując je w formie PDF na wskazanej drukarce.
Drukarka: 8.169 PC: 8.20
Wymagania
- Windows 10/11
- Python 3.7 lub nowszy
- Sterownik ODBC dla SQL Server
- https://wapro.pl/dokumentacja-erp/desktop/docs/instalacja-programu/reczna-instalacja-serwera-baz/mg-instalacja-krok-po-kroku/
- https://www.microsoft.com/en-us/download/details.aspx?id=101064
- Drukarka termiczna (np. ZD421) skonfigurowana w systemie
- Dostęp do bazy danych Wapro Mag
Instalacja
ghostpdl 10.05.0
https://github.com/ArtifexSoftware/ghostpdl-downloads/releases
1. Instalacja Pythona
- Pobierz i zainstaluj Python 3.7 lub nowszy ze strony python.org
- Podczas instalacji zaznacz opcję "Add Python to PATH"
2. Instalacja wymaganych bibliotek
Uruchom wiersz poleceń jako administrator i wykonaj:
pip install pywin32 pyodbc reportlab configparser
3. Instalacja sterownika ODBC dla SQL Server
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
4. Przygotowanie plików systemu
- 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)
5. Instalacja i uruchomienie usługi
- 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ę
Konfiguracja
Plik config.ini zawiera wszystkie ustawienia systemu:
Sekcja [DATABASE]
[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 Windowsusernameipassword- dane logowania dla uwierzytelniania SQL
Sekcja [PRINTING]
[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)
Sekcja [USERS]
[USERS]
allowed_users = admin,operator
allowed_users- lista dozwolonych użytkowników (operatorów) oddzielonych przecinkami
Sekcja [DOCUMENT]
[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)
Użytkowanie
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 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.
Instrukcja naprawy i konfiguracji usługi monitorowania SQL
Diagnoza problemu
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
Rozwiązanie
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
Instrukcja wdrożenia
Wykonaj poniższe kroki, aby naprawić usługę:
1. Utwórz nowe pliki
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
2. Testowanie w trybie ręcznym
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ę
5. Weryfikacja działania
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.
Uruchamianie skryptu co 5 sekund w Windows Server
W Windows Server możesz skonfigurować uruchamianie skryptu co 5 sekund na kilka sposobów. Oto najlepsze rozwiązania:
Opcja 1: Skrypt pętli w tle
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
Opcja 2: Konfiguracja zadania w harmonogramie zadań (Task Scheduler)
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\INTEL\wapromag\sql2html.py - Rozpocznij w:
C:\Users\INTEL\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
Opcja 3: Skrypt wsadowy z pętlą
Możesz utworzyć prosty skrypt .bat z pętlą nieskończoną:
@echo off
:loop
echo Uruchamianie sql2html.py...
python C:\Users\INTEL\wapromag\sql2html.py
timeout /t 5 /nobreak
goto loop
Zapisz ten skrypt jako run_monitor.bat i skonfiguruj jego uruchamianie przy starcie systemu.
Zalecane rozwiązanie
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.
Rozwiązywanie problemów
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
Uruchamianie po restarcie komputera
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"
Dodatkowe informacje
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.
Podsumowanie zmian
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
4. Instalacja i uruchomienie nowej usługi
Uruchom skrypt instalacyjny z uprawnieniami administratora:
python enhanced_service_fixed.py debug
Uruchamianie skryptu co 5 sekund w Windows Server
W Windows Server możesz skonfigurować uruchamianie skryptu co 5 sekund na kilka sposobów. Oto najlepsze rozwiązania:
Opcja 1: Skrypt pętli w tle
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
Opcja 2: Konfiguracja zadania w harmonogramie zadań (Task Scheduler)
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\INTEL\wapromag\sql2html.py - Rozpocznij w:
C:\Users\INTEL\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
Opcja 3: Skrypt wsadowy z pętlą
Możesz utworzyć prosty skrypt .bat z pętlą nieskończoną:
@echo off
:loop
echo Uruchamianie sql2html.py...
python C:\Users\INTEL\wapromag\sql2html.py
timeout /t 5 /nobreak
goto loop
Zapisz ten skrypt jako run_monitor.bat i skonfiguruj jego uruchamianie przy starcie systemu.
Zalecane rozwiązanie
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.
install
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.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 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.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
Usługa Windows
-
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 reinstall
The script provides:
- Detailed logging to
service_management.log - Error handling
- Environment diagnostics
- Ability to remove, install, or reinstall the service
Rozwiązywanie problemów
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.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 start
Daj znać, czy któreś z tych rozwiązań pomogło. Jeśli nie, możemy spróbować innych metod.
Sprawdzanie logów
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
Uruchamianie w trybie konsoli
Aby uruchomić system w trybie konsoli (do diagnozowania problemów):
- Uruchom
install.bat - Wybierz opcję "5. Uruchom w trybie konsoli"
Typowe problemy
- 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
Dokumentacja WaproPrintSystem - Lista plików
Poniżej przedstawiam kompletną listę plików składających się na system automatycznego drukowania dokumentów ZO z bazy danych Wapro Mag.
Pliki główne
-
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
Pliki generowane automatycznie podczas pracy systemu
-
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 tymczasowe
- Pliki PDF w folderze tymczasowym
- Tymczasowe pliki PDF generowane przed drukowaniem
- Status: Generowane podczas pracy systemu, usuwane po wydrukowaniu
Baza danych
- Tabela WaproPrintHistory
- Tabela w bazie danych Wapro Mag do śledzenia wydrukowanych dokumentów
- Status: Tworzona automatycznie podczas pierwszego uruchomienia skryptu
Podsumowanie
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.
Windows
- 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\INTEL\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
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?
LINUX
-
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
Użycie
Podstawowe użycie
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
Opcje
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.
Główne funkcje
- 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
Wymagania
- Python 3.6 lub nowszy
- Biblioteka PyPDF2:
pip install PyPDF2 - wkhtmltopdf: Pobierz i zainstaluj
Opcjonalne zależności (dla lepszej analizy PDF)
- 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)
Instalacja
-
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.
Użycie
Podstawowe użycie
python html_to_pdf_cont.py input.html -o output.pdf
Wszystkie opcje
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
Opcje
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
Rozwiązywanie problemów
-
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
Jak to działa
- 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.
Przykład zastosowania dla drukarek termicznych
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
Uwagi
- 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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file waproprint-0.1.0.tar.gz.
File metadata
- Download URL: waproprint-0.1.0.tar.gz
- Upload date:
- Size: 134.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.13.3 Linux/6.14.0-15-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
907b30f28fae2942299b174f78becd4d277ba88f7ffc8be3c4f48d7f4a93e58a
|
|
| MD5 |
30069905a9c8cbd6180fa33db6ebe489
|
|
| BLAKE2b-256 |
6f0618e0d0ba54f75000cbcb85cd9fbd89921943dbb7cdf2457ddbe8a10d844e
|
File details
Details for the file waproprint-0.1.0-py3-none-any.whl.
File metadata
- Download URL: waproprint-0.1.0-py3-none-any.whl
- Upload date:
- Size: 142.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.13.3 Linux/6.14.0-15-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a7da4cbd9a8568299fa0885d1bd188487b1b680d1a93483780b56ac85655798b
|
|
| MD5 |
2b2180068374957dec83a7cd58c9f68e
|
|
| BLAKE2b-256 |
3f74b35bad6d9e59f39fba17055a4de136848f32c3ebca1bf8375c125b119a5c
|