打印jpg

时间:2009-09-28 14:28:00

标签: actionscript-3 printing matrix action jpeg

我一直在尝试打印一个动态加载的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尺寸为1280x1656,我希望它可以打印整个jpg ...任何想法我是什么做错了?

2 个答案:

答案 0 :(得分:0)

在您尝试打印之前,我会适当缩放剪辑。

您可以使用以下命令获取输出页面的像素宽度和高度:

myPrintJob.pageWidth
myPrintJob.pageHeight

并根据该值设置帧的.scaleX和.scaleY。

(在每个版本的Flash Player中,打印处理都是臭名昭着的垃圾;你必须自己做很多工作,我担心......)

答案 1 :(得分:0)

我猜你的图像是以72dpi的默认分辨率发送到打印假脱机程序,所以它出来很大(在1280x1656这是一张17.777“x 23”的图像)所以我猜你只是看到了最左上方的部分适合实际打印页面。

要解决此问题,您可以向下缩放图像以适应页面(可能至少约为.45比例),这将产生较少的细节,但仍然是相当低的72dpi分辨率。或者您可以使用第二种方法,即将DPI设置为更准确的所需打印尺寸(可能是300dpi左右)

如果您需要重置图像的内部DPI,我见过的唯一方法(但未亲自尝试过)是Flex SDK中的ImageSnapshot类。您可以使用它来提取特定DPI的BitmapData,然后您可以将该BitmapData发送到PrintJob。

ImageSnapshot.captureBitmapData() Documentation

此外,更容易尝试...如果您正在加载的JPEG图像文件确实具有更高的DPI,那么当您执行BeginBitmapFill()时可能会丢失。您可以尝试将Bitmap添加为“框架”的子项而不是绘制它吗?这可能会为您保留适当的分辨率。