📄 cgi_getpdffileinfo.c
字号:
/***********************************************************************************
Function Name:CGI_GetPDFFileInfo()
Description :获取pdf数据信息
Input :无
Output :无
Return :成功返回0 失败返回1
Other :
***********************************************************************************/
ULONG CGI_GetPDFFileInfo(char* ucPdfPathName,ST_PDFHEADERINFO * pstpdfinfo)
{
FILE* hPDFFile = NULL;
long pdfOffset = 0;
long pdfTotalDictorys = 0;
char temp[20];
size_t ntitle = 0;
int ulPages;
char buffer[513];
/*检查参数的合法性*/
if ( NULL == ucPdfPathName )
{
CGI_ASSERT("the input parameter is invalid!");
return IPPBX_FAILED;
}
if(NULL == (hPDFFile = fopen(ucPdfPathName, "r")))
{
CGI_ASSERT("open PDF file[%s] failed while get PDF information!",ucPdfPathName);
return IPPBX_FAILED;
}
/*移动文件指针到文件末尾以读取目录偏移量*/
fseek(hPDFFile, -20, SEEK_END);
/*NOTES:不必检查fread的参数合法性,此时已经读取到文件的末尾了*/
fread(buffer, sizeof(buffer), sizeof(char), hPDFFile);
sscanf(buffer, "%s\n%ld", temp, &pdfOffset);
/*检查目录偏移量是否合法*/
if(0 == pdfOffset)
{
CGI_ASSERT("read PDF file[%s] failed while get PDF information!",ucPdfPathName);
fclose(hPDFFile);
return IPPBX_FAILED;
}
/*5是xref的长度*/
fseek(hPDFFile, (pdfOffset + 5), SEEK_SET);
memset(buffer, 0x0, sizeof(buffer));
fgets(buffer, sizeof(buffer), hPDFFile);
/*获取目录个数,1个PDF文件至少应该有8个目录*/
sscanf(buffer, "0 %lu", &pdfTotalDictorys);
if(pdfTotalDictorys < 8)
{
CGI_ASSERT("read PDF file[%s] failed while get PDF information!",ucPdfPathName);
fclose(hPDFFile);
return IPPBX_FAILED;
}
/*保存pdf页数*/
ulPages = (pdfTotalDictorys - 1) / 4;
/*获取Info部分的偏移*/
fseek(hPDFFile, 40, SEEK_CUR);/*40是和固定值*/
memset(buffer, 0x0, sizeof(buffer));
fgets(buffer, sizeof(buffer), hPDFFile);
sscanf(buffer, "%ld", &pdfOffset);
/*检查目录偏移量是否合法*/
if(0 == pdfOffset)
{
CGI_ASSERT("read PDF file[%s] failed while get PDF information!",ucPdfPathName);
fclose(hPDFFile);
return IPPBX_FAILED;
}
/*移动文件指针到Info节*/
fseek(hPDFFile, pdfOffset + 9, SEEK_SET); /*9是2 0 obj的长度*/
/*读取subject*/
memset(buffer, 0x0, sizeof(buffer));
fgets(buffer, sizeof(buffer), hPDFFile);
/* printf("\r\nPages=%ld,pdf info= %s !",ulPages,buffer); */
pstpdfinfo->pages=ulPages;
strcpy(pstpdfinfo->Info,buffer);
fclose(hPDFFile);
return IPPBX_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -