|
MFC Scribble |
Top Previous Next |
|
The MFC Scribble sample extends the standard MFC Scribble sample with the generation of PDF files using novaPDF Printer. It demonstrates how to integrate novaPDF SDK in a document/view MFC architecture:
Source code snippets
1. Register novaPDF Printer event #define PROFILE_NAME L"MFCScribble Profile" #define PDF_FILE_NAME L"MFCScribble.pdf" #define PROFILE_IS_PUBLIC 0
// This message is sent when the PDF file is finished and saved on the harddisk const UINT wm_Nova_FileSaved = RegisterWindowMessageW( MSG_NOVAPDF2_FILESAVED ); BEGIN_MESSAGE_MAP(CScribbleView, CScrollView) //{{AFX_MSG_MAP(CScribbleView) //... //}}AFX_MSG_MAP //... ON_REGISTERED_MESSAGE(wm_Nova_FileSaved, OnNovaPDFFileSaved) END_MESSAGE_MAP()
2. Initialize INovaPDFOptions CScribbleView::CScribbleView() { //... HRESULT hr = CoInitialize(NULL); //... //create novaPDFOptions object hr = CoCreateInstance(__uuidof(NovaPdfOptions), NULL, CLSCTX_INPROC_SERVER, __uuidof(INovaPdfOptions), (LPVOID*) &m_pNova); //... //initialize novaPDFOptions object with desired printer name // if you have an application license for novaPDF SDK, // pass both the registration name and the license key to the Initialize() function // m_pNova->Initialize(L"<%SDK_SAMPLE_PRINTER%>", L"<registration name>", L"<license key>"); m_pNova->Initialize(L"<%SDK_SAMPLE_PRINTER%>", L"", L"", L""); }
3. Release INovaPDFOptions
CScribbleView::~CScribbleView() { //release novaPDFOptions object if (m_pNova){ m_pNova->Release(); } CoUninitialize(); }
4. Set novaPDF Printer Options BOOL CScribbleView::OnPreparePrinting(CPrintInfo* pInfo) { //set novaPDF default printer if (m_pNova){ m_pNova->SetDefaultPrinter();
// create a temporary profile for the current print job, // in order to not modify the default profile settings m_pNova->AddProfile(PROFILE_NAME, PROFILE_IS_PUBLIC); // set PDF document Title m_pNova->SetOptionString(NOVAPDF_INFO_TITLE, L"MFC Scribble Sample", PROFILE_NAME, PROFILE_IS_PUBLIC); // set resulting file name m_pNova->SetOptionString(NOVAPDF_SAVE_FOLDER, L"", PROFILE_NAME, PROFILE_IS_PUBLIC); m_pNova->SetOptionString(NOVAPDF_SAVE_FILE, PDF_FILE_NAME, PROFILE_NAME, PROFILE_IS_PUBLIC); //do not show prompt dialog m_pNova->SetOptionLong(NOVAPDF_SAVE_PROMPT, 0, PROFILE_NAME, PROFILE_IS_PUBLIC); //if file exists, override m_pNova->SetOptionLong(NOVAPDF_SAVE_CONFLICT_STRATEGY, FILE_CONFLICT_STRATEGY_OVERWRITE, PROFILE_NAME, PROFILE_IS_PUBLIC);
// set active profile m_pNova->GetActiveProfile(&m_wsDefaultProfile, &m_nActiveProfilePublic); m_pNova->SetActiveProfile(PROFILE_NAME, PROFILE_IS_PUBLIC);
//register window to receive messages from novaPDF printer m_pNova->RegisterEventWindow((LONG)m_hWnd); } //... }
5. Restore options when printing finished void CScribbleView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { if (m_pNova) { //unregister events m_pNova->UnRegisterEventWindow(); //restore default profile m_pNova->SetActiveProfile(m_wsDefaultProfile, &m_nActiveProfilePublic); m_pNova->DeleteProfile(PROFILE_NAME, PROFILE_IS_PUBLIC); CoTaskMemFree(m_wsDefaultProfile); //restore default printer m_pNova->RestoreDefaultPrinter(); } }
6. novaPDF Printer message handler LRESULT CScribbleView::OnNovaPDFFileSaved(WPARAM, LPARAM) { //PDF is saved, so just show a message that the conversion to PDF was successful MessageBox(L"PDF file was saved successfully", L"novaPrint"); return 0; } |