C#获取PDF文件的页数
使用方法:GetPDFPageCount(string path)//path参数是pdf文件的路径
/////////////////////////晴穹//////////////////////////////
1
使用方法:GetPDFPageCount(string path)//path参数是pdf文件的路径2

/**//////////////////////////晴穹//////////////////////////////3
4

获取pdf文件的页数#region 获取pdf文件的页数5
private int BytesLastIndexOf(Byte[] buffer, int length, string Search)6

{7
if (buffer == null)8
return -1;9
if (buffer.Length <= 0)10
return -1;11
byte[] SearchBytes = Encoding.Default.GetBytes(Search.ToUpper());12
for (int i = length - SearchBytes.Length; i >= 0; i--)13

{14
bool bFound = true;15
for (int j = 0; j < SearchBytes.Length; j++)16

{17
if (ByteUpper(buffer[i + j]) != SearchBytes[j])18

{19
bFound = false;20
break;21
}22
}23
if (bFound)24
return i;25
}26
return -1;27
}28
private byte ByteUpper(byte byteValue)29

{30
char charValue = Convert.ToChar(byteValue);31
if (charValue < 'a' || charValue > 'z')32
return byteValue;33
else34
return Convert.ToByte(byteValue - 32);35
}36

/**//// <summary>37
/// 获取pdf文件的页数38
/// </summary>39
///40
public int GetPDFPageCount(string path) //获取pdf文件的页数41

{42
byte[] buffer = File.ReadAllBytes(path);43
int length = buffer.Length;44
if (buffer == null)45
return -1;46
if (buffer.Length <= 0)47
return -1;48
try49

{50
//Sample51
// 29 0 obj52
// <</Count 953
// Type /Pages54
int i = 0;55
int nPos = BytesLastIndexOf(buffer, length, "/Type/Pages");56
if (nPos == -1)57
return -1;58
string pageCount = null;59
for (i = nPos; i < length - 10; i++)60

{61
if (buffer[i] == '/' && buffer[i + 1] == 'C' && buffer[i + 2] == 'o' && buffer[i + 3] == 'u' && buffer[i + 4] == 'n' && buffer[i + 5] == 't')62

{63
int j = i + 3;64
while (buffer[j] != '/' && buffer[j] != '>')65
j++;66
pageCount = Encoding.Default.GetString(buffer, i, j - i);67
break;68
}69
}70
if (pageCount == null)71
return -1;72
int n = pageCount.IndexOf("Count");73
if (n > 0)74

{75
pageCount = pageCount.Substring(n + 5).Trim();76
for (i = pageCount.Length - 1; i >= 0; i--)77

{78
if (pageCount[i] >= '0' && pageCount[i] <= '9')79

{80
return int.Parse(pageCount.Substring(0, i + 1));81
}82
}83
}84
return -1;85
}86
catch (Exception ex)87

{88
return -1;89
}90
}91
#endregion

浙公网安备 33010602011771号