我一直在尝试打印一个动态加载的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 ...任何想法我是什么做错了?
答案 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添加为“框架”的子项而不是绘制它吗?这可能会为您保留适当的分辨率。