C#获取指定PDF文件页数的方法

本文实例讲述了C#获取指定PDF文件页数的方法。分享给大家供大家参考。具体如下:

using System;

using System.IO;

using System.Text.RegularExpressions;

using System.Windows.Forms;

namespace RobvanderWoude

{

class PDFPageCount

{

static int Main( string[] args )

{

#region Get help

if ( args.Length == 0 )

{

ShowHelp( );

return 0;

}

foreach ( string arg in args )

{

if ( arg == "/?" || arg == "-?" || arg.ToLower( ) == "--help" )

{

ShowHelp( );

return 0;

}

}

#endregion

int errors = 0;

foreach ( string arg in args )

{

try

{

Regex regexp = new Regex( @"^(.*)\\([^\\]+\.pdf)$", RegexOptions.IgnoreCase );

if ( regexp.IsMatch( arg ) )

{

// Match means the filespec has a valid format (i.e. *.pdf)

string[] matches = regexp.Split( arg );

string folder = matches[1];

string filespec = matches[2];

if ( Directory.Exists( folder ) )

{

// Folder exists, check for matching files

string[] fileList = Directory.GetFiles( folder, filespec );

if ( fileList.Length == 0 )

{

// No matching files in this folder

ShowError( "ERROR: No files matching \"{0}\" were found in \"{1}\"", filespec, folder );

errors += 1;

}

else

{

// Iterate through list of matching files

foreach ( string file in fileList )

{

int pagecount = PageCount( file );

if ( pagecount == -1 )

{

// Just increase the error count, the PageCount( )

// procedure already wrote an error message to screen

errors += 1;

}

else

{

// No pages means there is a problem with the file

if ( pagecount == 0 )

{

Console.ForegroundColor = ConsoleColor.Red;

errors += 1;

}

// Display the formated result on screen

Console.WriteLine( "{0,4} {1,-10} {2}", pagecount.ToString( ), ( pagecount == 1 ? "page" : "pages" ), file );

if ( pagecount == 0 )

{

Console.ForegroundColor = ConsoleColor.Gray;

}

}

}

}

}

else

{

// Folder doesn't exist

ShowError( "ERROR: Folder \"{0}\" not found", folder );

errors += 1;

}

}

else

{

// No match for the regular expression means the filespec was invalid

ShowError( "ERROR: Invalid filespec \"{0}\", please specify PDF files only", arg );

errors += 1;

}

}

catch ( Exception e )

{

// All other errors: display an error message and then continue

ShowError( "ERROR: {0}", e.Message );

errors += 1;

}

}

if ( errors != 0 )

{

ShowError( " {0} finished with {1} error{2}", GetExeName( ), errors.ToString( ), ( errors == 1 ? "" : "s" ) );

}

return errors;

}

static string GetExeName( )

{

string exe = Application.ExecutablePath.ToString( );

Regex regexp = new Regex( @"\\([^\\]+)$" );

return regexp.Split( exe )[1];

}

static int PageCount( string filename )

{

Regex regexp = new Regex( @"\.pdf$", RegexOptions.IgnoreCase );

if ( regexp.IsMatch( filename ) )

{

try

{

FileStream fs = new FileStream( filename, FileMode.Open, FileAccess.Read );

StreamReader sr = new StreamReader( fs );

string pdfText = sr.ReadToEnd( );

regexp = new Regex( @"/Type\s*/Page[^s]" );

MatchCollection matches = regexp.Matches( pdfText );

return matches.Count;

}

catch ( Exception e )

{

ShowError( "ERROR: {0} ({1})", e.Message, filename );

return -1;

}

}

else

{

ShowError( "ERROR: {0} is not a PDF file", filename );

return -1;

}

}

static void ShowError( string message, string param1, string param2 = "", string param3 = "" )

{

Console.Error.WriteLine( );

Console.ForegroundColor = ConsoleColor.Red;

Console.Error.WriteLine( message, param1, param2, param3 );

Console.ForegroundColor = ConsoleColor.Gray;

Console.Error.WriteLine( );

}

#region Display help text

static void ShowHelp( )

{

Console.Error.WriteLine( );

Console.Error.WriteLine( "{0}, Version 1.02", GetExeName( ) );

Console.Error.WriteLine( "Return the page count for the specified PDF file(s)" );

Console.Error.WriteLine( );

Console.Error.WriteLine( "Usage: {0} filespec [ filespec [ filespec [ ... ] ] ]", GetExeName( ).ToUpper( ) );

Console.Error.WriteLine( );

Console.Error.WriteLine( "Where: \"filespec\" is a file specification for the PDF file(s) to" );

Console.Error.WriteLine( " be listed (wildcards * and ? are allowed)" );

Console.Error.WriteLine( );

Console.Error.WriteLine( "Note: The program's return code equals the number of errors encountered." );

Console.Error.WriteLine( );

Console.Error.WriteLine( "Written by Rob van der Woude" );

}

#endregion

}

}

希望本文所述对大家的C#程序设计有所帮助。

以上是 C#获取指定PDF文件页数的方法 的全部内容, 来源链接: utcz.com/z/315297.html

回到顶部