2009-09-28 3 views
0

Я пытался напечатать динамически загруженного JPG и по какой-то причине он никогда не печатать в масштабе, не уверен, что я делаю неправильно, так вот что я сделал до сих порРаспечатайте JPG

var request:URLRequest = new URLRequest(getAbsPath("pages/" + pagePrint + "_big.jpg")); 
var loader:Loader = new Loader(); 
loader.load(request); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); 

var frame:Sprite = new Sprite() 
function completeHandler(event:Event):void { 

    var picture:Bitmap = Bitmap(loader.content); 
    var bitmap:BitmapData = picture.bitmapData; 
    var matrix:Matrix = new Matrix(); 
    matrix.scale(1, 1); 

    frame.graphics.beginBitmapFill(bitmap, matrix, true); 
    frame.graphics.drawRect(0, 0, bitmap.width, bitmap.height); 
    frame.graphics.endFill(); 
    addChild(frame); 
    frame.visible = false; 

    printPage();  
} 
function printPage():void { 
    var myPrintJob:PrintJob = new PrintJob(); 
    var options:PrintJobOptions = new PrintJobOptions(); 
    options.printAsBitmap = true; 

    myPrintJob.start(); 

    try { 
     myPrintJob.addPage(frame, null, options); 
    } 
    catch(e:Error) { 
     trace ("Had problem adding the page to print job: " + e); 
    } 

    try { 
     myPrintJob.send(); 
    } 
    catch (e:Error) { 
     trace ("Had problem printing: " + e);  
    } 
} 

По какой-то причине требуется только одна часть изображения и взорвать ее, чтобы заполнить всю страницу ... jpg dimentions 1280x1656, и я бы хотел, чтобы она печатала весь jpg ... Любые идеи, что я делаю неправильно ?

+0

Эй, с каких пор значки в тегах? –

ответ

0

Я бы масштабировал клип до того, как вы попытаетесь распечатать.

Вы можете получить ширину пикселей и высоту вывода страницы с:

myPrintJob.pageWidth 
myPrintJob.pageHeight 

И установить .scaleX и .scaleY кадра на основе этого.

(обработка печати, как известно, мусор в каждой версии Flash Player, вы должны сделать много работы самостоятельно, я боюсь ...)

0

Я предполагаю, что ваше изображение передается к диспетчеру печати по умолчанию с разрешением 72dpi, поэтому он выходит огромным (на 1280x1656 это изображение 17,777 "x 23"), поэтому я предполагаю, что вы видите только самую верхнюю часть, наиболее подходящую на физическую печатную страницу.

Чтобы решить эту проблему, вы можете либо масштабировать изображение вниз, чтобы оно поместилось на странице (возможно, примерно на 0,45 шкалы), которое получится с меньшими деталями, тем не менее, оно будет довольно низким разрешением 72dpi. Или вы можете использовать второй подход, который должен сделать DPI более точным для вашего желаемого размера печати (возможно, 300dpi или около того)

Если вам нужно сбросить внутренний DPI изображения, единственный способ I ' Видно (но не проверено лично) - это класс ImageSnapshot в Flex SDK. Вы можете использовать его для извлечения BitmapData в определенном DPI, тогда вы можете отправить BitmapData в PrintJob.

ImageSnapshot.captureBitmapData() Documentation

Кроме того, более быстрый проще вещь, чтобы попробовать ... Если файл изображения JPEG вы загружаете действительно имеют более высокий DPI, что, вероятно, теряется, когда вы делаете ваш BeginBitmapFill(). Не могли бы вы попытаться добавить битмап в качестве дочернего элемента «рамки», а не рисовать его? Это может обеспечить правильное разрешение для вас.

Смежные вопросы