2012-08-24 2 views
3

요약 요약
Google은 사용자가 그 안에 포함 된 콘텐츠를 읽고, 상호 작용하고, 인쇄 할 수있는 플래시 응용 프로그램 (AS3)을 제공합니다. 최근 Chrome에서 인쇄 할 때 콘텐츠가 생략되고 빈 페이지가 인쇄됩니다 (빈 페이지는 Chrome의 인쇄 미리보기에도 표시됨). Chrome 버전 "21.0.1180.83"(플래시 버전 "11.3.31.230"사용)에서이 문제가 발생합니다. 다른 브라우저에서는 재현 할 수 없습니다.플래시 인쇄 - 크롬이 스프라이트 인쇄를 생략합니다.

기술적 세부 사항
콘텐츠의 각 페이지는 스프라이트로 표시됩니다. 내용을 올바르게 렌더링하기 위해 크기 조정/크기 조정을 수행합니다. 비트 맵을 사용하여이를 수행합니다. 새 BitmapData 객체 (bMapData)을 만들고 페이지의 스프라이트를 그립니다. (bMapData)을 가져 와서 새로운 비트 맵 객체 (bMap)을 만듭니다. 마지막으로 새로운 Sprite 객체 (sObj)을 만들고 (bMap)을 자식으로 추가합니다. (sObj)은 빈 페이지를 렌더링합니다.

private function printAsBitmap(sprite:Sprite):void{ 
     var bitmapData:BitmapData = new BitmapData(sprite.width, sprite.height, false, 0xffffff); 
     bitmapData.draw(sprite); 

     var bitmap:Bitmap = new Bitmap(bitmapData); 

     var newSprite:Sprite = new Sprite(); 
     newSprite.addChild(bitmap); 

     printSprite(newSprite); 
    } 

    private function printSprite(clip:Sprite) { 

     var printJob:PrintJob = new PrintJob(); 
     var jobOptions:PrintJobOptions = new PrintJobOptions();  
     jobOptions.printAsBitmap=false; 
     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); 
       printJob.addPage(clip,null,jobOptions); 
       printArea.y += printArea.height; 
      } 

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

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

     } 

    } 

사람은 "해결 방법"에 대한 제안이 있습니까 :

나는이 문제를 재현하는 데 사용할 수있는 몇 가지 샘플 코드를 포함 시켰습니다?

모든 도움을 주실 수 있습니다! 인쇄 내용이 무대에 있어야한다 - - 파일에 대한

+1

참고 - Chromium 팀에 버그를 제출했습니다. [여기]를 클릭하십시오. (http://code.google.com/p/chromium/issues/detail?id=144974#c1) – arctek

+0

newSprite가 무대에 표시 될 수 없는데이 위치에 추가 할 수 있습니까? 먼저 무대? 무대에없는 클립이 인쇄되지 않는 인쇄 문제가 발생했습니다. –

+0

답장을 보내 주셔서 감사합니다. Chromium 팀에 제출 한 버그 신고서에이 동작을 보여주는 샘플 앱을 첨부했습니다. [여기를 클릭하십시오] (http://code.google.com/p/chromium/issues/detail?id=144974#c1) 소스를 보거나 다운로드하십시오. – arctek

답변

2

덕분에,

나는 그것을 잡고했는데 내가 말한 것처럼은 당신의 수정 다음 인쇄 방법 :

private function print(clip:Sprite) { 
     if (!clip) return;//safety 

     var printJob:PrintJob = new PrintJob(); 
     var jobOptions:PrintJobOptions = new PrintJobOptions();  
     jobOptions.printAsBitmap=false; 
     var numPages:int = 0; 
     var printArea:Rectangle; 
     var printHeight:Number; 
     var printY:int = 0; 

     if (stage) 
      stage.addChild(clip);//add to stage for print 


     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); 
       printJob.addPage(clip,null,jobOptions); 
       printArea.y += printArea.height; 
      } 

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

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

     } 


     if (stage && stage.contains(clip)) 
      stage.removeChild(clip);//once done remove from stage 

    } 

수정했습니다. Google에서 인쇄물을 출력 할 수있었습니다.

관련 문제