Silverlight: печатать XPS программно - PullRequest
0 голосов
/ 30 апреля 2010

Есть ли способ (библиотечный или собственный) использовать API печати для печати документа XPS? Я попытался использовать Document Toolkit API , который работает до определенного момента, но я получаю исключение COM, когда пытаюсь установить PrintPageEventArgs.PageVisual.

1 Ответ

1 голос
/ 20 сентября 2010

Это должно быть сделано в нативном коде, не забудьте сначала включить COM:

    SmartHandle event = ::CreateEvent(NULL, TRUE, FALSE, NULL);
    if (event.get() == 0)
    {
        ::AtlThrow(::GetLastError());
    }

    CComPtr<IXpsOMObjectFactory> pXpsFactory;
    HRESULT hr = pXpsFactory.CoCreateInstance(CLSID_XpsOMObjectFactory);
    if (FAILED(hr))
    {
        ::AtlThrow(hr);
    }

    CComPtr<IXpsPrintJobStream> pDocumentStream;
    hr = ::StartXpsPrintJob(printer, file, NULL, NULL, event.get(), NULL, NULL, NULL, &pDocumentStream, NULL);
    if (FAILED(hr))
    {
        ::AtlThrow(hr);
    }

    CComPtr<IXpsOMPackage> pXpsOMPackage;

    hr = pXpsFactory->CreatePackageFromFile(argv[2], false, &pXpsOMPackage);
    if (FAILED(hr))
    {
        ::AtlThrow(hr);
    }

    hr = pXpsOMPackage->WriteToStream(pDocumentStream, FALSE);
    if (FAILED(hr))
    {
        ::AtlThrow(hr);
    }

    pDocumentStream->Close();

    if (::WaitForSingleObject(event.get(), INFINITE) != WAIT_OBJECT_0)
    {
        ::AtlThrow(hr);
    }
...