2011-08-23 42 views
2

Iam使用AlivePDF在flex中打印组件。组件具有文本和图像,是动态创建的。在这我们有高分辨率的图像和嵌入字体样式的文字。 AlivePDF的输出文字和图像质量不好。文字看起来模糊不清,图像质量并不像我们在原始图像中看到的那么清晰。Flex Alive PDF - 添加高分辨率图像

我尝试添加页面作为图像流,但仍然输出质量是相同的。

我已经粘贴下面的代码以供参考:

var image:ImageSnapshot = ImageSnapshot.captureImage(
    templGroup.getChildAt(i),300,new mx.graphics.codec.JPEGEncoder()); 
printPDF.addImageStream(image.data,"",null,0,0); 

让我知道,是否有什么办法可以提高从活着的PDF PDF输出的图像质量。

由于事先

问候

作者Srini

回答

0

试试这个代码在更高的分辨率捕捉:

function capture(source: DisplayObject, dpi:uint = 72, bgColor:Number = 0xFFFFFF): BitmapData 
{ 
    var scale:Number = dpi/72.0; 
    var bmd:BitmapData = new BitmapData(source.width * scale, source.height * scale, false, bgColor); 
    var m: Matrix = new Matrix(); 
    m.scale(scale, scale); 
    bmd.draw(source, m); 
    return bmd; 
} 

你可以使用这样的:

function addHighResSnapshot(pdf: PDF, snapshotObject: DisplayObject, imageRect: Rectangle, dpi: uint = 300): void 
{ 
    var bitmapData: BitmapData = capture(snapshotObject, dpi); 
    var encodedImage: ByteArray = new JPEGEncoder().encode(bitmapData); 
    pdf.addImageStream(encodedImage, ColorSpace.DEVICE_RGB, null, 
     imageRect.x, imageRect.y, imageRect.width, imageRect.height); 
} 
+0

感谢您的代码。在使用上面的代码时,我得到超时异常(最大执行时间为15秒)。我认为这个例外将归因于我们正在使用的高分辨率图像。为了让你对我们使用的图像尺寸有一个清晰的认识,我已经提到了下面的细节:尺寸:1920 * 827,文件大小是827 KB。请让我知道,您是否曾经遇到过这个问题,并且有任何解决方法。 – Srinivasan

+0

使用AlivePDF创建高分辨率PDF需要更长的时间。我从来没有分析整个过程,因为我的位图从来没有这么大。您可以通过几个函数调用来查看瓶颈在哪里。 – splash

+0

@srinivasan使用PNG编码器(而不是JPG)的执行速度更快。 – Chris

2

JPEGEncoder有一个质量参数:JPEGEncoder(质量= 50),将其改为90,结果会更好,即新的JPEG编码器(90);