Выбор принтера аргументов командной строки ghostscript в файле ps - PullRequest
0 голосов
/ 02 марта 2012

Я использую оболочку ac # для пакетной печати PDF-файлов без участия пользователя.Я использую ps-файл, который создается динамически c # wrapper, и я предоставляю ps-файл как аргументы запуска процесса.Причиной использования ps-файла является то, что gs не поддерживает динамическое дружественное имя спулера в качестве аргументов командной строки.Проблема в том, что gs не выбирает принтер автоматически, когда я использую файл ps.Он всегда просит выбрать принтер вручную.вот код

class Program
{
    static void Main(string[] args)
    {


        try
        {
            string path = Application.StartupPath + "\\wd.print";
            StreamReader sr = new StreamReader(path);
            string[] content = sr.ReadToEnd().Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
            sr.Close();

            string printer = content[0];

            for (int i = 1; i < content.Length; ++i)
            {
                ProcessStartInfo psInfo = new ProcessStartInfo();


                psInfo.Arguments = String.Format(" setup.ps -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies=1 -sOutputFile=\"\\\\spool\\{0}\" \"{1}\"",
                   printer,
                   content[i]);


                String spoolerName = content[i].Substring(content[i].IndexOf("$")+1);
                //creates the dynamic ps file named setup.ps
                generateSettings(spoolerName);
                string gs = Application.StartupPath + @"\gs\gswin32c.exe"; ;
                psInfo.FileName = gs;
                psInfo.UseShellExecute = false;
                Process process = Process.Start(psInfo);
                process.WaitForExit();
                Console.ReadLine();
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            Console.Write(ex.Message);
            Console.ReadLine();
        }
    }
    protected static void generateSettings(String name)
    {
        //the code which creates the dynamic ps file named setup.ps
        FileStream file=File.Create("setup.ps");
        StreamWriter writer = new StreamWriter(file);
        writer.WriteLine("mark");
        writer.WriteLine("  /NoCancel true ");
        writer.WriteLine("  /UserSettings");
        writer.WriteLine("   <<");
        writer.WriteLine("    /DocumentName (" + name + ")");//custom name for windows print spooler
        writer.WriteLine("   >>"); 
        writer.WriteLine("  (mswinpr2) finddevice");
        writer.WriteLine("  putdeviceprops");
        writer.WriteLine("setdevice");

        writer.Flush();
        writer.Close();
        file.Close();




    }
}

пожалуйста, помогите мне.Я хочу выбрать принтер автоматически, чтобы он не требовал вмешательства пользователя

1 Ответ

0 голосов
/ 06 марта 2012

Почему бы вам не создать файл .PS, а затем отправить данные на выбранный вами принтер с помощью этого механизма: Как отправить необработанные данные на принтер .Вы можете получить список принтеров, выбрать его программно, а затем отправить файл .PS на устройство.При отправке файла вы можете указать, что будет отображаться в имени диспетчера очереди / задания.

...