Pertanyaan AS3 menggunakan PrintJob untuk mencetak MovieClip


Saat ini saya sedang mencoba untuk membuat fungsi yang akan memungkinkan saya untuk lulus dalam MovieClip dan cetak.

Ini adalah versi sederhana dari fungsi ini:

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 );

Sayangnya ini tidak berfungsi seperti yang diharapkan yaitu mencetak lebar penuh MovieClip dan melakukan pematahan halaman untuk panjangnya.


5
2017-09-14 15:26


asal


Jawaban:


Saya lupa untuk skala area cetak untuk mencocokkan klip video yang diubah ukurannya. Lihat di bawah untuk solusi kerja:

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 );

5
2017-09-14 16:47



Terima kasih atas semangat Open-source Anda! Berdasarkan karya hebat Anda, saya menerapkannya dan membuat sedikit peningkatan untuk menyelesaikan masalah pencetakan Klip Video praktis saya. Kemajuan besar yang saya buat adalah untuk mencari cara mencetak MovieClip dengan multi-frame hanya dengan satu pengiriman mencetak. Tentu saja, saya menyelesaikan pertanyaan "mencetak lebar penuh dari Movieclip". Karena SWF menyimpan konten dalam bentuk vektorgraph, yang perlu Anda lakukan adalah memastikannya clip.height = printArea.height; clip.width = printArea.width;. Ini adalah cara mudah:

 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    }

Jika Anda ingin informasi lebih lanjut, Anda dapat melihat gambar klip saya (dan memberi Anda memahami sedikit bahasa Cina): itu semua di blog saya. Ada juga Thumbnail Kliping Video (masih Cina).


2
2017-11-17 15:12



Saya menambahkan perbaikan kecil yang me-reset dimensi MovieClip setelah printjob selesai. Masalahnya adalah ketika Anda mencetak sesuatu yang lebih besar dari halaman Anda, kode itu juga akan menskalakan movieklip di atas panggung. Jadi saya Perbaiki itu ... tidak ada yang istimewa tapi mungkin berguna untuk orang lain :)

kode ini juga memperbaiki fakta bahwa PNG transparan Anda akan JUGA transparan pada cetakan Anda

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;
            }

        }

0
2018-06-16 10:30