软件编程
位置:首页>> 软件编程>> C#编程>> C#获取指定PDF文件页数的方法

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

作者:work24  发布时间:2021-10-10 17:15:43 

标签: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#程序设计有所帮助。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com