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