13 Stimmen

Gibt es eine Möglichkeit, beim Starten eines Prozesses einen Drucker für PrintTo anzugeben?

Was ich habe

Ich schreibe gerade ein Programm, das eine bestimmte Datei einliest und dann eine Aktion damit ausführt. Aktuell öffnet es diese entweder und/oder hängt sie an eine E-Mail an, um sie an angegebene Adressen zu senden.

Die Datei kann entweder im Format Excel, Excel Report, Word oder PDF vorliegen.

Was ich gerade mache, ist, dass ich einen Prozess mit dem Dateipfad starte und dann den Prozess starte; allerdings versuche ich auch, ein Bug Feature zu beheben, das ich hinzugefügt habe, welches je nach Einstellung das Verb "PrintTo" zu den Startinformationen hinzufügt.

Was ich brauche

Die Aufgabe, die ich erreichen möchte, besteht darin, dass ich das Dokument öffnen und es dann selbstständig an einen im Programm selbst benannten Drucker drucken möchte. Anschließend sollte die Datei automatisch geschlossen werden.

Wenn es keine generische Möglichkeit gibt, dies zu tun, könnten wir vielleicht eine Möglichkeit finden, dies für jeden einzelnen Dateityp zu tun.

Was du brauchst

Hier ist der Code, den ich benutze:

ProcessStartInfo pStartInfo = new ProcessStartInfo();
pStartInfo.FileName = FilePath;

// Festlegen, ob nur geöffnet oder gedruckt werden soll
if (Print)
{
    if (PrinterName != null)
    {
       // TODO: Standarddrucker hinzufügen.
    }

    pStartInfo.Verb = "PrintTo";
}

// Öffne die Berichtsdatei, es sei denn, sie soll nur per E-Mail gesendet werden.
if ((!Email && !Print) || Print)
{
    Process p = Process.Start(pStartInfo);
}

Wie ich es angehe...

Immer noch ratlos... könnte es vielleicht so wie Microsoft sagen, 'Das war so geplant'.

26voto

dataCore Punkte 1460

Das Folgende funktioniert für mich (getestet mit *.doc und *.docx Dateien)

Der Windows-Druckdialog wird durch die Verwendung von "System.Windows.Forms.PrintDialog" angezeigt und für "System.Diagnostics.ProcessStartInfo" nehme ich einfach den ausgewählten Drucker :)

Ersetzen Sie einfach den DATEINAMEN durch den vollständigen Namen (Pfad+Name) Ihrer Office-Datei. Ich glaube, das wird auch mit anderen Dateien funktionieren...

// Senden Sie es an den ausgewählten Drucker
using (PrintDialog printDialog1 = new PrintDialog())
{
    if (printDialog1.ShowDialog() == DialogResult.OK)
    {
        System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo(**DATEINAME**);
        info.Arguments = "\"" + printDialog1.PrinterSettings.PrinterName + "\"";
        info.CreateNoWindow = true;
        info.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        info.UseShellExecute = true;
        info.Verb = "PrintTo";
        System.Diagnostics.Process.Start(info);
    }
}

4voto

Rowland Shaw Punkte 37027

Theoretisch sollte man laut einem Artikel auf MSDN in der Lage sein, den Code in etwa folgendermaßen zu ändern (nicht getestet):

// Bestimme, ob nur geöffnet oder gedruckt werden soll
if (Drucken)
{
    if (Druckername != null)
    {
        pStartInfo.Arguments = "\"" + Druckername + "\"";
    }

    pStartInfo.CreateNoWindow = true;
    pStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    pStartInfo.UseShellExecute = true;
    pStartInfo.WorkingDirectory = sDokumentenpfad;

    pStartInfo.Verb = "PrintTo";
}

1voto

Tom Punkte 11

Von Rowland Shaw erhalten

               ProcessStartInfo startInfo = new ProcessStartInfo(Url)
                {
                    Verb = "PrintTo",
                    FileName = FilePath,
                    CreateNoWindow = true,
                    WindowStyle = ProcessWindowStyle.Hidden,
                    UseShellExecute = true,
                    Arguments = "\"" + PrinterName+ "\"",
                };
                Process.Start(startInfo);

Der FilePath sieht so aus: 'D:\EECSystem\AttachedFilesUS\53976793.pdf'

Der PrinterName ist der Name Ihres Druckers

Kopieren Sie den Code, er wird funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X