代码之家  ›  专栏  ›  技术社区  ›  Serge

打印jpg

  •  0
  • Serge  · 技术社区  · 15 年前

    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 回复  |  直到 15 年前
        1
  •  0
  •   IanT    15 年前

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

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

    myPrintJob.pageWidth
    myPrintJob.pageHeight
    

    (打印处理在每一个版本的Flash播放器中都是出了名的垃圾;恐怕你得自己做很多工作……)

        2
  •  0
  •   JStriedl    15 年前

    我猜你的图片是以默认的72dpi分辨率发送到后台打印程序的,所以它是巨大的(在1280x1656,这是一个17.777“x 23”的图像),所以我猜你看到的只是物理打印页上最左上角的部分。

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

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

    ImageSnapshot.captureBitmapData() Documentation

    还有,更快更容易尝试的事情。。。如果加载的JPEG图像文件的DPI确实较高,则在执行BeginBitmapFill()时可能会丢失DPI。你能试着把位图作为“frame”的子元素添加而不是绘制它吗?这可能会为你保留正确的决议。