减少Quartz2D生成的PDF大小

时间:2016-01-04 10:17:50

标签: ios pdf-generation quartz-2d

我想使用Quartz2D从UICollectionView生成PDF。 collectionView有很多单元格,每个单元格是一个全屏视图。我可以生成PDF,但尺寸太大。我生成了8页pdf,大小为2.8M。一般来说,我会有超过40个单元格,pdf大小将超过20M。我想将这个pdf发送给使用电子邮件的其他人,而且它太大了,就像电子邮件中的附件一样。

同时,当我在自己的MBP上打开pdf时,它看起来不错。但是当我在PC上打开它时,它看起来很糟糕。

抱歉我的英语,我不是母语人士,如果我的描述中有任何不清楚的地方,请在下面发表评论,谢谢。

这是我的代码:

dispatch_queue_t queue = dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0);

NSMutableData *pdfData = [NSMutableData data];
dispatch_async(queue, ^{
    UIGraphicsBeginPDFContextToData(pdfData, CGRectMake(0.0f, 0.0f, 198.0f, 153.0f), nil);
    for (NSInteger section = 0; section < [self.collectionView numberOfSections]; section++) {
        for (NSInteger item = 0; item < [self.collectionView numberOfItemsInSection:section]; item++) {

            UICollectionViewCell *cell = [self collectionView:self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:item inSection:section]];

            [self addPrintingViewPDF:cell.contentView];
        }
    }
    UIGraphicsEndPDFContext();
});

- (void)addPrintingViewPDF:(UIView*)printingView {
    // Mark the beginning of a new page.
    UIGraphicsBeginPDFPage();
    CGContextRef pdfContext = UIGraphicsGetCurrentContext();

    // Scale down from 1024x768 to fit paper output (792x612; 792/1024 = 0.773)
    CGContextScaleCTM(pdfContext, 0.193f, 0.199f);
    [printingView.layer renderInContext:pdfContext];
}

0 个答案:

没有答案