获取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;
}
#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;
}
相关文章推荐
- 获取原生mapreduce程序、sqoop、hive提交的jobId
- Hadoop源码解析之如何获取JobId
- PHP+MySql获取新添加记录的ID值
- 插入记录后快速高效的获取插入记录的ID值
- 获取硬盘的ID
- 获取cpu序列号,硬盘ID,网卡MAC地址
- 获取cpu序列号,硬盘ID,网卡MAC地址(转)
- JAVASCRIPT:漂浮的广告,status设置,getElementById("id")获取文件名称
- 获取硬件的ID
- ASP.NET Tips: 获取插入记录的ID
- ASP.NET Tips: 获取插入记录的ID
- 获取新增加记录的ID Access版
- wxpython获取id的方法
- 获取被拖动的对象的ID
- 获取cpu序列号,硬盘ID,网卡MAC地址
- 获取所有用户表及根据表Id取得表字段信息
- 获取CPU的ID码
- 插入记录后,获取记录的ID
- ASP获取即时ID值(自动编号)
- asp.net 获取插入记录的ID