3

私はpdf生成プロジェクトを持っています。それはいくつかのテキストとすでにdbに保存されている画像で構成されています。生成されたpdfをプレビューしてメールしたいのですが、テキストデータしかない場合はすべて問題ありません。

データに画像があると問題が発生します。サイズが1MB以下の画像がある場合でも、メールはサイズが10MB以上のpdfを受け取ります。シミュレーターでは正常に動作しています。画像を描画する私のコードは次のとおりです。

        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 ページに書き込んだとき、サイズが 10 分の 1 になりました!! それが正しい方法かどうかわからない...

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

コンテキストでrectのサイズを変更する代わりに、 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 に答える