您的位置:首页 > 其它

获取jobid

2014-09-30 18:05 351 查看
#define SRT_EXT_EMBED_FONT    0x00000015 /* 21 an offset to embedded font identifiers   */

#endif

#endif

#endif

/*****************************************************************************

 * SPL_HEADER

 *----------------------------------------------------------------------------

 * SPL file header for EMFSPL files

 *****************************************************************************/

typedef struct tagSPLHEADER { 

    DWORD SIGNATURE; 

    DWORD nSize;            // record size INCLUDING header 

    DWORD offDocumentName;  // offset of Job Title from start 

    DWORD offPort;          // offset of portname from start

    BYTE* HeaderData; 

} SPL_HEADER, *PSPL_HEADER;

 

/*****************************************************************************

 * SMR - Base record

 *----------------------------------------------------------------------------

 * Base record type for the Spool Metafile.

 *****************************************************************************/

typedef struct tagSMR{ 

    DWORD iType; // Spool metafile record type 

    DWORD nSize; // length of the following data 

                 // NOT INCLUDING this header 

} SMR, *PSMR;

 

/*****************************************************************************

 * SMREXT - Extended record

 *----------------------------------------------------------------------------

 * Contains neg. distance to start of Data

 *****************************************************************************/

typedef struct tagSMREXT{ 

    SMR smr; 

    DWORD DistanceLow; 

    DWORD DistanceHigh;

} SMREXT, *PSMREXT;

 

/*****************************************************************************

 * SMRPRESTARTPAGE - PRESTARTPAGE

 *----------------------------------------------------------------------------

 * Written before pagedata is written to spoolfile

 * Used as a temporary "end of file" indicating following data is not

 * fully spooled yet

 *****************************************************************************/

typedef struct tagSMRPRESTARTPAGE{ 

    SMR smr; 

    DWORD Unknown1; 

    DWORD Unknown2; //0xFFFFFFFF

} SMRPRESTARTPAGE, *PSMRPRESTARTPAGE;

 

/*****************************************************************************

 * SMR_PAGE - EMF/Page data

 *----------------------------------------------------------------------------

 * EMF/Page data

 *****************************************************************************/

typedef struct tagSMRPAGE{ 

    SMR smr;   // if smr.nSize == 0, this indicates EndOfFile

    BYTE* EMFData;

} SMR_PAGE, *PSMR_PAGE;

 

/*****************************************************************************

 * SMR_DEVMODE - DEVMODE data

 *----------------------------------------------------------------------------

 * DEVMODE data

 *****************************************************************************/

typedef struct tagSMRDEVMODE{ 

    SMR smr; 

    BYTE* DEVMODEData;

} SMR_DEVMODE, *PSMR_DEVMODE;

 

/*****************************************************************************

 * SMR_FONT - FONT data

 *****************************************************************************/

typedef struct tagSMRFONT{ 

    SMR smr; 

    BYTE* FONTData;

} SMR_FONT, *PSMR_FONT;

 

/*****************************************************************************

 * SMR_EXTFONT - Extended Font Data

 *----------------------------------------------------------------------------

 * Contains neg. distance to start of

 * Font Data

 * Font data is typically embedded as

 * GDICOMMENT in the prev EMF data

 *****************************************************************************/

typedef struct tagEXTFONT{ 

    SMREXT smrext;

} SMR_EXTFONT, *PSMR_EXTFONT;

/*****************************************************************************

 * SMR_EOPAGE - End of Page

 *----------------------------------------------------------------------------

 * Contains neg. distance to

 * start of page record

 *****************************************************************************/

typedef struct tagSMREOPAGE{ 

    SMREXT smrext; 

} SMR_EOPAGE, *PSMR_EOPAGE;

bool GetMetaFileFromSpoolFile(WCHAR *SpoolFileName , int PageNbr , WCHAR *MetaFileName, void* v_pOemPDEV)

{
FM_PRINT_LOG(("GetMetaFileFromSpoolFile:%ws", SpoolFileName));

POEMPDEV
pOemPDEV = (POEMPDEV)v_pOemPDEV;
FILE* f = _wfopen( SpoolFileName, L"rb");
if ( NULL == f)
{
FM_PRINT_LOG(("cannot fopen spoolfile(%ws)<%d>",SpoolFileName,GetLastError()));
return false;
}

HANDLE hFile = (HANDLE)_get_osfhandle (_fileno (f));

    /* HANDLE   hFile = CreateFile( SpoolFileName,

             GENERIC_READ,              // open for reading 

             FILE_SHARE_READ,           // share for reading 

             NULL,                      // no security 

             OPEN_EXISTING,             // existing file only 

             FILE_ATTRIBUTE_NORMAL,     // normal file 

             NULL);                     // no attr. template */
if ( INVALID_HANDLE_VALUE == hFile)
{
FM_PRINT_LOG(("CreateFile Failed:%d", GetLastError()));
fclose(f);
return false;
}

     HANDLE hMapFile = CreateFileMapping(

             hFile,                       // handle to file

             NULL, // security

             PAGE_READONLY,                    // protection

             0,            // high-order DWORD of size

             0,             // low-order DWORD of size

             NULL                      // object name

             );
if ( INVALID_HANDLE_VALUE == hMapFile)
{
CloseHandle(hFile);
fclose(f);
return false;
}

     LPBYTE pMapFile = (LPBYTE)MapViewOfFileEx(

             hMapFile,   // handle to file-mapping object

             FILE_MAP_READ,       // access mode

             0,      // high-order DWORD of offset

             0,       // low-order DWORD of offset

             0, // number of bytes to map

             NULL         // starting address

             );
if ( NULL == pMapFile)
{
CloseHandle(hMapFile);
CloseHandle(hFile);
fclose(f);
return false;
}

     
PSPL_HEADER
pHeader = (PSPL_HEADER)pMapFile;
if ( SPLMETA_SIGNATURE != pHeader->SIGNATURE)
{
UnmapViewOfFile( pMapFile   // starting address

             );
CloseHandle(hMapFile);
CloseHandle(hFile);
fclose(f);
return false;
}

pMapFile += pHeader->nSize;
PSMR pSMR = (PSMR)pMapFile;
bool bFoundEMF = false;
for(int Nbr = 1 ; Nbr <= PageNbr ; Nbr++)
{  
while(true)
{
pSMR = (PSMR)pMapFile;
pMapFile += sizeof(SMR);
switch( pSMR->iType)
{
case SRT_METAFILE:
case SRT_FORM_METAFILE:
case SRT_BW_METAFILE:
case SRT_BW_FORM_METAFILE:
case SRT_METAFILE_DATA:
if ( Nbr == PageNbr)
{
bFoundEMF = true;
}
break;
}
if ( bFoundEMF)
break;

pMapFile += pSMR->nSize;
if (( pSMR->nSize == 8) || ( pSMR->nSize == 0))
break;
}

if  ( pSMR->nSize == 0)
break;
}

if ( bFoundEMF)
{
FM_PRINT_LOG(("==>bFoundEMF=True"));
DWORD metafilelen = pSMR->nSize;
if ( 0 == metafilelen)
{
bFoundEMF = false;
}
else
{
// #ifdef DEBUG
WCHAR wszMetaFileName[MAX_PATH];
//wsprintf( wszMetaFileName, L"c:\\print\\Meta_%d.emf"
//, PageNbr);
wsprintf( wszMetaFileName, L"%s\\%s_%d.emf", pOemPDEV->wszFileName, pOemPDEV->wszPreviewFileName, pOemPDEV->dwPageNo );
HANDLE   hMetaFile = CreateFile( wszMetaFileName,
GENERIC_READ | GENERIC_WRITE,              // open for reading 
FILE_SHARE_READ,           // share for reading 
NULL,                      // no security 
CREATE_ALWAYS,             // existing file only 
FILE_ATTRIBUTE_NORMAL,     // normal file 
NULL);                     // no attr. template 

DWORD numWritten;
WriteFile(
hMetaFile,                                       // handle to output file
pMapFile,                                   // data buffer
metafilelen,                        // number of bytes to write
&numWritten,
NULL                          // overlapped buffer
);

CloseHandle(hMetaFile);
// #endif

/*COemPDEV*
pOemPDEV=(COemPDEV*)v_pOemPDEV;
if ( IMAGE_EMF == pOemPDEV->ParamNode.byImageType)
{
SaveToLmf( pMapFile, metafilelen, v_pOemPDEV, IMAGE_EMF, 0);
}
else
{
//SaveToLmf( pMapFile, metafilelen, v_pOemPDEV, IMAGE_EMF);
if ( metafilelen > 10 * 1024 * 1024)
{//如果大于10M,返回false,改成打印图片
bFoundEMF = false;
}
else
{
if ( 2 == SaveToLmf( pMapFile, metafilelen, v_pOemPDEV, IMAGE_EMF, 1))
{
bFoundEMF = false;
}
}
}*/
}
}

     UnmapViewOfFile( pMapFile   // starting address

             );

     CloseHandle(hMapFile);

     CloseHandle(hFile);

fclose(f);

if ( bFoundEMF)
return true;
else
return false;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: