Frage

Ich bin derzeit versucht, eine Funktion zu erstellen, die mich in einem MovieClip und drucken Sie es weitergeben können.

Hier ist die vereinfachte Version der Funktion:

function printMovieClip(clip:MovieClip) {

var printJob:PrintJob = new PrintJob();
var numPages:int = 0;
var printY:int = 0;
var printHeight:Number;

if ( printJob.start() ) {

/* Resize movie clip to fit within page width */
if (clip.width > printJob.pageWidth) {
   clip.width = printJob.pageWidth;
   clip.scaleY = clip.scaleX;
}

numPages = Math.ceil(clip.height / printJob.pageHeight);

/* Add pages to print job */
for (var i:int = 0; i < numPages; i++) {
 printJob.addPage(clip, new Rectangle(0, printY, printJob.pageWidth, printJob.pageHeight));
 printY += printJob.pageHeight;
}

/* Send print job to printer */
printJob.send();

/* Delete job from memory */
printJob = null;

}

}

printMovieClip( testMC );

Leider ist dies nicht wie erwartet funktioniert das heißt über die gesamte Breite der MovieClip Druck und auf der Länge von Seitenumbrüchen zu tun.

War es hilfreich?

Lösung

Ich habe vergessen, den Druckbereich skalieren des Movieclip Größe verändert werden zu lassen. Siehe unten für die Arbeitslösung:

function printMovieClip(clip:MovieClip) {

    var printJob:PrintJob = new PrintJob();
    var numPages:int = 0;
    var printArea:Rectangle;
    var printHeight:Number;
    var printY:int = 0;

    if ( printJob.start() ) {

        /* Resize movie clip to fit within page width */
        if (clip.width > printJob.pageWidth) {
            clip.width = printJob.pageWidth;
            clip.scaleY = clip.scaleX;
        }

        /* Store reference to print area in a new variable! Will save on scaling calculations later... */
        printArea = new Rectangle(0, 0, printJob.pageWidth/clip.scaleX, printJob.pageHeight/clip.scaleY);

        numPages = Math.ceil(clip.height / printJob.pageHeight);

        /* Add pages to print job */
        for (var i:int = 0; i < numPages; i++) {
            printJob.addPage(clip, printArea);
            printArea.y += printArea.height;
        }

        /* Send print job to printer */
        printJob.send();

        /* Delete job from memory */
        printJob = null;

    }

}

printMovieClip( testMC );

Andere Tipps

Vielen Dank für Ihre Open Source Geist! Basierend auf Ihrer große Arbeit, ich es umsetzen und eine wenig Verbesserung mache mein praktisches MovieClip--Druckproblem zu lösen. Die großen Fortschritte, die ich gemacht habe ist ein Weg zur Arbeit aus Drucken eines MovieClip- mit mehreren Frames nur von einem Druckauftrag zu senden. Natürlich nahm ich mir die Frage nach der „die volle Breite der Movieclip-Druck“. Da SWF speichert Inhalte in Form von-Vektor, was Sie tun müssen, ist sich sicher, clip.height = printArea.height; clip.width = printArea.width; zu machen. Es ist eine einfache Möglichkeit:

 1//MC printing Function 
 2private function printMovieClip(clip:MovieClip):void
 3{
 4    var printJob:PrintJob=new PrintJob();
 5    var printArea:Rectangle;
 6    if (!printJob.start())
 7      return;
 8    //The page you choose to print ,"selectPages" is a mx:combox object i used to support printing one frame of MC
 9    var printPage:int=selectPages.selectedItem.data;
10    if (printPage == 0) //print all frames of the MovieClip
11      {
12        for (var i:int=1; i <= clip.totalFrames; i++)
13        {
14          clip.gotoAndStop(i);
15          /* Resize movie clip to fit within page width */
16          clip.width=printJob.pageWidth;
17          clip.scaleY=clip.scaleX;
18          /* Store reference to print area in a new variable! Will save on scaling */
19          printArea=new Rectangle(0, 0, printJob.pageWidth, printJob.pageHeight);
20          //numPages=Math.ceil(clip.height / printJob.pageHeight);
21                  /* Add pages to print job */
22          printJob.addPage(clip, printArea);
23        }
24      }
25    else //print the selected frame
26    {
         //goto the selected frame firstly
27        clip.gotoAndStop(printPage);
28        /* Resize movie clip to fit within page width */
29        clip.width=printJob.pageWidth;
30        clip.scaleY=clip.scaleX;
31        printArea=new Rectangle(0, 0, printJob.pageWidth, printJob.pageHeight);
32         /* Add pages to print job */
33        printJob.addPage(clip, printArea);
34        }
35
36        /* Send print job to printer */
37        printJob.send(); 
38         /* Delete job from memory */
39        printJob=null;
40
41    }

Wenn Sie weitere Informationen wünschen, können Sie einen Blick auf meinen Clip Bild nehmen (und da Sie ein wenig Chinesisch verstehen): es ist alles in meinem Blog . Darüber hinaus gibt es MovieClip- Thumbnails (noch Chinesisch).

Ich habe ein kleines Update, das die MovieClip- Dimensionen zurücksetzt, nachdem der Druckauftrag ausgeführt wird. Das Problem war, dass, wenn Sie etwas drucken, die größer als die Seite ist, würde der Code auch den Movieclip auf der Bühne skaliert werden. Also ich wurde behoben, dass ... nichts Besonderes, aber vielleicht nützlich sein für andere Menschen:)

Dieser Code legt auch die Tatsache, dass Ihre transparente PNG ist auch transparent sein wird, auf Druck

protected function printMovieClip(clip:MovieClip):void {

            var printJob:PrintJob = new PrintJob();
            var printJobOptions:PrintJobOptions = new PrintJobOptions();
            var numPages:int = 0;
            var printArea:Rectangle;
            var printHeight:Number;
            var printY:int = 0;
            var originalWidth:Number;
            var originalHeight:Number;

            if ( printJob.start() ) {

                originalWidth = clip.width;
                originalHeight = clip.height;

                if (clip.width > printJob.pageWidth) {
                    clip.width = printJob.pageWidth;
                    clip.scaleY = clip.scaleX;
                }

                printArea = new Rectangle(0, 0, printJob.pageWidth/clip.scaleX, printJob.pageHeight/clip.scaleY);

                numPages = Math.ceil(clip.height / printJob.pageHeight);

                for (var i:int = 0; i < numPages; i++) 
                {
                    printJobOptions.printAsBitmap = true;
                    printJob.addPage(clip, printArea, printJobOptions);
                    printArea.y += printArea.height;
                }

                /* Send print job to printer */
                printJob.send();

                /* Delete job from memory */
                printJob = null;

                /* reset the clips width and height on stage so it is back at its original size*/
                clip.width = originalWidth;
                clip.height = originalHeight;
            }

        }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top