2009-09-14 9 views
5

मैं वर्तमान में एक समारोह जो मुझे एक MovieClip में गुजरती हैं और यह प्रिंट करने देंगे बनाने के लिए कोशिश कर रहा हूँ मुद्रित करने के लिए।AS3 PrintJob का उपयोग कर एक MovieClip

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

दुर्भाग्य से इस MovieClip की पूरी चौड़ाई मुद्रण और लंबाई पर पृष्ठ विराम कर उम्मीद अर्थात के रूप में काम नहीं कर रहा:

यहाँ समारोह के सरलीकृत संस्करण है।

उत्तर

5

मैं प्रिंट क्षेत्र मूवी क्लिप का आकार बदला जा रहा है मैच के लिए पैमाने पर करने के भूल गया। काम कर समाधान के लिए नीचे देखें:

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

पर पारदर्शी होगा इस काम करता है ठीक करता है (मैं के लिए उपयोगी हो सकता है अभी तक यह कोशिश नहीं की है ...), फिर धन्यवाद, क्योंकि फ्लैश AS3 में एकाधिक पृष्ठों को फैलाने के लिए यह एक बहुत ही सामान्य और उपयोगी उदाहरण है कि एक बड़ी मूवीक्लिप कैसे मुद्रित करें। – Triynko

2

अपने ओपन-सोर्स भावना के लिए धन्यवाद! आपके महान काम के आधार पर, मैं इसे लागू करता हूं और अपनी व्यावहारिक मूवीक्लिप-प्रिंटिंग समस्या को हल करने में थोड़ा सुधार करता हूं। मैंने जो प्रमुख प्रगति की है, वह एक प्रिंटबॉज भेजने के द्वारा बहु-फ्रेम के साथ मूवीक्लिप प्रिंट करने का एक तरीका है। बेशक, मैंने "मूवीक्लिप की पूरी चौड़ाई को मुद्रित करने" के सवाल का समाधान किया। चूंकि एसडब्ल्यूएफ वेक्टरग्राफ के रूप में सामग्री संग्रहीत करता है, आपको यह सुनिश्चित करना है कि clip.height = printArea.height; clip.width = printArea.width; सुनिश्चित करें।

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 } 

आप अधिक जानकारी चाहते हैं, आप मेरी क्लिप छवि पर एक नज़र ले जा सकते हैं (और यह देखते हुए कि आप एक छोटे से चीनी को समझने):: यह एक आसान तरीका है यह सब in my blog है। MovieClip thumbnails (अभी भी चीनी) भी हैं।

+0

मुझे कई फ्रेम, अच्छा काम भी नहीं माना जाएगा :) हालांकि एक सुझाव के रूप में, एमएक्स के संदर्भ को हटाने के बारे में क्या है: फ़ंक्शन से combobox और "printPage" को एक वैकल्पिक तर्क बनाते हैं? यह थोड़ा और अधिक लचीला बना देगा। –

0

मैं एक छोटे से ठीक है कि मूवीक्लिप के आयामों पर रीसेट करता है के बाद printjob किया जाता है जोड़ा। समस्या यह थी कि जब आप कुछ बड़ा प्रिंट करते हैं तो आपका पृष्ठ, कोड मंच पर मूवीक्लिप को भी स्केल करेगा। तो मैं निश्चित है कि ... कुछ खास नहीं है, लेकिन अन्य लोगों :)

इस कोड को भी सच है कि अपने पारदर्शी PNG के भी अपने प्रिंट

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

मुझे यह कोशिश करने की ज़रूरत है, ऐस लगता है। धन्यवाद! –