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

前端技术 2023/09/09 C#

本文实例讲述了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#程序设计有所帮助。

本文地址:https://www.stayed.cn/item/25729

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。