Member 10506026 Ответов: 0

Получение данных из pdf-документа в приложении просмотра документов


Привет,

Приветствия...

У меня есть приложение для просмотра документов. View отображает pdf-документ с помощью CHTMLCtrl, который можно редактировать, и как только пользователь дает команду Сохранить данные, следующий метод вызывается для получения данных из view.
void getDataFromPDF(CHTMLCtrl &mView)
{
	HRESULT hr;
	IDispatch* pDispatchDoc = NULL;
	bool cont=true;
	int count=0;
	while(cont && count<100)
	{
		count++;
		pDispatchDoc = mView.GetHtmlDocument();
		if(pDispatchDoc != NULL)
		{
			IHTMLDocument2* pHTMLDocument2 = NULL;
			hr = pDispatchDoc->QueryInterface( IID_IHTMLDocument2, (void**)&pHTMLDocument2 );
			if(hr == S_OK)
			{
				IHTMLElementCollection* pElementCollection = NULL;
				hr = pHTMLDocument2->get_all(&pElementCollection);
				if( hr == S_OK && pElementCollection != NULL )
				{
					VARIANT varName;
					varName.vt = VT_BSTR;
					BSTR bs=T2BSTR(L"MsgRsp1");
					varName.bstrVal = bs;
					VARIANT var2;
					VariantInit(&var2);
					IDispatch* pDispatchElement = NULL;
					hr = pElementCollection->item( varName, var2, &pDispatchElement );
					if( (hr == S_OK) && (pDispatchElement) )
					{
						IHTMLInputHiddenElement* pElement = NULL;

						hr = pDispatchElement->QueryInterface( IID_IHTMLInputHiddenElement, (void**) &pElement );

						if(hr == S_OK)
						{
							BSTR bstrTXT;
							hr=pElement->get_value(&bstrTXT);
							pElement->Release();
							if(hr == S_OK)
							{
								m_strFormData= bstrTXT;
								if(wcscmp(m_strFormData,L"--"))
								{
									cont=false;
									hr=pElement->put_value((BSTR)"--");
								}
								::SysFreeString( bstrTXT );
							}
						}
						pDispatchElement->Release();
					}
					pElementCollection->Release();
				}
				
				pHTMLDocument2->Release();
			}
			
			pDispatchDoc->Release();
			if(cont) Sleep(20);
			AfxPumpMessage();
		}
	}

	TRACE("Printing\n");
	TRACE(m_strFormData);
	TRACE("\n");
}
В самом первом случае он дает правильные данные, но во время второй попытки, когда пользователь изменил форму, данные, полученные методом getData, являются старыми (независимо от того, что в первой команде).
В третий раз он снова выдает данные предыдущей попытки (вторая команда).

Я искал в интернете, чтобы решить эту проблему, но не нашел ничего подходящего.

Пожалуйста, помогите решить эту проблему.

Спасибо
Вишал

Что я уже пробовал:

http://www.tenouk.com/visualcplusmfc/visualcplusmfc35.html
http://stackoverflow.com/questions/14719345/retrieve-html-source-from-chtmlview-visual-studio-6
https://msdn.microsoft.com/en-us/library/bb250491(v=против 85). aspx
http://www.mctainsh.com/Articles/MFC/CHtmlCtrl.aspx

0 Ответов