3

クイックサマリー
Flashアプリケーション(AS3)があり、ユーザーはその中に埋め込まれたコンテンツを読んだり、操作したり、印刷したりできます。最近、Chromeから印刷する場合、コンテンツが省略され、空のページが印刷されることに気付きました(Chromeの印刷プレビューにも空白のページが表示されることに注意してください)。Chromeのバージョン「21.0.1180.83」(Flashバージョン「11.3.31.230」を使用)でこの問題が発生しています。これは他のブラウザでは再現できません。

技術的な詳細
コンテンツの各ページはスプライトとして表されます。コンテンツを適切にレンダリングするために、スケーリング/サイズ変更を行います。これはビットマップを使用して実現します。新しいBitmapDataオブジェクト(bMapData)を作成し、ページのスプライトを描画します。(bMapData)を取得し、それを使用して新しいBitmapオブジェクト(bMap)を作成します。最後に、新しいスプライトオブジェクト(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;

        }

    }

誰かが「回避策」についての提案がありますか?

ありとあらゆる助けに感謝します!

4

1 に答える 1

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

    }

私がそれを修正したとき、私はグーグルでプリントアウトすることができました、

よろしくお願いします

于 2012-09-07T11:21:07.433 に答える