Apache flex 从AIR/Flex应用程序打印会导致将大文件发送到打印机

Apache flex 从AIR/Flex应用程序打印会导致将大文件发送到打印机,apache-flex,performance,printing,air,flash,Apache Flex,Performance,Printing,Air,Flash,我正在开发一个AdobeAIR(2.0)应用程序,它包含一个允许用户打印文档(如工资单)的功能。这些文件最初是PDF格式的。由于环境原因,我们无法在AIR应用程序中直接显示这些PDF(例如使用flash.html.HTMLLoader)。因此,我们将PDF转换为SWF(使用pdf2swf工具,请参阅)。使用mx.controls.SWFLoader将SWF加载到应用程序中,如下所示: <mx:SWFLoader id="salarySlipImage" lo

我正在开发一个AdobeAIR(2.0)应用程序,它包含一个允许用户打印文档(如工资单)的功能。这些文件最初是PDF格式的。由于环境原因,我们无法在AIR应用程序中直接显示这些PDF(例如使用flash.html.HTMLLoader)。因此,我们将PDF转换为SWF(使用pdf2swf工具,请参阅)。使用mx.controls.SWFLoader将SWF加载到应用程序中,如下所示:

<mx:SWFLoader
        id="salarySlipImage"
        loaderContext="{someLoaderContext}"
        trustContent="true"
        maintainAspectRatio="true"
        scaleContent="true"
        source="{salarySlip.swf}" />
<mx:Button label="Print" click="print()" />
这非常有效(文档从打印机上滚出来,看起来不错),尽管我注意到发送到打印机的文件有时会变得非常大,比如>100MB(!!!),这可能需要相当长的时间才能到达打印机,比如>30s(显然取决于与打印机的连接速度)。原始PDF大约为150KB,SWFs大约为100KB

是否有人在使用mx.printing Flex API打印时遇到类似问题?如果是,我如何解决此问题

致以最诚挚的问候,

Bob

我不能100%确定此响应是否会对您有所帮助,因为我不会测试以下任何一项,但如果您使用BitmapData类并运行draw(salarySlipImage),会发生什么情况。您必须将该对象放入UIComponent中,以便您的printJob可以通过addObject接受它,但它可能会大大减少文件大小(特别是如果你看到的是100MB(我认为这是你的意思,而不是Mb)。

尝试使用这个; 它大大缩小了我的打印作业大小。 我仍然想知道它是否可以更小。所以如果有人有更多的建议,请与我们分享。 printJob.printAsBitmap=false;

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

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

    printJob.addObject(salarySlipImage, FlexPrintJobScaleType.MATCH_HEIGHT);
    printJob.send();
}
var printJob:FlexPrintJob = new FlexPrintJob();
printJob.printAsBitmap=false;

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

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