1

PDF ページを UIImage として保存する際に問題が発生しています... PDF はインターネットから読み込まれ、1 つのページで構成されています (元の PDF はサーバーで分割されています) ... しかし、変換された画像がトリミングされることがあります ... 時々小さくて、UIImageviewに配置すると空白が残ります...

ここにコードがあります

-(UIImage *)imageFromPdf:(NSString *) pdfUrl{

NSURL *pdfUrlStr=[NSURL URLWithString:pdfUrl];

CFURLRef docURLRef=(CFURLRef)pdfUrlStr;


UIGraphicsBeginImageContext(CGSizeMake(768, 1024)); //840, 960
NSLog(@"save begin");

CGContextRef context = UIGraphicsGetCurrentContext();

//CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("/file.pdf"), NULL, NULL);

CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL(docURLRef);

NSLog(@"save complete");

CGContextTranslateCTM(context, 0.0, 900);//320

CGContextScaleCTM(context, 1.0, -1.0);

CGPDFPageRef page = CGPDFDocumentGetPage(pdf, 1);

CGContextSaveGState(context);


CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(page, kCGPDFCropBox, CGRectMake(0, 0, 768, 1024), 0, true);

CGContextConcatCTM(context, pdfTransform);

CGContextDrawPDFPage(context, page);

CGContextRestoreGState(context);

UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();  
UIGraphicsEndImageContext();

return resultingImage;

}

ところで、私はこのようにコーディングしてUIImageviewを準備しました

self.PDFImageVIew.contentMode  = UIViewContentModeScaleAspectFit;
self.PDFImageVIew.clipsToBounds = YES;

この画像をUIImageviewに完全にフィットさせたいだけで、画像の品質が低下している可能性があります...どうすれば品質を維持できるか教えていただけますか? 助けて、私にいくつかの提案をしてください

ありがとう

4

1 に答える 1

1
CGContextTranslateCTM(context, 0.0, 900);//320
  • ここで、通常、変換操作の最後のパラメーターは、画像を作成するコンテキストの高さまたは長方形の高さである必要があります。だから、私はそれが1024であるべきだと思います(画像コンテキストの高さは1024なので、ここではステータスバーが存在しないと仮定しています)。これにより、トリミングの問題が解消される場合があります。コンテキストで操作を行う前に、グラフィックスの状態を保存する必要があるコードで注意したことがいくつかあります。あなたはそれを保存していますが、いくつかの操作の後です。
  • 上記のコードは高さに合わせようとするため、実際のページの高さがコンテキストの高さよりも大きい場合は縮小されます。そのため、明らかにページの周りに余白が見えます。
  • もう1つ、元のpdfページに空白が含まれている場合、私の知る限り、それを削除する方法はありません.
于 2011-11-27T14:41:32.227 に答える