3

我有一个 pdf 生成项目,它包含一些文本和一个已经存储在 db 中的图像,我想预览并邮寄生成的 pdf,当只有文本数据时一切正常。

如果我们的数据中有图像,就会出现问题。邮件收到大小为 10MB 或以上的 pdf,即使它有大小为 1MB 或以下的图像。它在模拟器中工作正常。我绘制图像的代码如下所示:

        UIImage *plotImage=[[UIImage alloc]initWithContentsOfFile:[localPictureArray objectAtIndex:i]];                  
                CGSize imageSize=plotImage.size;
                CGFloat scaleFactor = 1.0;        

        if (imageSize.height>(maxHeight-currentPageY) || imageSize.width>maxWidth ) 
        {
           UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, kDefaultPageWidth, kDefaultPageHeight), nil);
           currentPageY = kMargin;

           if (!((scaleFactor = (maxWidth / imageSize.width)) > ((maxHeight-currentPageY) / imageSize.height)))
            { 
            scaleFactor = (maxHeight-currentPageY) /imageSize.height; 
            // scale to fit heigth. 
            }

           CGRect rect = CGRectMake(kMargin,currentPageY,
           imageSize.width * scaleFactor, imageSize.height * scaleFactor);
           //Draw the image into the rect
           [plotImage drawInRect:rect];
         }

  else
      {
        plotImage drawInRect:normal size)];//Normal size we need
        NSLog(@"%@",NSStringFromCGSize(plotImage.size));
      }

由于我是初学者,我正在努力解决它。

4

2 回答 2

4

我挣扎了很多..最后当使用下面的代码将jpeg格式的图像写入pdf页面时,尺寸减小了十倍!不知道是不是正确的方法...

UIImage *lowResImage = [UIImage imageWithData:UIImageJPEGRepresentation(plotImage, 0.02)];
于 2013-03-06T11:29:47.353 回答
0

您需要更改CTM (Current Transform Matrix) ,而不是在上下文中调整矩形的大小。

CGContextSaveGState(theContext);


CGContextScaleCTM(theContext, scaleFactor, scaleFactor);

...在这里绘制命令...

CGContextRestoreGState(theContext);

( http://macdevcenter.com/pub/a/mac/2004/11/02/quartz.html )

于 2013-03-05T12:23:58.317 回答