Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważne
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 dotyczący projektowania aplikacji obsługującej druk .
Usługa rasteryzacji XPS implementuje obiekty rasteryzatora XPS, które konwertują stałe strony w dokumentach XPS na mapy bitowe. Ta usługa upraszcza projektowanie filtru XPSDrv, który renderuje dokument XPS jako serię obrazów map bitowych. Filtr może przekazać obiektowi rasteryzatora XPS polecenie utworzenia obrazu mapy bitowej równoległego do osi, prostokątnego obszaru na niezmiennej stronie.
Na przykład filtr XPSDrv dla drukarki może wymagać wysłania stałej strony do drukarki jako serii pasków poziomych lub pionowych. W takim przypadku filtr informuje obiekt rasteryzatora XPS, aby zrasteryzować każde pasmo jako oddzielną mapę bitową. Alternatywnie, jeśli drukarka ma wystarczającą ilość pamięci, filtr może poinformować rasterizator o utworzeniu obrazu mapy bitowej całej strony.
Usługa rasteryzacji XPS jest implementowana w systemie plików Xpsrasterservice.dll. Jednak filtry XPSDrv nie uzyskują bezpośredniego dostępu do punktów wejścia w tej dll. Zamiast tego filtr uzyskuje dostęp do interfejsów usługi rasteryzacji XPS za pośrednictwem pakietu właściwości potoku drukowania, który filtr otrzymuje od menedżera potoku filtrów drukowania.
Aby filtr XPSDrv był dostępny do użycia, usługa rasteryzacji XPS musi być określona w pliku konfiguracji potoku filtrów, który opisuje filtry w potoku filtrów wydruku. W szczególności plik konfiguracji musi zawierać element FilterServiceProvider z atrybutem dll ustawionym na nazwę biblioteki DLL usługi, jak pokazano w poniższym przykładzie XML:
<FilterServiceProvider dll = "XpsRasterService.dll" />
Element FilterServiceProvider jest elementem podrzędnym elementu Filtry, który zawiera listę filtrów w przepływie. Podczas inicjowania potoku menedżer potoku filtru wydruku ładuje usługę rasteryzacji XPS i sprawia, że usługa jest dostępna dla filtru za pośrednictwem pakietu właściwości. Dla przykładu pliku konfiguracji potoku filtru, który ładuje usługę rasteryzacji XPS, należy zapoznać się z przykładem XpsRasFilter w pakiecie WDK. Ten przykład znajduje się w folderze Src\Print\Xpsrasfilter w instalacji zestawu WDK.
Uzyskiwanie fabryki rasteryzacji XPS
Przed rasteryzacją dokumentu XPS, filtr XPSDrv musi pobrać odwołanie do obiektu fabryki odpowiedzialnej za rasteryzację z kolekcji właściwości potoku drukowania. Następnie filtr uzyskuje nowy obiekt rasteryzatora XPS z fabryki dla każdej stałej strony, która musi być renderowana.
Aby zainicjować filtr XPSDrv, menedżer potoku filtru wydruku wywołuje metodę filtru IPrintPipelineFilter::InitializeFilter i przekazuje interfejs IPrintPipelinePropertyBag do tej metody jako parametr wejściowy.
Aby uzyskać wskaźnik do obiektu fabryki rasteryzacji XPS, filtr XPSDrv wywołuje metodę IPrintPipelinePropertyBag::GetProperty. Nazwa właściwości "MS_IXpsRasterizationFactory" identyfikuje obiekt fabryki rasteryzacji. Dla tej właściwości wartość uzyskana z getProperty jest odwołaniem do interfejsu IUnknown obiektu fabryki rasteryzacji. Po uzyskaniu tego interfejsu filtr musi wywołać metodę IUnknown::QueryInterface , aby uzyskać odwołanie do interfejsu IXpsRasterizationFactory obiektu. Następnie filtr może wywołać metodę IXpsRasterizationFactory::CreateRasterizer w celu utworzenia obiektów rasterizatora XPS.
Gdy obiekt fabryki nie jest już potrzebny, filtr powinien zwolnić obiekt, wywołując metodę Release w interfejsie IXpsRasterizationFactory obiektu.
Poniższy przykład kodu pokazuje, jak uzyskać wystąpienie interfejsu IXpsRasterizationFactory z wystąpienia interfejsu IPrintPipelinePropertyBag :
//
// Retrieve a reference to the XPS rasterization factory
// from the print pipeline property bag.
//
HRESULT CreateRasterizationFactory(
IPrintPipelinePropertyBag *pPropertyBag,
IXpsRasterizationFactory **ppXPSRasFactory)
{
if (ppXPSRasFactory != NULL)
{
*ppXPSRasFactory = NULL;
}
if (pPropertyBag == NULL || ppXPSRasFactory == NULL)
{
return E_POINTER;
}
HRESULT hr;
VARIANT var;
IXpsRasterizationFactory *pXPSRasFactory;
//
// Retrieve the factory object from the property bag.
//
VariantInit(&var);
hr = pPropertyBag->GetProperty(L"MS_IXpsRasterizationFactory",
&var);
if (SUCCEEDED(hr))
{
assert(var.vt == VT_UNKNOWN && var.punkVal != NULL);
//
// Get the factory object's IXpsRasterizationFactory interface.
//
IUnknown *pUnknown = var.punkVal;
hr = pUnknown->QueryInterface(__uuidof(IXpsRasterizationFactory),
reinterpret_cast<void**>(&pXPSRasFactory));
}
if (SUCCEEDED(hr))
{
//
// Give the caller our reference to the IXpsRasterizationFactory interface.
//
*ppXPSRasFactory = pXPSRasFactory;
}
VariantClear(&var);
return hr;
}
Tworzenie modelu obiektów XPS stałej strony
Po utworzeniu fabryki rasteryzacji XPS, filtr XPSDrv może używać tej fabryki do tworzenia obiektów rasteryzatora XPS. Obiekt rasterizatora XPS ma interfejs IXpsRasterizer . Każdy obiekt rasteryzatora XPS jest przeznaczony dla konkretnej stałej strony dokumentu XPS. Aby utworzyć obiekt rasteryzatora XPS, mechanizm wymaga modelu obiektów XPS (OM) strony statycznej. OM XPS (dla stałej strony) jest w obiekcie, który ma interfejs IXpsOMPage. Obiekt rasteryzatora XPS używa tego interfejsu do uzyskiwania dostępu do zawartości stałej strony. Aby uzyskać więcej informacji na temat interfejsu IXpsOMPage , zobacz dokumentację zestawu Windows SDK.
Filtr XPSDrv wykonuje następujące kroki, aby utworzyć obiekt rasterizatora XPS:
Filtr odczytuje stały obiekt strony z interfejsem IFixedPage ze strumienia wejściowego.
Filtr tworzy obiekt OM XPS z interfejsem IXpsOMPage do przechowywania zawartości stałej strony. Rasterizator XPS będzie później używać tego interfejsu do uzyskiwania dostępu do zawartości stałej strony.
Aby utworzyć obiekt rasteryzatora XPS, filtr przekazuje interfejs IXpsOMPage obiektu XPS do metody IXpsRasterizationFactory::CreateRasterizer fabryki rasteryzacji XPS.
Gdy obiekt rasteryzatora XPS nie jest już potrzebny, filtr powinien zwolnić obiekt, wywołując metodę Release w interfejsie IXpsRasterizer obiektu. Aby zapoznać się z przykładową implementacją filtru XPSDrv korzystającego z usługi rasteryzacji XPS, zobacz przykładowy sterownik XpsRasFilter w zestawie WDK.
Do użytku z usługą rasteryzacji XPS można zagnieżdżać kanwy i pędzle wizualne na stałej stronie do limitu 64 poziomów. Aby uzyskać więcej informacji na temat kanwy i pędzli wizualnych, pobierz specyfikację papieru XML.
Rozdzielczość mapy bitowej i format pikseli
Obiekt rasteryzatora XPS dla stałej strony musi znać rozdzielczość, w której strona zostanie renderowana. Filtr XPSDrv określa tę rozdzielczość w kropkach na cal (DPI) jako parametr wejściowy w wywołaniu IXpsRasterizationFactory::CreateRasterizer , który tworzy obiekt rasterizatora XPS. Jeśli na przykład urządzenie wyświetlane ma rozdzielczość 600 DPI, a stała strona opisuje standardową stronę o rozmiarze litery, obraz mapy bitowej całej strony ma następujące wymiary:
width = (8,5 cala)x(600 DPI) = 5100 kropek
height = (11 cali) x (600 DPI) = 6600 punktów
Aby utworzyć obraz bitmapowy prostokątnego regionu na stałej stronie, filtr XPSDrv wywołuje metodę RasterizeRect obiektu rasteryzatora XPS. Ta metoda zawsze tworzy mapę bitową o rozmiarze pikseli 32 bitów. Format pikseli jest określany przez wartość identyfikatora GUID GUID_WICPixelFormat32bppPBGRA, która jest zdefiniowana w pliku nagłówkowym Wincodec.h. Format zawiera 8-bitowe czerwone, zielone i niebieskie składniki oraz używa standardowej przestrzeni kolorów (sRGB). Ponadto format zawiera składnik alfa 8-bitowy. Składniki kolorów w każdej wartości pikseli są przemnożone przez składnik alfa. Aby uzyskać więcej informacji na temat tego formatu, zobacz Native Pixel Formats Overview (Omówienie natywnych formatów pikseli).
Niektóre filtry XPSDrv mogą wykonywać dodatkowe przetwarzanie mapy bitowej generowanej przez obiekt rasterizatora XPS. Na przykład filtr do drukarki kolorowej może przekonwertować mapę bitową na format pikseli CMYK przed opakowaniem mapy bitowej w języku opisu strony drukarki i wysłaniem jej do drukarki.
Aby uzyskać więcej informacji na temat interfejsów używanych przez usługę rasteryzacji XPS do komunikowania się z filtrami XPSDrv, zobacz dokumentację DDI nagłówka xpsrassvc.h .
XPSRas i formaty pikseli o wysokiej precyzji
W systemie Windows 8 usługa rasteryzacji XPS uwidacznia nowy interfejs IXpsRasterizationFactory1, który jest nową wersją IXpsRasterizationFactory. IXpsRasterizationFactory1 uwidacznia nową metodę IXpsRasterizationFactory1::CreateRasterizer, która jest identyczna z wersją systemu Windows 7 (IXpsRasterizationFactory::CreateRasterizer), z tą różnicą, że przyjmuje jeden nowy parametr dla formatu pikseli wyjściowych.
Ta funkcja uwidacznia nowy typ wyliczeniowy XPSRAS_PIXEL_FORMAT, który umożliwia wywołującemu wybranie formatu pikseli używanego przez interfejs IWICBitmap zwracany przez metodę IXpsRasterizer::RasterizeRect.
XPSRas i procesor GPU
Jeśli masz komputer z systemem Windows 8 ze sterownikiem wyświetlacza WDDM 1.2, a wszystkie warunki pokazane w drzewie decyzyjnym użycia procesora GPU XPSRas zostały spełnione, przyspieszanie sprzętowe procesora GPU jest zawsze używane. Oznacza to, że jako deweloper nie trzeba wykonywać żadnych kroków, aby korzystać z ulepszeń wydajności oferowanych przez procesor GPU. Jednak w celu dalszej optymalizacji wydajności grafiki systemu należy rozważyć wykonanie następujących czynności:
Wywołaj metodę RasterizeRect ze spójnymi wymiarami prostokąta. Jeśli nie jest to możliwe, optymalne jest zapewnienie RasterizeRect największego wymaganego rozmiaru prostokąta przy pierwszym wywołaniu, a następnie prosić o mniejsze rozmiary prostokątów podczas kolejnych wywołań.
Używaj antyaliasowania tylko wtedy, gdy jest to absolutnie wymagane. Aliasowany tekst i wektory wyglądają tak samo jak ich odpowiedniki anty aliasowe, gdy wartość DPI podana dla metody IXpsRasterizationFactory::CreateRasterizer jest znacznie wysoka. Na przykład wartość DPI większa niż 200DPI jest uważana za wysoką. Należy przeprowadzić testowanie, aby zapewnić, że jakość danych wyjściowych na danym urządzeniu jest wystarczająca w przypadku używania aliasowanego tekstu i wektorów wraz z wysoką rozdzielczością DPI.
Jeśli dokument można edytować przed rasteryzacją IXpsOMPage, to podzbiór czcionek i użycie słowników zasobów dla elementów powtarzanych na kilku stronach poprawi wydajność XPSRas.