Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 09-05-2005, 20:16   #1 (permalink)
flashworker
 
Benutzerbild von brose
 
Registriert seit: Jun 2003
Beiträge: 199
PrintJob funzt net

Hallo,

ich habe ein ****** Problem mit dem PrintJob. Vielleicht kann mir hier jemand weiterhelfen. Vielen Dank im voraus.

Also ich zeichne in einem mc ein Rechteck. Nun will ich dieses Rechteck ausdrucken. Dafür hole ich mit die Seitengröße und die größe des Rechtecks und berechne damit die Anzahl der Seiten die man drucken muß um alles darzustellen.
Das funktioniert auch alles wunderschön. Wenn das Rechteck aber eine Größe überschreitet werden die ersten Seiten ordentlich gedruckt und dann druckt er nichts mehr.

Brauch das ganze um ne Struktur mit Lienien und Text auszudrucken, die über mehrere Seiten geht. In Flash zeigt er das ganze richtig an, aber er druckt halt lange Linien nicht oder nicht ganz.

hier noch der code:
ActionScript:
  1. var uebergang:Number        = 20;
  2.     var von_x:Number;
  3.     var bis_x:Number;
  4.     var von_y:Number;
  5.     var bis_y:Number;
  6.    
  7.    
  8.     // mit 2517 gehts noch, mit 2518 nicht mehr
  9.     //var   h:Number       =     2517;
  10.     var h:Number             =   2518;
  11.     var b:Number   =    200;
  12.    
  13.    
  14.     var drucker:PrintJob     = new PrintJob();
  15.     var drucker_erfolg = drucker.start();
  16.        
  17.     _root.createEmptyMovieClip("hintergrund", 3);
  18.     _root.hintergrund.beginFill(0x333333);
  19.     _root.hintergrund.moveTo(0, 0);
  20.     _root.hintergrund.lineTo(0, h);
  21.     _root.hintergrund.lineTo(b, h);
  22.     _root.hintergrund.lineTo(b, 0);
  23.     _root.hintergrund.lineTo(0, 0);
  24.     _root.hintergrund.endFill();
  25.     _root.hintergrund.lineStyle(5, 0xff0000, 100);
  26.     _root.hintergrund.moveTo(0, h);
  27.     _root.hintergrund.lineTo(b + 100, h);
  28.    
  29.     for (var g in drucker) {
  30.         trace(g add " merkmal " add drucker[g]);
  31.     }
  32.  
  33.     var page_max    =  Math.ceil ((h / (drucker.pageHeight  - uebergang)) - (uebergang / (drucker.pageHeight - uebergang)));
  34.     var page_max2    =   Math.ceil ((b / (drucker.pageWidth - uebergang)) - (uebergang / (drucker.pageWidth - uebergang)));
  35.  
  36.     trace ("Anzahl der Seiten = " add page_max * page_max2);
  37.     trace("Höhe für PrintJob = " add h add "   Seitenanzahl Senkrecht = " add page_max);
  38.     trace("Breite für PrintJob = " addadd "   Seitenanzahl Wagerecht = " add page_max2);
  39.    
  40.     if (drucker_erfolg) {
  41.         for (var j:Number = 0; j<page_max2; j++) {
  42.             von_x = j * (drucker.pageWidth - uebergang);
  43.             bis_x = (j + 1) * (drucker.pageWidth - uebergang) + uebergang;
  44.             if (bis_x > b) {
  45.                 bis_x = b;
  46.             }
  47.             trace("von = " add von_x add "  bis = " add bis_x);
  48.             for (var i:Number=0; i < page_max; i++)
  49.             {
  50.                 von_y = i * (drucker.pageHeight - uebergang);
  51.                 bis_y = (i + 1) * (drucker.pageHeight - uebergang) + uebergang;
  52.                
  53.                 if (bis_y > h) {
  54.                     bis_y = h;
  55.                 }
  56.                 trace("von = " add von_y add "  bis = " add bis_y);
  57.                 drucker.addPage(_root, {xMin:von_x,xMax:bis_x, yMin:von_y, yMax:bis_y}, {printAsBitmap:true}, 0);
  58.             }
  59.         }
  60.     }
  61.     drucker.send();
  62.     delete drucker;
  63.     stop();
brose ist offline   Mit Zitat antworten
Alt 09-05-2005, 23:54   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
also ich probiere da jetzt nichts aus (vermutlich ist da die bühne zu ende)
und flash ist kein ersatz für einen plottertreiber.

erstelle alles auf eine seite (eventuell verkleinert). der drucktreiber verteilt das schon selbst auf mehrere seiten, wenn entsprechend skaliert wird.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 10-05-2005, 09:01   #3 (permalink)
flashworker
 
Benutzerbild von brose
 
Registriert seit: Jun 2003
Beiträge: 199
danke erstma hgseib für die Antwort.

Aber das mit der Bühnengröße kann nicht sein. Wenn das Rechteck schmaler ist, wird es auch länger gedruckt. Zudem zeichne ich, wie du ja bestimmt gesehen hast eine Linie am Ende, die richtig gedruckt wird.

Zitat:
der drucktreiber verteilt das schon selbst auf mehrere seiten, wenn entsprechend skaliert wird.
Wie meinst du das??? Mit der PrintJob Klasse kann ich nur einzelne Seiten mit addPage drucken und nicht ganze mcs die dann automatisch voll dargestellt werden. Dann hätte ich mir die ganze Seitenberechnung ja geklemmt. Oder gibs da noch ne andere Möglichkeit die ich nicht blicke?!

Hab hier nochmal meine fla angehängt. http://www.flashforum.de/forum/attac...hmentid=&stc=1

Geändert von brose (24-10-2007 um 13:05 Uhr)
brose ist offline   Mit Zitat antworten
Alt 10-05-2005, 13:13   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
grafik z.b. 500% verkleinert zeichnen
und im druckdialog 500% vergrössert ausgeben.

ansonsten vielleicht die grafik in ein mc generieren, das hinter einer maske steht. und zum addpagen das mc hinter der maske positionieren?


"..Hab hier nochmal meine fla angehängt.."
und ich hab immer noch keine zeit um hierfür was zu testen ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 11-05-2005, 13:55   #5 (permalink)
flashworker
 
Benutzerbild von brose
 
Registriert seit: Jun 2003
Beiträge: 199
Danke für die Antwort.
Hab beides mal ausprobiert, aber es funktioniert einfach nicht. Flash hat definitiv Probleme eine Linie über mehr als 3-4 Seiten(etwa 3000Pixel) zu drucken, auch wenn Sie am Bildschirm richtig dargestellt werden. Wenn die Linie aber in 2 Schritten gezeichnet wird hat er damit kein Problem.
Also so:
ActionScript:
  1. h = 4000;
  2. //so gehts nicht
  3. _root.gehtNet.lineStyle(5, 0xff0000, 100);
  4. _root.gehtNet.moveTo(0, 0);
  5. _root.gehtNet.lineTo(0, h);
  6.  
  7. //so druckt er es
  8. _root.gehtNet.lineStyle(5, 0xff0000, 100);
  9. _root.geht.moveTo(0, 0);
  10. _root.geht.moveTo(0, h/2);
  11. _root.gehtNet.lineTo(0, h);

Leichte Lösung, aber bis man erstma dahintersteigt . Man sucht erstma an allen Möglichen Stellen und denkt ja nicht daran, das Flash das nicht kann. Aber naja, ich danke dir trotzdem.
brose ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

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



Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele