0

我一直在尝试打印动态加载的 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...任何想法我做错了什么?

4

2 回答 2

0

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

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

myPrintJob.pageWidth
myPrintJob.pageHeight

并在此基础上设置框架的 .scaleX 和 .scaleY 。

(在每个版本的 Flash Player 中,打印处理都是出了名的垃圾;恐怕你必须自己做很多工作......)

于 2009-09-29T16:11:23.443 回答
0

我猜您的图像正在以 72dpi 的默认分辨率发送到打印后台处理程序,所以它的输出很大(在 1280x1656 上,即 17.777" x 23" 图像)所以我猜您只看到左上角大部分适合物理打印页面。

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

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

ImageSnapshot.captureBitmapData() 文档

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

于 2009-09-29T16:30:25.077 回答