Actionscript 3 打印jpg

Actionscript 3 打印jpg,actionscript-3,printing,matrix,action,jpeg,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(Eve

我一直在尝试打印一个动态加载的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。。。知道我做错了什么吗?

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

您可以通过以下方式获得输出页面的像素宽度和高度:

myPrintJob.pageWidth
myPrintJob.pageHeight
并在此基础上设置帧的.scaleX和.scaleY


(众所周知,在每个版本的Flash Player中,打印处理都是垃圾;恐怕你得自己做很多工作……

我猜你的图像是以默认的72dpi分辨率发送到打印后台处理程序的,所以打印出来的图像非常大(1280x1656是17.777英寸x 23英寸的图像)所以我猜你看到的只是物理打印页面上最左上角的部分

要解决这个问题,您可以缩小图像的比例以适应页面(可能至少达到0.45的比例),因为它仍然是一个相当低的72dpi分辨率,因此图像的细节会更少。或者,您可以使用第二种方法,即将DPI设置为与所需的打印尺寸(可能是300dpi左右)更精确

如果需要重置映像的内部DPI,我见过的唯一方法(但没有亲自尝试)是FlexSDK中的ImageSnapshot类。您可以使用它在特定DPI提取位图数据,然后将该位图数据发送到PrintJob


另外,一个更快更容易的尝试。。。如果正在加载的JPEG图像文件具有更高的DPI,则在执行BeginBitmapFill()时,DPI可能会丢失。你能尝试将位图添加为“frame”的子对象而不是绘制它吗?这可能会为您保留正确的分辨率。

嘿,标签中什么时候有图标了?