0

我正在尝试拼凑一小段控制台代码,以通过 Internet Explorer 将文件夹中的一些 HTML 文件打印到默认打印机。我从http://weblogs.asp.net/israelio/archive/2004/06/23/162913.aspx找到了以下代码,这似乎几乎适合我的需求。

我做了一些改动,但我的编程技能非常有限。我正在寻找一些帮助以确保语法正确,并且有人向我展示如何通过 Internet Explorer 静默打印,而不是像我现在所相信的那样打开 Internet Explorer。

任何帮助将不胜感激...

using System
using System.IO

// How much deep to scan. (of course you can also pass it to the method)
const int HowDeepToScan=4; 

public static void ProcessDir(string sourceDir, int recursionLvl) 
{
if (recursionLvl<=HowDeepToScan)
{
// Process the list of files found in the directory. 
string [] fileEntries = Directory.GetFiles(@"C:\fileDump\", "*.html");  
foreach(string fileName in fileEntries)
{
   // do something with fileName
   System.Diagnostics.Process.Start(fileName);
}

// Recurse into subdirectories of this directory.
string [] subdirEntries = Directory.GetDirectories((@"C:\fileDump);
foreach(string subdir in subdirEntries)
   // Do not iterate through reparse points
   if ((File.GetAttributes(subdir) &
        FileAttributes.ReparsePoint) !=
            FileAttributes.ReparsePoint)

        ProcessDir(subdir,recursionLvl+1);
}
}
4

2 回答 2

1

我有一个类似(但不同)的问题要解决,我使用的代码可能会对您有所帮助。

我的问题的背景

创建一个程序,用于打开文件(在本例中为 .MHTML 文件)实际上会用 IE 打开它,立即打印页面并关闭 IE

代码

 public partial class MainWindow : Window
    {
        const int PRINT_WAITFORCOMPLETION = 2;
        public MainWindow()
        {
            InitializeComponent();

            if (Application.Current.Properties["ArgFileName"] != null)
            {
                string fname = Application.Current.Properties["ArgFileName"].ToString();
                if (String.IsNullOrEmpty(fname))
                {
                    fileLabel.Content = "No File Specified";
                }
                else
                {
                    fileLabel.Content = fname;
                    SHDocVw.InternetExplorer IE = new SHDocVw.InternetExplorer();
                    IE.DocumentComplete +=new SHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(IE_DocumentComplete);
                    IE.PrintTemplateTeardown += new SHDocVw.DWebBrowserEvents2_PrintTemplateTeardownEventHandler(IE_PrintTemplateTeardown);
                    IE.Visible = true;
                    IE.Navigate2(fname);    
                }      
            }
        }

       void IE_PrintTemplateTeardown(object pDisp)
        {
            if (pDisp is SHDocVw.InternetExplorer)
            {
                SHDocVw.InternetExplorer IE = (SHDocVw.InternetExplorer)pDisp;               
                IE.Quit();
                System.Environment.Exit(0);
            }
        }

       void IE_DocumentComplete(object pDisp, ref object URL)
        {
            if (pDisp is SHDocVw.InternetExplorer)
            {
                SHDocVw.InternetExplorer IE = (SHDocVw.InternetExplorer)pDisp;               
                IE.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINT, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, 2);

            }
        }
    }

笔记

一旦你把它合并到你的文件循环中,你需要改变它IE.Visible = true;IE.Visible = false;防止 IE 窗口显示。

于 2012-11-21T15:45:22.830 回答
0

这个想法是让程序成为简单的命令行程序。

我找到了一种更简单的循环文件的方法,我认为您的代码已正确添加。但是,我认为从我得到的两个错误来看,我似乎已经看多了一些东西,你有什么建议吗?

理想情况下,我希望该程序保留为单个类。

我的错误是:

'Bulk_Pdf.Main.Main(string)':静态构造函数必须是无参数的 (CS0132) - C:\Users\Ben\Desktop\bulkPrint_pdf.cs:16,18

'Bulk_Pdf.Main.Main(string)':静态构造函数上不允许访问修饰符 (CS0515) - C:\Users\Ben\Desktop\bulkPrint_pdf.cs:16,18

你有什么建议吗?

using System;
using System.IO;

namespace HTML_Print
{
class Main
{
    private static Main(string dirPath)
    {

        // Define Working Directory
        DirectoryInfo dir = new DirectoryInfo(@"C:\fileDump");

        // Define File Type
        foreach (FileInfo finfo in dir.GetFiles("*.html"))

        // Open IE Explorer and Print
        if (Application.Current.Properties["finfo"] != null)
        {
            string fname = Application.Current.Properties["finfo"].ToString();
            if (String.IsNullOrEmpty(fname))
            {
                fileLabel.Content = "No File Specified";
            }
            else
            {
                fileLabel.Content = fname;
                SHDocVw.InternetExplorer IE = new SHDocVw.InternetExplorer();
                IE.DocumentComplete +=new SHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(IE_DocumentComplete);
                IE.PrintTemplateTeardown += new SHDocVw.DWebBrowserEvents2_PrintTemplateTeardownEventHandler(IE_PrintTemplateTeardown);
                IE.Visible = true;
                IE.Navigate2(fname);    
            }      
        }
    }

   void IE_PrintTemplateTeardown(object pDisp)
    {
        if (pDisp is SHDocVw.InternetExplorer)
        {
            SHDocVw.InternetExplorer IE = (SHDocVw.InternetExplorer)pDisp;               
            IE.Quit();
            System.Environment.Exit(0);
        }
    }

   void IE_DocumentComplete(object pDisp, ref object URL)
    {
        if (pDisp is SHDocVw.InternetExplorer)
        {
            SHDocVw.InternetExplorer IE = (SHDocVw.InternetExplorer)pDisp;               
            IE.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINT, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, 2);

        }
    }
}


}
于 2012-11-22T10:43:45.323 回答