// PDFCompDemo.cpp : Defines the class behaviors for the application. // #include "stdafx.h" #include "PDFCompDemo.h" #include "MainFrm.h" #include "ChildFrm.h" #include "PDFCompDemoDoc.h" #include "PDFCompDemoView.h" #include "PDFOptions.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #ifdef UNICODE #define strprintf swprintf #else #define strprintf sprintf #endif VOID PDFCompError(HWND hwnd, INT nCode, TCHAR* pTitle, TCHAR* pFilename); INT PDFCompMessageBox (HWND hWnd, TCHAR* pCaption, UINT wType, TCHAR* pFormat,...); ///////////////////////////////////////////////////////////////////////////// // CPDFCompDemoApp BEGIN_MESSAGE_MAP(CPDFCompDemoApp, CWinApp) //{{AFX_MSG_MAP(CPDFCompDemoApp) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) ON_COMMAND(ID_FILE_OPEN, OnFileOpen) //}}AFX_MSG_MAP // Standard file based document commands ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPDFCompDemoApp construction CPDFCompDemoApp::CPDFCompDemoApp() { // TODO: add construction code here, // Place all significant initialization in InitInstance m_pRasterKrnDlg = NULL; m_pRasterFileDlg = NULL; m_pRasterIO = NULL; m_pPDFComp = NULL; m_pRasterPro = NULL; } ///////////////////////////////////////////////////////////////////////////// // The one and only CPDFCompDemoApp object CPDFCompDemoApp theApp; ///////////////////////////////////////////////////////////////////////////// // CPDFCompDemoApp initialization BOOL CPDFCompDemoApp::InitInstance() { AfxEnableControlContainer(); // Standard initialization // If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need. #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif CoInitialize(0); // Change the registry key under which our settings are stored. // TODO: You should modify this string to be something appropriate // such as the name of your company or organization. SetRegistryKey(_T("Local AppWizard-Generated Applications")); LoadStdProfileSettings(); // Load standard INI file options (including MRU) // Register the application's document templates. Document templates // serve as the connection between documents, frame windows and views. CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_PDFCOMTYPE, RUNTIME_CLASS(CPDFCompDemoDoc), RUNTIME_CLASS(CChildFrame), // custom MDI child frame RUNTIME_CLASS(CPDFCompDemoView)); AddDocTemplate(pDocTemplate); // create main MDI Frame window CMainFrame* pMainFrame = new CMainFrame; if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) return FALSE; m_pMainWnd = pMainFrame; // Parse command line for standard shell commands, DDE, file open CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); //Do not create document at startup if (CCommandLineInfo::FileNew == cmdInfo.m_nShellCommand) cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing; // Dispatch commands specified on the command line if (!ProcessShellCommand(cmdInfo)) return FALSE; // The main window has been initialized, so show and update it. pMainFrame->ShowWindow(m_nCmdShow); pMainFrame->UpdateWindow(); HRESULT hr = CoCreateInstance(CLSID_LEADRasterDlgKrn, NULL, CLSCTX_ALL, IID_ILEADRasterDlgKrn, (void**)&m_pRasterKrnDlg); if (FAILED(hr)) return FALSE; m_pRasterKrnDlg->InitDlg(INIT_WITH_COLOR); m_pRasterKrnDlg->EnableMethodErrors = FALSE; hr = CoCreateInstance(CLSID_LEADRasterDlgFile, NULL, CLSCTX_ALL, IID_ILEADRasterDlgFile, (void**)&m_pRasterFileDlg); if (FAILED(hr)) return FALSE; m_pRasterFileDlg->EnableMethodErrors = FALSE; hr = CoCreateInstance(CLSID_LEADRasterIO, NULL, CLSCTX_ALL, IID_ILEADRasterIO, (void**)&m_pRasterIO); if (FAILED(hr)) return FALSE; m_pRasterIO->EnableMethodErrors = FALSE; hr = CoCreateInstance(CLSID_LEADRaster, NULL, CLSCTX_ALL, IID_ILEADRaster, (void**)&m_pRaster); if (FAILED(hr)) return FALSE; // Unlock support UNLOCKSUPPORT(*m_pRaster); m_pRaster->EnableMethodErrors = FALSE; hr = CoCreateInstance(CLSID_LEADPDFCompressor, NULL, CLSCTX_ALL, IID_ILEADPDFCompressor, (void**)&m_pPDFComp); if (FAILED(hr)) return FALSE; m_pPDFComp->EnableMethodErrors = FALSE; hr = CoCreateInstance(CLSID_LEADRasterProcess, NULL, CLSCTX_ALL, IID_ILEADRasterProcess, (void**)&m_pRasterPro); if (FAILED(hr)) return FALSE; m_pRasterPro->EnableMethodErrors = FALSE; m_PDFXResolution = 150; m_PDFYResolution = 150; m_bShowFDFOptionsDlg = TRUE; return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) // No message handlers //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() // App command to run the dialog void CPDFCompDemoApp::OnAppAbout() { CAboutDlg aboutDlg; aboutDlg.DoModal(); } ///////////////////////////////////////////////////////////////////////////// // CPDFCompDemoApp message handlers int CPDFCompDemoApp::ExitInstance() { if (m_pRasterKrnDlg) m_pRasterKrnDlg->Release(); if (m_pRasterFileDlg) m_pRasterFileDlg->Release(); if (m_pRasterIO) m_pRasterIO->Release(); if (m_pRaster) m_pRaster->Release(); if (m_pRasterPro) m_pRasterPro->Release(); if (m_pPDFComp) m_pPDFComp->Release(); CoUninitialize(); return CWinApp::ExitInstance(); } void CPDFCompDemoApp::OnFileOpen() { BOOL bContinue=FALSE; int nRet; m_pRasterIO->PDFXResolution = m_PDFXResolution; m_pRasterIO->PDFYResolution = m_PDFYResolution; m_pRasterFileDlg->PutFilter(""); m_pRasterFileDlg->PutFileDlgFlags(0); m_pRasterFileDlg->PutFileName(""); m_pRasterFileDlg->PutDialogTitle("Open File"); if(m_bShowFDFOptionsDlg == TRUE) { m_pRasterFileDlg->PutUIFlags(OPEN_SHOW_MULTIPAGE | OPEN_SHOW_PREVIEW | OPEN_USEFILESTAMP | OPEN_SHOW_FILEINFO | OPEN_SHOW_LOADOPTIONS ); } else { m_pRasterFileDlg->PutUIFlags(OPEN_SHOW_MULTIPAGE | OPEN_SHOW_PREVIEW | OPEN_USEFILESTAMP | OPEN_SHOW_FILEINFO | OPEN_SHOW_PDFOPTIONS | OPEN_SHOW_LOADOPTIONS ); } nRet = m_pRasterFileDlg->ShowOpenDlg((long)m_pMainWnd->m_hWnd); if (nRet == 0 && m_pRasterFileDlg->GetDialogStatus() == DLG_OK) { m_pRasterIO->GetFileInfo(NULL, m_pRasterFileDlg->GetFileName(), 0, 0); if(m_bShowFDFOptionsDlg == TRUE && m_pRasterIO->InfoFormat == FILE_RAS_PDF) { PDFDPIOptions DPIOptions; DPIOptions.m_edtPDFXRes = m_pRasterFileDlg->PDFXResolution; DPIOptions.m_edtPDFYRes = m_pRasterFileDlg->PDFYResolution; nRet = DPIOptions.DoModal(); if(nRet != 2) { m_PDFXResolution = DPIOptions.m_edtPDFXRes ; m_PDFYResolution = DPIOptions.m_edtPDFXRes ; m_bShowFDFOptionsDlg = FALSE; } } else { m_PDFXResolution = m_pRasterFileDlg->PDFXResolution; m_PDFYResolution = m_pRasterFileDlg->PDFYResolution; } m_pRasterIO->PDFXResolution = m_PDFXResolution; m_pRasterIO->PDFYResolution = m_PDFYResolution; m_nPageNum = (short)m_pRasterFileDlg->GetPageNumber(); POSITION pos = GetFirstDocTemplatePosition(); CDocTemplate* pDocTemplate = GetNextDocTemplate(pos); pDocTemplate->OpenDocumentFile(m_pRasterFileDlg->GetFileName()); } else if( nRet != 0) { PDFCompError(NULL,nRet,TEXT("Add File"), TEXT("")); } } void CPDFCompDemoApp::CreateNewChild() { CWinApp::OnFileNew(); } void CPDFCompDemoApp::SetPageOrder(INT nPageNumebr,BOOL bRepeated, BOOL bDel, INT nSwappedPgNo) { CPDFCompDemoDoc * pDocument; CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd; CMDIChildWnd *pChild = (CMDIChildWnd *) pFrame->GetActiveFrame(); POSITION pos = GetFirstDocTemplatePosition(); while (pos) { CDocTemplate* pTemplate = (CDocTemplate*)GetNextDocTemplate(pos); POSITION pos2 = pTemplate->GetFirstDocPosition(); while (pos2) { if ((pDocument=(CPDFCompDemoDoc*)pTemplate->GetNextDoc(pos2)) != NULL) { if(bDel) { if(pDocument->m_PDFCompSettings.nPageNumber > nPageNumebr) pDocument->m_PDFCompSettings.nPageNumber--; } else { if(-1 == nSwappedPgNo) { if(bRepeated && pDocument->m_PDFCompSettings.nPageNumber >= nPageNumebr) { pDocument->m_PDFCompSettings.nPageNumber++; } } else { if(bRepeated && pDocument->m_PDFCompSettings.nPageNumber == nPageNumebr) { pDocument->m_PDFCompSettings.nPageNumber = nSwappedPgNo; } } } } } } //Update all views pChild = (CMDIChildWnd *) pFrame->GetActiveFrame(); while (pChild) { pChild->Invalidate(); pChild = (CMDIChildWnd*) pChild->GetWindow(GW_HWNDNEXT); } } INT CPDFCompDemoApp::CountAllOpenedDoccuments() { INT i=0; CPDFCompDemoDoc * pDocument; POSITION pos = GetFirstDocTemplatePosition(); while (pos) { CDocTemplate* pTemplate = (CDocTemplate*)GetNextDocTemplate(pos); POSITION pos2 = pTemplate->GetFirstDocPosition(); while (pos2) { if ((pDocument=(CPDFCompDemoDoc*)pTemplate->GetNextDoc(pos2)) != NULL) { i++; } } } return i; } VOID PDFCompError(HWND hwnd, INT nCode, TCHAR* pTitle, TCHAR* pFilename) { TCHAR ErrorBuf[1024]; switch (nCode) { case ERROR_NO_MEMORY: strprintf (ErrorBuf, TEXT("Not enough memory available!")); break; case ERROR_NO_BITMAP: strprintf (ErrorBuf, TEXT("Invalid bitmap handle!")); break; case ERROR_MEMORY_TOO_LOW: strprintf (ErrorBuf, TEXT("Not enough memory available!")); break; case ERROR_FILE_LSEEK: strprintf (ErrorBuf, TEXT("Error seeking to position!")); break; case ERROR_FILE_WRITE: strprintf (ErrorBuf, TEXT("Error writing file!")); break; case ERROR_FILE_GONE: strprintf (ErrorBuf, TEXT("File not present - abort!")); break; case ERROR_FILE_READ: strprintf (ErrorBuf, TEXT("Error reading file!")); break; case ERROR_INV_FILENAME: strprintf (ErrorBuf, TEXT("Invalid filename specified!")); break; case ERROR_FILE_FORMAT: strprintf (ErrorBuf, TEXT("Invalid file format!")); break; case ERROR_FILENOTFOUND: strprintf (ErrorBuf, TEXT("File not found!")); break; case ERROR_INV_RANGE: strprintf (ErrorBuf, TEXT("Invalid width/height!")); break; case ERROR_IMAGE_TYPE: strprintf (ErrorBuf, TEXT("Image format recognized, but sub-type not supported!")); break; case ERROR_INV_PARAMETER: strprintf (ErrorBuf, TEXT("Invalid parameter!")); break; case ERROR_FILE_OPEN: strprintf (ErrorBuf, TEXT("Not able to open file!")); break; case ERROR_UNKNOWN_COMP: strprintf (ErrorBuf, TEXT("Unknown compression format!")); break; case ERROR_FEATURE_NOT_SUPPORTED: strprintf (ErrorBuf, TEXT("Feature not supported!")); break; case ERROR_NOT_256_COLOR: strprintf (ErrorBuf, TEXT("VGA card only supports 256 colors (8 bit)!")); break; case ERROR_PRINTER: strprintf (ErrorBuf, TEXT("Printer error!")); break; case ERROR_CRC_CHECK: strprintf (ErrorBuf, TEXT("Data CRC check error!")); break; case ERROR_QFACTOR: strprintf (ErrorBuf, TEXT("Invalid QFactor specified!")); break; case ERROR_TARGAINSTALL: strprintf (ErrorBuf, TEXT("TARGA not installed!")); break; case ERROR_OUTPUTTYPE: strprintf (ErrorBuf, TEXT("Invalid compression format!")); break; case ERROR_XORIGIN: strprintf (ErrorBuf, TEXT("X origin specified invalid!")); break; case ERROR_YORIGIN: strprintf (ErrorBuf, TEXT("Y origin specified invalid!")); break; case ERROR_VIDEOTYPE: strprintf (ErrorBuf, TEXT("Invalid video mode!")); break; case ERROR_BITPERPIXEL: strprintf (ErrorBuf, TEXT("Invalid bits/pixel!")); break; case ERROR_WINDOWSIZE: strprintf (ErrorBuf, TEXT("Invalid window size!")); break; case ERROR_NORMAL_ABORT: strprintf (ErrorBuf, TEXT("Escape key pressed!")); break; case ERROR_NO_STAMP: strprintf (ErrorBuf, TEXT("Stamp not found!")); break; case ERROR_G3CODE_INVALID: strprintf (ErrorBuf, TEXT("Invalid group 3 data!")); break; case ERROR_G3CODE_EOF: case ERROR_G3CODE_EOL: strprintf (ErrorBuf, TEXT("Group3 code end of code!")); break; case ERROR_PREMATURE_EOF: strprintf (ErrorBuf, TEXT("Premature EOF at scanline!")); break; case ERROR_PREMATURE_EOL: case ERROR_UNCOMP_EOF: case ERROR_ACT_INCOMP: case ERROR_BAD_DECODE_STATE: strprintf (ErrorBuf, TEXT("Premature end-of-line code!")); break; case ERROR_VERSION_NUMBER: strprintf (ErrorBuf, TEXT("Bad version number!")); break; case ERROR_TWAIN_NODSM: strprintf (ErrorBuf, TEXT("Source manager not found!")); break; case ERROR_TWAIN_BUMMER: strprintf (ErrorBuf, TEXT("Failure due to unknown causes!")); break; case ERROR_TWAIN_LOWMEMORY: strprintf (ErrorBuf, TEXT("Not enough memory to perform operation!")); break; case ERROR_TWAIN_NODS: strprintf (ErrorBuf, TEXT("No Data Source!")); break; case ERROR_TWAIN_MAXCONNECTIONS: strprintf (ErrorBuf, TEXT("DS is connected to max possible apps!")); break; case ERROR_TWAIN_OPERATIONERROR: strprintf (ErrorBuf, TEXT("DS or DSM reported error, app shouldn't!")); break; case ERROR_TWAIN_BADCAP: strprintf (ErrorBuf, TEXT("Unknown capability!")); break; case ERROR_TWAIN_BADPROTOCOL: strprintf (ErrorBuf, TEXT("Unrecognized MSG DG DAT combination!")); break; case ERROR_TWAIN_BADVALUE: strprintf (ErrorBuf, TEXT("Data parameter out of range!")); break; case ERROR_TWAIN_SEQERROR: strprintf (ErrorBuf, TEXT("DG DAT MSG out of expected sequence!")); break; case ERROR_TWAIN_BADDEST: strprintf (ErrorBuf, TEXT("Unknown destination App/Src in DSM_Entry!")); break; case ERROR_NOT_ENOUGH_IMAGES: strprintf (ErrorBuf, TEXT("Not enough images to complete the process!")); break; case ERROR_IMAGE_EMPTY: strprintf (ErrorBuf, TEXT("Image is empty!")); break; case ERROR_NO_CHANGE: strprintf (ErrorBuf, TEXT("The image hasn't changed!")); break; case ERROR_LZW_LOCKED: strprintf (ErrorBuf, TEXT("LZW capability is required to load/save this file!")); break; case ERROR_DOCUMENT_NOT_ENABLED: strprintf (ErrorBuf, TEXT("Express capability is required to use this function!")); break; case ERROR_MEDICAL_NOT_ENABLED: strprintf (ErrorBuf, TEXT("Medical Express capability is required to use this function!")); break; case ERROR_JBIG_NOT_ENABLED: strprintf (ErrorBuf, TEXT("JBIG capability is required to use this function!")); break; case ERROR_FPX_FILE_IN_USE: strprintf (ErrorBuf, TEXT("Error accessing file. The file is probably already open!")); break; case ERROR_USER_ABORT: case DLG_CANCEL: return; break; default: if(nCode >= ERROR_FPX_INVALID_FORMAT_ERROR && nCode <= ERROR_FPX_INVALID_TILE) strprintf (ErrorBuf, TEXT("Internal FlashPix error!")); else strprintf (ErrorBuf, TEXT("Internal or Unrecognized Error!")); break; } PDFCompMessageBox (hwnd, pTitle, MB_ICONEXCLAMATION | MB_OK, TEXT("%s\nLEADTOOLS DLL Error (%d)\n%s"), pFilename, nCode, ErrorBuf); return; } INT PDFCompMessageBox (HWND hWnd, TCHAR* pCaption, UINT wType, TCHAR* pFormat,...) { TCHAR szText[256]; va_list ap; va_start (ap, pFormat); wvsprintf (szText, pFormat, ap); va_end (ap); return (MessageBox (hWnd, szText, pCaption, wType)); }