2010-10-25 20 views
1

我正在使用包含允許用戶打印文檔(如工資單)的功能的Adobe AIR(2.0)應用程序。這些文件原爲PDF格式。由於情況,我們無法在AIR應用程序中直接顯示這些PDF(例如,使用flash.html.HTMLLoader)。因此,我們將PDF轉換爲SWF(使用pdf2swf工具,請參閱http://www.swftools.org/)。的SWF文件正在使用mx.controls.SWFLoader加載到應用程序,例如:從AIR/Flex應用程序打印會導致大文件被髮送到打印機

<mx:SWFLoader 
     id="salarySlipImage" 
     loaderContext="{someLoaderContext}" 
     trustContent="true" 
     maintainAspectRatio="true" 
     scaleContent="true" 
     source="{salarySlip.swf}" /> 

其中salarySlip.swf是包含SWF的內容的ByteArray。

接下來,我們有一個按鈕,啓動FlexPrintJob,像這樣:

<mx:Button label="Print" click="print()" /> 

等:

public function print():void { 
    var printJob:FlexPrintJob = new FlexPrintJob(); 

    if (printJob.start() != true) { 
     return; 
    } 

    printJob.addObject(salarySlipImage, FlexPrintJobScaleType.MATCH_HEIGHT); 
    printJob.send(); 
} 

這工作得很好(文件開過來了打印機和好看) ,但我注意到發送到打印機的文件有時會變得非常大,例如> 100MB(!!!),這可能需要相當長的一段時間才能到達打印機,例如> 30s(顯然取決於在連接速度t o打印機)。原始PDF大約150KB,SWF大約100KB。

使用mx.printing Flex API進行打印時是否有人遇到類似的問題?如果是這樣,我該如何解決這個問題?

最好的問候,
鮑勃

回答

0

我不是100%肯定這反應將幫助你,我不會有任何測試以下,但會發生什麼,如果你使用BitmapData類和運行畫(salarySlipImage)。您必須將該對象放入UIComponent中,以便您的printJob可以通過addObject接受它,但它可能會大大減少文件大小(尤其是如果您正在查看100MB [這正是我的意思,而不是Mb]) 。

0

嘗試使用此; 它減少了我的printjobs大小。 我仍然懷疑它是否會更小......如果有人有更多的建議,請與我們分享。 printJob.printAsBitmap = false;

var printJob:FlexPrintJob = new FlexPrintJob(); 
printJob.printAsBitmap=false; 

if (printJob.start() != true) { 
     return; 
    } 

    printJob.addObject(salarySlipImage, FlexPrintJobScaleType.MATCH_HEIGHT); 
    printJob.send(); 
} 
相關問題