代码之家  ›  专栏  ›  技术社区  ›  David

Silverlight:以编程方式打印XPS

  •  0
  • David  · 技术社区  · 15 年前

    是否有任何方法(库或本机)可以使用打印API打印XPS文档?我试着用 Document Toolkit API 这在某种程度上是可行的,但是当我试图设置 PrintPageEventArgs.PageVisual .

    1 回复  |  直到 15 年前
        1
  •  1
  •   Tony Edgecombe    14 年前

    这应该在本机代码中完成,不要忘记首先启用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);
        }
    
    推荐文章