Печать из приложения AIR / Flex приводит к отправке больших файлов на принтер - PullRequest
1 голос
/ 25 октября 2010

Я работаю над приложением Adobe AIR (2.0), которое содержит функцию, позволяющую пользователям печатать документы (например, квитанции о зарплате).Эти документы изначально в формате PDF.В силу обстоятельств мы не можем напрямую отображать эти PDF-файлы в приложении AIR (например, с помощью flash.html.HTMLLoader).Поэтому мы конвертируем PDF-файлы в SWF-файлы (с помощью инструмента pdf2swf, см. http://www.swftools.org/).. SWF-файлы загружаются в приложение с помощью mx.controls.SWFLoader, например:

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

где salarySlip.swf - это ByteArray, содержащий содержимое SWF.

Далее у нас есть кнопка, запускающая 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();
}

Это работает довольно хорошо (документы выходят из принтера и выглядят хорошо), хотя я заметил, что файлы, отправляемые на принтер, могут иногда становиться очень большими, например> 100 МБ (!!!), что может занять некоторое время, чтобы добраться до принтера, например> 30 с (очевидно, в зависимости от скорости соединения с принтером). Оригинальные PDF-файлы имеют размер около 150 КБ, а SWF-файлы около 100 КБ.

Кто-нибудьпри печати с использованием API-интерфейсов Flex mx.printing возникают похожие проблемы? Если да, то как это исправить?

С уважением,
Боб

Ответы [ 2 ]

0 голосов
/ 15 ноября 2011

Попробуйте использовать это;Это сильно уменьшило размер моих заданий на печать.Тем не менее, мне интересно, может ли он быть еще меньше ... поэтому, если у кого-то есть еще предложения, пожалуйста, поделитесь им с нами. printJob.printAsBitmap = false;

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

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

    printJob.addObject(salarySlipImage, FlexPrintJobScaleType.MATCH_HEIGHT);
    printJob.send();
}
0 голосов
/ 25 октября 2010

Я не уверен на 100%, что этот ответ поможет вам, так как я не буду тестировать ничего из следующего, но что произойдет, если вы используете класс BitmapData и запускаете рисование (salarySlipImage). Вам нужно будет поместить этот объект в UIComponent, чтобы ваш printJob мог принять его через addObject, но это могло бы значительно уменьшить размеры файлов (особенно если вы смотрите на 100 МБ [что я и имел в виду, а не МБ]) .

...