/[projects]/dao/DelphiScanner/LabelPrint.pas
ViewVC logotype

Diff of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2705 by torben, Fri Sep 4 12:39:33 2015 UTC revision 3095 by torben, Sun Aug 21 20:51:45 2016 UTC
# Line 4  interface Line 4  interface
4    
5  uses  uses
6    ParentForm,    ParentForm,
7    PakkeshopLabels,    LabelData,
8    Configuration,    Configuration,
9    StBarc;    StBarc;
10    
# Line 16  type Line 16  type
16    
17      procedure CheckPrintQue(tjektype : string; PrinterNavn : String);      procedure CheckPrintQue(tjektype : string; PrinterNavn : String);
18    
19        procedure PrintLabel( Stregkode : String);
20    
21      procedure SendTilPrinter(kontrolKoreliste, RuteNummer, Kommentar, BoghandlerNavn, Koreliste, SmsKode, DBKbane, Leveringssted : String; var PrintNyLabel : Boolean; BoghandlerNummer : string = '');      procedure SendTilPrinter(kontrolKoreliste, RuteNummer, Kommentar, BoghandlerNavn, Koreliste, SmsKode, DBKbane, Leveringssted : String; var PrintNyLabel : Boolean; BoghandlerNummer : string = '');
22    
23      procedure PrintPakkeshopLabel( PakkeshopLabel : TPakkeshopLabel);      procedure PrintSimpelLabel( LabelData : TLabelData) ;
24    
25        procedure PrintFuldPakkeLabel( PakkeshopLabel : TLabelData);
26        procedure PrintFuldPakkeLabelLille( PakkeshopLabel : TLabelData);
27        procedure PrintFuldPakkeLabelStor( PakkeshopLabel : TLabelData);
28    
29    
30      procedure PrintDaodirekteLabel( RuteNummer, Kommentar, BoghandlerNavn : String) ;      procedure PrintDaodirekteLabel( RuteNummer, Kommentar, BoghandlerNavn : String) ;
31    
32        procedure PrintZPL( ZplData : string);
33    
34      function GetPrinterCount() : Integer;      function GetPrinterCount() : Integer;
35    
36    private    private
# Line 44  uses Line 53  uses
53    WinSpool,    WinSpool,
54    Windows,    Windows,
55    SysUtils, //Format    SysUtils, //Format
56    Math, // DegToRad() bruges i PrintPakkeshopLabel    Math, // DegToRad() bruges i PrinTLabelData
57    Forms    Forms,
58      IdHTTP,
59      Graphics,
60      XMLDoc
61    ;    ;
62    
63    
# Line 107  begin Line 119  begin
119    with Printer do    with Printer do
120        begin        begin
121          BeginDoc;          BeginDoc;
122    
123          Canvas.Font.Size := Config.FontSizeRute;          Canvas.Font.Size := Config.FontSizeRute;
124          if (Length(RuteNummer) > 7) then          if (Length(RuteNummer) > 7) then
125          begin          begin
# Line 128  begin Line 141  begin
141          Canvas.TextOut(Config.XPosBoghandler, Config.YPosBoghandler, BoghandlerNavn);          Canvas.TextOut(Config.XPosBoghandler, Config.YPosBoghandler, BoghandlerNavn);
142          EndDoc;          EndDoc;
143        end;        end;
144    
145    
146    
147      Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
148    
149  end;  end;
150    
151    
# Line 219  begin Line 237  begin
237          ClosePrinter(hPrinter);          ClosePrinter(hPrinter);
238      end;      end;
239    end;    end;
240    
241    
242      Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
243    
244  end;  end;
245    
246    
247    procedure TLabelPrint.PrintLabel( Stregkode : String);
248    var
249      url: String;
250      response: String;
251    
252      httpClient: TIdHTTP;
253    
254      XMLDocument1: TXMLDocument;
255    
256      LabelData: TLabelData;
257    
258    
259    begin
260    
261      url := Format(Config.URLPrintLabel, [Stregkode] );
262    
263      httpClient := TIdHTTP.Create();
264      httpClient.ReadTimeout := 1000;//max 1 secound
265      httpClient.ConnectTimeout := 1000;
266    
267      response := httpClient.Get(url);
268      httpClient.Free();
269    
270    
271      XMLDocument1 := parentForm.GetXMLDocument();
272    
273      XMLDocument1.LoadFromXML(response);
274    
275      LabelData := TLabelData.Create(XMLDocument1);
276    
277      if LabelData.LabelType = 'zpl' then
278      begin
279        PrintZPL(LabelData.ZPL);
280      end
281      else if (LabelData.LabelType = 'simpel') then
282      begin
283        PrintSimpelLabel(LabelData);
284      end
285      else
286      begin
287        PrintFuldPakkeLabel(LabelData);
288      end;
289    
290    
291    
292    
293    
294    
295    
296    end;
297    
298  procedure TLabelPrint.SendTilPrinter(kontrolKoreliste, RuteNummer, Kommentar, BoghandlerNavn, Koreliste, SmsKode, DBKbane, Leveringssted : String; var PrintNyLabel : Boolean; BoghandlerNummer : string = '');  procedure TLabelPrint.SendTilPrinter(kontrolKoreliste, RuteNummer, Kommentar, BoghandlerNavn, Koreliste, SmsKode, DBKbane, Leveringssted : String; var PrintNyLabel : Boolean; BoghandlerNummer : string = '');
299  begin  begin
300      with Printer do      with Printer do
# Line 262  begin Line 335  begin
335    
336        EndDoc;        EndDoc;
337      end;      end;
338    
339    
340        Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
341    
342  end;  end;
343    
344    
345    procedure TLabelPrint.PrintFuldPakkeLabel( PakkeshopLabel : TLabelData);
346    begin
347      if (Config.LabelStor = 1) then
348      begin
349        PrintFuldPakkeLabelStor(  PakkeshopLabel );
350    
351      end
352      else
353      begin
354        PrintFuldPakkeLabelLille(  PakkeshopLabel );
355    
356      end;
357    
358    end;
359    
360  // ToDo: PrintPakkeshopLabel()  // Bruges til label der passer til 60x100
361  procedure TLabelPrint.PrintPakkeshopLabel( PakkeshopLabel : TPakkeshopLabel);  procedure TLabelPrint.PrintFuldPakkeLabelLille( PakkeshopLabel : TLabelData);
362  var  var
363    XForm, XFormOld: TXForm; //Bruges til rotate X-formation    XForm, XFormOld: TXForm; //Bruges til rotate X-formation
364    Angle: integer;    Angle: integer;
# Line 291  begin Line 382  begin
382    
383    
384        Canvas.Font.Size := 9;        Canvas.Font.Size := 9;
385        Canvas.TextOut(110, 240, 'Pakkeshop:');  
386        Canvas.TextOut(110, 270, PakkeshopLabel.PakkeshopNavn);  
387        Canvas.TextOut(110, 300, PakkeshopLabel.PakkeshopAddr);        // Skriv ikke 'Pakkeshop' overskrift hvis det er en shop2direkte
388        Canvas.TextOut(110, 330, PakkeshopLabel.PakkeshopPostnr);        if (  PakkeshopLabel.PakkeshopNavn <> ''  ) then
389          begin
390            Canvas.TextOut(110, 240, 'Pakkeshop:');
391            Canvas.TextOut(110, 270, PakkeshopLabel.PakkeshopNavn);
392            Canvas.TextOut(110, 300, PakkeshopLabel.PakkeshopAddr);
393            Canvas.TextOut(110, 330, PakkeshopLabel.PakkeshopPostnr);
394    
395          end;
396    
397    
398    
399        Canvas.TextOut(350, 240, 'Afsender:');        Canvas.TextOut(350, 240, 'Afsender:');
400        Canvas.TextOut(350, 270, PakkeshopLabel.AfsenderNavn);        Canvas.TextOut(350, 270, PakkeshopLabel.AfsenderNavn);
# Line 376  begin Line 476  begin
476      end;      end;
477    
478    
479      Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
480    
481  end;  end;
482    
483    
484    // Bruges til label der passer til 100x150
485    procedure TLabelPrint.PrintFuldPakkeLabelStor( PakkeshopLabel : TLabelData);
486    var
487      XForm, XFormOld: TXForm; //Bruges til rotate X-formation
488      Angle: integer;
489      gMode: integer;
490      Dirigering: string;
491      BarcodeRect : TRect;
492    
493    begin
494        with Printer do
495        begin
496          BeginDoc();
497    
498    
499    
500          Canvas.Font.Style := [TFontStyle.fsBold];
501          Canvas.Font.Size := 16;
502          Canvas.TextOut(25,25, 'Code: ' + PakkeshopLabel.Tjekkode + '           '  + PakkeshopLabel.Overskrift);
503    
504    
505    
506          Canvas.TextOut(80, 220, PakkeshopLabel.Navn );
507          Canvas.TextOut(80, 270, PakkeshopLabel.Vejnavn );
508          Canvas.TextOut(80, 320, PakkeshopLabel.Postnr );
509    
510    
511          Canvas.Font.Size := 9;
512    
513    
514          // Skriv ikke 'Pakkeshop' overskrift hvis det er en shop2direkte
515          if (  PakkeshopLabel.PakkeshopNavn <> ''  ) then
516          begin
517            Canvas.TextOut(170, 460, 'Pakkeshop:');
518            Canvas.TextOut(170, 490, PakkeshopLabel.PakkeshopNavn);
519            Canvas.TextOut(170, 520, PakkeshopLabel.PakkeshopAddr);
520            Canvas.TextOut(170, 550, PakkeshopLabel.PakkeshopPostnr);
521    
522          end;
523    
524    
525    
526          Canvas.TextOut(550, 460, 'Afsender:');
527          Canvas.TextOut(550, 490, PakkeshopLabel.AfsenderNavn);
528          Canvas.TextOut(550, 520, PakkeshopLabel.AfsenderAdresse);
529          Canvas.TextOut(550, 550, PakkeshopLabel.AfsenderPostnr);
530    
531          Dirigering := PakkeshopLabel.PakkeshopSted + ' | ' + PakkeshopLabel.PakkeshopTurid + ' | ' + PakkeshopLabel.PakkeshopNr;
532          if ( PakkeshopLabel.Koreliste <> '') then
533          begin
534            Dirigering := Dirigering + ' > ' + PakkeshopLabel.Koreliste;
535          end;
536    
537    
538          Canvas.Font.Size := 12;
539          Canvas.TextOut(40, 680, Dirigering);
540    
541    
542    
543    
544    
545          //Tegn adskillelses linier
546          Canvas.Pen.Width := 2;
547          //Øverste linie
548          Canvas.MoveTo( 40, 180);
549          Canvas.LineTo(900, 180);
550    
551          // Midterste linie
552          Canvas.MoveTo( 40, 440);
553          Canvas.LineTo(900, 440);
554    
555          //Nederste linie
556          Canvas.MoveTo( 40, 640);
557          Canvas.LineTo(900, 640);
558    
559    
560          //Tegn skrå streger over afsender
561          Canvas.Pen.Width := 1;
562          Canvas.MoveTo(840, 450);
563          Canvas.LineTo(540, 590);
564          Canvas.MoveTo(840, 590);
565          Canvas.LineTo(540, 450);
566    
567    
568    
569          // Resten af rutinen vedr genering og placering af Barcode
570    
571          Barcode.Font.Size := 9;
572          Barcode.BarToSpaceRatio := 0.9;
573    
574    
575          BarCode.BarCodeType := bcCode128;
576          BarCode.Code128Subset := csCodeC;
577          BarCode.Code := PakkeshopLabel.Stregkode;
578          BarCode.Validate(True);
579    
580    
581    //      parentForm.Msg(       inttostr(            Barcode.Font.Size) );//Default 8
582    //      parentForm.Msg(       Double.ToString(      Barcode.BarNarrowToWideRatio) );//Default 2
583    //      parentForm.Msg(       Double.ToString(      Barcode.BarToSpaceRatio) );//Default 1
584    //      parentForm.Msg(  Double.ToString(BarCode.Width ) );//default 200
585    
586    
587          //Start X-formation
588          //ShowMessage( Format('%d %d', [PageWidth, PageHeight]) );
589          GetWorldTransform(Canvas.Handle, XFormOld);
590    
591          Angle := 270;
592          XForm.eM11 := Cos(DegToRad(Angle));
593          XForm.eM12 := Sin(DegToRad(Angle));
594          XForm.eM21 := -Sin(DegToRad(Angle));
595          XForm.eM22 := Cos(DegToRad(Angle));
596          XForm.eDx := 0;
597          XForm.eDy := 0;
598    
599          gMode := SetGraphicsMode(Canvas.Handle, GM_ADVANCED);
600          SetWorldTransform(Canvas.Handle, XForm);
601    
602          // PaintToCanvasSize arbejder i Inches
603          // Første pos argument bliver nu Y og skal være negativ for at rykke den ned
604          //Anden pos er X og skal være positiv for at justere ind fra venstre mod højre
605    
606          BarCode.PaintToCanvasSize(Printer.Canvas, -2.7, 4.8, 0.5);
607    
608    
609    
610    
611          SetWorldTransform(Canvas.Handle, XFormOld);
612          SetGraphicsMode(Canvas.Handle, gMode);
613    
614          EndDoc();
615        end;
616    
617    
618      Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
619    end;
620    
621  function TLabelPrint.SavePChar(p: PChar): PChar;  function TLabelPrint.SavePChar(p: PChar): PChar;
622  const  const
623    error: PChar = 'Nil';    error: PChar = 'Nil';
# Line 389  begin Line 628  begin
628      Result := p;      Result := p;
629  end;  end;
630    
631    // Online zpl viewer
632    
633    
634    procedure TLabelPrint.PrintZPL( ZplData : string);
635    var
636      ADevice, ADeviceName, ADevicePort: array[0..255]of Char;
637      PrinterHandle: THandle;
638      DocInfo: TDocInfo1;
639      dwJob: cardinal;
640      dwBytesWritten: cardinal;
641      AUtf8: UTF8string;
642      ADeviceMode: THandle;
643    
644    begin
645    
646    
647      Printer.GetPrinter(ADevice, ADeviceName, ADevicePort, ADeviceMode);
648    
649        if not OpenPrinter(ADevice, PrinterHandle, nil) then
650        begin
651          Exit;
652          parentForm.Msg('error on openprinter');
653        end;
654    
655         //Fill in the structure with info about this "document"
656      DocInfo.pDocName := PChar('Spooler Document Name');
657      DocInfo.pOutputFile := nil;
658      DocInfo.pDatatype := 'RAW';
659    
660       //Inform the spooler the document is beginning
661      dwJob := StartDocPrinter(PrinterHandle, 1, @DocInfo);
662      if dwJob = 0 then
663      begin
664        ClosePrinter(PrinterHandle);
665        PrinterHandle := 0;
666        Exit;
667      end;
668    
669      //Start a page
670      if not StartPagePrinter(PrinterHandle) then
671      begin
672        EndDocPrinter(PrinterHandle);
673        ClosePrinter(PrinterHandle);
674        PrinterHandle := 0;
675        Exit;
676      end;
677    
678      //your zebra code...
679      AUtf8 := UTF8string(ZplData);
680      WritePrinter(PrinterHandle, @AUtf8[1], Length(AUtf8), dwBytesWritten);
681    
682      //End the page
683      if not EndPagePrinter(PrinterHandle) then
684      begin
685        EndDocPrinter(PrinterHandle);
686        ClosePrinter(PrinterHandle);
687        PrinterHandle := 0;
688        Exit;
689      end;
690    
691      //Inform the spooler that the document is ending
692      if not EndDocPrinter(PrinterHandle) then
693      begin
694        ClosePrinter(PrinterHandle);
695        PrinterHandle := 0;
696        Exit;
697      end;
698    
699      //Tidy up the printer handle
700      ClosePrinter(PrinterHandle);
701      PrinterHandle := 0;
702    
703    end;
704    
705    procedure TLabelPrint.PrintSimpelLabel( LabelData : TLabelData) ;
706    begin
707      with Printer do
708          begin
709            BeginDoc;
710    
711            Canvas.Font.Size := Config.FontSizeRute;
712            if (Length(LabelData.SimpelLinie1) > 7) then
713            begin
714              Canvas.Font.Size := Config.FontSizeRuteLille;
715            end;
716            Canvas.TextOut(Config.XPosRute, Config.YPosRute, LabelData.SimpelLinie1);
717            Canvas.Font.Size := Config.FontSizeKommentar;
718            LabelData.SimpelLinie2 := StringReplace(LabelData.SimpelLinie2, #$A, ' - ', [rfReplaceAll, rfIgnoreCase]);
719            if (LabelData.SimpelLinie2 = 'Ok') or (LabelData.SimpelLinie2 = 'ALLEREDE SCANNET') then
720            begin
721              LabelData.SimpelLinie2 := '';
722            end;
723            if (LabelData.SimpelLinie3 = 'PAKKE ER SCANNET') then
724            begin
725              LabelData.SimpelLinie3 := '';
726            end;
727            Canvas.TextOut(Config.XPosKommentar, Config.YPosKommentar, LabelData.SimpelLinie2);
728            Canvas.Font.Size := Config.FontSizeBoghandler;
729            Canvas.TextOut(Config.XPosBoghandler, Config.YPosBoghandler, LabelData.SimpelLinie3);
730            EndDoc;
731          end;
732    
733    
734    
735      Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
736    
737    end;
738    
739    
740    
741  function TLabelPrint.GetPrinterCount() : Integer;  function TLabelPrint.GetPrinterCount() : Integer;
742  begin  begin

Legend:
Removed from v.2705  
changed lines
  Added in v.3095

  ViewVC Help
Powered by ViewVC 1.1.20