AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Netzwerkdrucker spuckt nur leere Seiten aus

Netzwerkdrucker spuckt nur leere Seiten aus

Ein Thema von Jelen · begonnen am 22. Jan 2009 · letzter Beitrag vom 24. Jan 2009
Antwort Antwort
Jelen

Registriert seit: 5. Nov 2003
45 Beiträge
 
#1

Netzwerkdrucker spuckt nur leere Seiten aus

  Alt 22. Jan 2009, 09:31
Moin!
Die Verzweiflung ist groß genug, ein neues Thema zu beginnen.

Ein Netzwerkdrucker ignoriert die Druckaufträge meiner Anwendung:
Printer.BeginDoc ... auf Printer.Canvas zeichnen ... Printer.EndDoc
und: Nichts. Gar nichts passiert.

Wenn ich in meiner Anwendung zum 3. Mal auf Drucken klicke, bequemt sich der Drucker, ein leeres Blatt auszugeben, was er fortan bei jedem Druckauftrag macht.

Der Druckauftrag erscheint kurz in der Druckerwarteschlange (mit 5.7 MB, die angeblich auch übertragen wurden) und verschwindet viel zu schnell wieder (Kopieren einer 6 MB Datei dauert ca. 8 s, geniale 10 MBit Leitung).

Andere Programme (Word z.B.) drucken in derselben Umgebung problemlos.
Wenn ich mein Programm auf dem Rechner laufen lasse, wo der Drucker lokal angeschlossen ist (USB), funktioniert der Ausdruck!

Beide Rechner sind Win XP SP2 und verwenden denselben Druckertreiber.

Hat jemand sowas schon mal gelöst oder 'ne Idee, wo ich suchen soll?
Danke für Eure Hilfe!
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#2

Re: Netzwerkdrucker spuckt nur leere Seiten aus

  Alt 22. Jan 2009, 10:23
Wenn Word ohne Probleme drucken kann, würde ich den Fehler in deinem Code suchen.
Poste doch mal ein paar Zeilen...
  Mit Zitat antworten Zitat
Jelen

Registriert seit: 5. Nov 2003
45 Beiträge
 
#3

Re: Netzwerkdrucker spuckt nur leere Seiten aus

  Alt 22. Jan 2009, 12:08
Die Orginal-Druckroutine ist reichlich komplex.
Ich hab' sie auf ein Minimum zusammengestrichen und in eine neutrale Testanwendung gesteckt. Diese "Minimalfunktion" zeigt dasselbe Problem, der Druckauftrag steht kurz in der Warteschlange und verschwindet dann. Allerdings kommt die Leerseite jetzt auch nicht mehr immer.
Folgenden Code habe ich verwendet:
Delphi-Quellcode:
procedure TForm1.DrucktestClick(Sender: TObject);
 var p,y: integer;
     zeile: string;
 begin
  Printer.PrinterIndex := 2;
  Printer.Orientation := poPortrait;
  Printer.Copies := 1;
  Printer.Title := 'Drucktest';
  Printer.BeginDoc;
  with Printer.Canvas
  do begin
      Font.Name := 'Arial';
      Font.Size := 8;
      Font.Style := [];
      Pen.Color := clBlack;
      Font.Color := clBlack;
     end;
  p := 1; y := 0;
  while p <= 30
  do begin
      zeile := IntToStr(p)+'. Zeile';
      Printer.Canvas.TextOut(50,y,zeile);
      inc(y,200);
      inc(p);
     end;
  Printer.EndDoc;
 end;
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#4

Re: Netzwerkdrucker spuckt nur leere Seiten aus

  Alt 22. Jan 2009, 13:28
Ich hatte mal vor langer Zeit das problem, aber nur beim Druck von Grafiken. Da war eine Fehlerhaftes Ergebnis bei getmem, und ich hab das dannmit

Delphi-Quellcode:
  TRY
    GetDIB(Bitmap.Handle, Bitmap.Palette, BitmapHeader^, BitmapImage^);

    StretchDIBits(Canvas.Handle,
ersetzt.

Bei deiner Textpositioniereung solltest du auch die Startposition und die Auflösung des Druckers mit einberechnen, sonst siehts auf jedem Drucker anders aus.

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Jelen

Registriert seit: 5. Nov 2003
45 Beiträge
 
#5

Re: Netzwerkdrucker spuckt nur leere Seiten aus

  Alt 22. Jan 2009, 13:46
Das ist richtig. Im Originalprogramm ist das auch so gelöst.
Hier geht es mir nur um das Problem, das einfach gar nichts gedruckt wird und der Drucker leere Seiten auswirft.
Inzwischen hab' ich herausgefunden, das es irgendwie an der Auswahl des Druckers hängt:
  Printer.PrinterIndex := 2; Wenn ich den Netzwerkdrucker zum Standarddrucker mache, druckt meine Anwendung richtig.
(Das kann aber nicht die Lösung sein, schließlich "merkt" sich mein Programm den zuletzt benutzten Drucker - unabhängig vom Windows-Standarddrucker - und spricht ihn beim nächsten Mal automatisch wieder an.)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#6

Re: Netzwerkdrucker spuckt nur leere Seiten aus

  Alt 22. Jan 2009, 14:18
Nur mal so als Test, versuch mal Folgendes:

Delphi-Quellcode:
var
  tmpDevice, tmpDriver, tmpPort: array[0...1024] of Char;
  tmpDeviceMode: THandle;

...
Printer.PrinterIndex := 2;
Printer.GetPrinter(tmpDevice, tmpDriver, tmpPort, tmpDeviceMode);
Printer.SetPrinter(tmpDevice, tmpDriver, tmpPort, tmpDeviceMode);
...
Die Unit Printers.pas hat leider schon seit Jahren so ihre Tücken...

Uwe
Uwe Raabe
  Mit Zitat antworten Zitat
WS1976
(Gast)

n/a Beiträge
 
#7

Re: Netzwerkdrucker spuckt nur leere Seiten aus

  Alt 22. Jan 2009, 14:20
Hallo,

wie machst du das mit dem merken des Druckers?
Nimm mal Testweise den Printdialog mit rein und wähle den Drucker Testweise aus.
Ich habe das Gefühl du erwischst irgendwie einen falschen Druckertreiber.
Habt ihr, auf eurem Server, mehrere Druckertreiber parallel installiert?
Wir hatten das hier schon, dass ein Drucker für Winnt, Win2k und WinXP genutzt wurde und
dafür die entsprechenden Treiber parallel installiert wurden.
Das ist aber sicherlich eine Frage die du deinem Agmin stellen solltest.

Grüsse
Rainer (ehem. Systemadministrator)
  Mit Zitat antworten Zitat
Jelen

Registriert seit: 5. Nov 2003
45 Beiträge
 
#8

Re: Netzwerkdrucker spuckt nur leere Seiten aus

  Alt 22. Jan 2009, 15:10
@Uwe Raabe: GetPrinter/Setprinter ändert das Problem leider nicht.

@WS1976: "Merken" des Druckers: Druckername in Datei speichern, beim nächsten Ausdruck gespeicherten Druckernamen in Printer.Printers suchen und Printer.Printerindex entsprechend setzen.

Laut dem Fenster "Zusätzliche Treiber" unter den Eigenschaften des Druckers auf dem hier als Server dienenden Rechner ist nur ein Treiber für Win2K / XP installiert.

Aber: Wenn ich den PrintDialog verwende, funktioniert es!
Das hilft nur leider nicht weiter, weil ich meinen eigenen Druckdialog einsetzen möchte ...
Im Sourcecode von PrintDialog werden Varianten von GetPrinter und SetPrinter verwendet.
Ich mach' mich an die Arbeit, den entscheidenden Unterschied rauszufinden.
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#9

Re: Netzwerkdrucker spuckt nur leere Seiten aus

  Alt 22. Jan 2009, 16:14
Gibts dafür nicht auch Befehle in der API von Windows.

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Jelen

Registriert seit: 5. Nov 2003
45 Beiträge
 
#10

Re: Netzwerkdrucker spuckt nur leere Seiten aus

  Alt 24. Jan 2009, 09:25
Das Problem steckt vermutlich in den Schreibzugriffen auf Printer.PrinterIndex, die im besten Fall eine Auswahl des Standarddruckers auslösen, aber Zugriffe auf andere Drucker der Statussteuerung in TPrinter überlassen, die dann zwar einen Gerätekontext herstellt, aber keinen WIN API OpenPrinter Aufruf erzeugt (Zitat aus unit Printers):
Delphi-Quellcode:
procedure TPrinter.SetPrinterIndex(Value: Integer);
begin
  CheckPrinting(False);
  if (Value = -1) or (PrinterIndex = -1) then SetToDefaultPrinter
  else if (Value < 0) or (Value >= Printers.Count) then RaiseError(SPrinterIndexError);
  FPrinterIndex := Value;
  FreeFonts;
  SetState(psNoHandle);
end;
Ich hab' nun in meiner Anwendung alle Schreibzugriffe auf Printer.PrinterIndex durch Printer.Setprinter ersetzt:
  Printer.SetPrinter(PChar(Druckername),PChar('WINSPOOL'),PChar(''),0); wobei die Variable Druckername mit einem Eintrag aus Printer.Printers besetzt wird.
Jetzt druckt auch der vorher so faule Netzwerkdrucker!
Danke an alle, die mitgeholfen haben!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz