Implementowanie filtrów XPS
Ważny
Nowoczesna platforma drukowania jest preferowanym sposobem komunikacji z drukarkami w systemie Windows. Zalecamy używanie sterownika klasy skrzynki odbiorczej IPP firmy Microsoft wraz z aplikacjami do obsługi drukowania (PSA), aby dostosować środowisko drukowania w systemie Windows 10 i 11 na potrzeby opracowywania urządzeń drukarki.
Aby uzyskać więcej informacji, zobacz przewodnik projektowania aplikacji obsługujących drukowanie .
Wszystkie filtry XPS muszą implementować interfejs IPrintPipelineFilter.
Podczas wywołania metody IPrintPipelineFilter::InitializeFilter filtr powinien:
Buforuj wskaźnik do interfejsu IPrintPipelineManagerControl.
Przetwarzaj odpowiednie dane w interfejsie IPrintPipelinePropertyBag.
Wywołaj metody IInterFilterCommunicator::RequestReader i IInterFilterCommunicator::RequestWriter z interfejsu IInterfilterCommunicator (pIInterFilterCom), aby zainicjować interfejsy dostawcy i konsumenta dla filtru.
Jeśli dane zawierają sekcję PrintTicket, możesz uzyskać dostęp do danych za pośrednictwem interfejsu API Microsoft Win32 PrintTicket lub PrintCapabilities. W przypadku sterowników UniDrv i PScript5 opartych na XPSDrv filtry mogą mieć dostęp do interfejsu IPrintCoreHelper, który jest podstawową usługą konfiguracji dla sterownika Unidrv lub PScript5.
Filtry mogą również mieć dostęp do zastrzeżonych danych konfiguracji za pośrednictwem torby właściwości, w zależności od projektu sterownika.
Inter-Filter Communicator jest częścią Menadżera Potoku Filtrów, która obsługuje komunikację między filtrami w potoku filtru. Gdy Menedżer potoku filtru inicjuje filtr, interfejs Inter-Filter Communicator (IInterFilterCommunicator) jest przekazywany do filtru, aby filtr mógł uzyskać interfejsy odczytu i zapisu zdefiniowane dla tego filtru.
Microsoft dostarcza interfejsy dokumentu XPS i interfejsy strumieniowe, ale możesz utworzyć własne interfejsy międzysystemowe, które są zdefiniowane dla tego filtru. Firma Microsoft udostępnia następujące interfejsy:
Interfejs dokumentu XPS odczytuje i zapisuje z różnych części pliku buforu XPS.
Interfejs strumienia XPS odczytuje i zapisuje strumień szeregowy danych. Za pomocą tego interfejsu można napisać język opisu strony (PDL) z filtru do drukarki, która nie używa XPS jako PDL.
Filtry muszą być zgodne z regułami renderowania i regułami przetwarzania PrintTicket zdefiniowanymi w specyfikacji papieru XML (XPS).
Filtry nie mogą zależeć od środowiska uruchomieniowego microsoft .NET Common Language Runtime (CLR) ani składników środowiska uruchomieniowego Microsoft WinFX.
Filtry w pipeline nie mogą wyświetlać elementów interfejsu użytkownika.
Następujące zalecenia dotyczą filtrów:
Filtry nie powinny tworzyć oddzielnych procesów ani wątków. Jeśli wymagany jest oddzielny proces lub wątek, filtr musi prawidłowo zarządzać okresem istnienia procesu lub wątku.
Filtry powinny mieć izolowane funkcje. Wszystkie funkcje i implementacja powinny być modułowe. W miarę możliwości eliminuj wszelkie zależności kolejności i funkcjonalności między filtrami.
Filtry powinny obsługiwać sytuację, gdy są umieszczone w strumieniu niepoprawną kolejnością. Jeśli filtr nie znajduje się w oczekiwanej kolejności, nie powinien ulegać awarii i powinien umiejętnie zarządzać sytuacją. Jeśli filtr zależy od innego filtru, powinien odpowiednio obsługiwać sytuację w przypadku braku zależności.
Aby uzyskać więcej informacji na temat dodawania powiadomienia asynchronicznego do filtru, zobacz Powiadomienia asynchroniczne w filtrach wydruku.