2008
03.20


[此篇可供使用ActionScript 3.0的應用參考]

可以用ActionScript 3.0的工具開始變多了,所以就不額外提示Flex,AIR也可以用了,以後用程式語言版本標明。

寫這篇的原因在於他的問題可能就是大家的問題,乾脆回完丟在Blog上,以後大家要找答案就方便多了,因為最近實在太忙了,剛好公司跟家裡都忙翻了,所以先依照來信的順序回,不然下禮拜我不在台灣,怕問問題的同學急得像熱鍋上的螞蟻,他的問題如下:

宋老師你好,我試之前上課的學員,想請教一個關於AS 列印控制的問題。
我想用一個按鈕來控制列印兩個不同的影格資料,並且要能縮放到A4的紙張上。
我用了print(),但似乎只能有一個影格的屬性設定為#p,否則編譯swf會有錯誤訊息,並且列印結果有些許不正常。
後來改用printJob() printaddPage() 的方式,可以縮放舞台資料到A4紙上正常列印,
但是無法列印兩頁。
請問有方法可以解決我的問題嗎?
謝謝你!

這個問題其實不難,只要善用PrintJob這個類別檔就好了,這邊我們舉了一個簡單的例子,如果你希望當按鈕按下去的時候可以列印第1個影格和第2個影格,那麼你只需要建立一個新的PrintJob,接下來用start(),addPage(),send()的方法完成列印動作就可以了
下面是一個很單純的對應Code:

myButton.addEventListener(MouseEvent.CLICK,clickHandler);
function clickHandler(event:MouseEvent):void {
 var myPrintJob:PrintJob = new PrintJob();
 myPrintJob.start();
 myPrintJob.addPage(this,null,null,1);
 myPrintJob.addPage(this,null,null,2);
 myPrintJob.send();
}

如果你了解的話,應該就可以直接加以改變,變成你所需要的程式碼了,例如列印所有影格內容之類的,好啦,今天先回答到這,明天先來整理一下Adobe AIR可能大家會有興趣的問題。


相關文章:
  • [分享]Flex 4 與 Flash CS5的 API表
  • Facebook 的ActionScript API 更新到 3.3版
  • Flash on iPhone,代誌就這麼發生了
  • 用ActionScript讀取相片中的exif資訊
  • 現場直擊Flash/Flex特效瘋-8/26活動內容預告
  • 本文引用:
    文章內容由宋志峰[ANISTAR]撰寫,引用分享請以鏈結形式註明出處與原始作者。

    5 comments so far

    Add Your Comment
    1. 你好,我想請問一下,我是用FLASH 8.0做了一個電子型錄,目前碰到的問題是,列印時,只印出1/4的畫面,請問要如何修改比較適當呢?!//放在那按鈕中
      on (release) {
      fileName = [
      "路徑/檔名"
      ]
      _global.zoom_flag = false;
      eval(thisObj).startDrag_flag = false;
      pagess = page;
      names1 = fileName[pagess];
      names2 = fileName[pagess+1];
      trace("pagess="+pagess)
      trace("即將要印的是 : "+ fileName[pagess])
      //
      var mclListener1:Object = new Object();
      mclListener1.onLoadInit = function(target_mc:MovieClip) {
      trace("左頁 載入印刷物件成功,開始載入右頁")
      var mclListener2:Object = new Object();
      mclListener2.onLoadInit = function(target_mc:MovieClip) {
      trace("右頁 載入印刷物件成功,進入印程")
      print(eval(thisObj).Nprinter_mc, "bframe");
      };
      var image_mcl2:MovieClipLoader = new MovieClipLoader();
      image_mcl2.addListener(mclListener2);
      image_mcl2.loadClip(names2,_root.Nprinter_mc.pR_mc);
      };
      var image_mcl1:MovieClipLoader = new MovieClipLoader();
      image_mcl1.addListener(mclListener1);
      image_mcl1.loadClip(names1,_root.Nprinter_mc.pL_mc);
      }

      • 因為從code比較難判斷真正的結構, 請注意你的階層是否有設對, 我猜是這個問題

    2. [...] 這篇是延續[在Flash中利用PrintJob列印多頁的內容 (ActionScript 3.0)]這個主題 ,回答完當隔天被問說可不可以寫ActionScript 2.0的版本,其實內容幾乎都一模一樣,好吧!我是好人,不過別發好人卡給我啊。 XD [...]

    3. Dear Rou:
      這是不可能的,列印來是透過OS來完成,所以一定會出現列印的視窗,在別的程式語言裡也是一樣的。

    4. 感謝你
      看了你的文章 讓我終於會了用flash寫出列印功能~
      但是,是否有方法在swf內部點擊列印之後 不要再讓印表機預設的列印視窗出現?
      意思就是在swf裡點擊了讓它列印之後就可以直接從印表機列印了~~
      請問這問題有辦法解決嗎?能在內部的程式就直接傳回true值嗎?