0

印刷 API を使用して XPS ドキュメントを印刷する方法 (ライブラリまたはネイティブ) はありますか? ある程度までは動作するDocument Toolkit APIを使用してみましたが、設定しようとすると COM 例外が発生しますPrintPageEventArgs.PageVisual

4

1 に答える 1

1

これはネイティブ コードで行う必要があります。最初に 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);
    }
于 2010-09-20T15:57:20.750 に答える