首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Airprint a pdf页面

Airprint a pdf页面
EN

Stack Overflow用户
提问于 2013-10-12 19:55:56
回答 1查看 306关注 0票数 1

我需要用airprint从PDF中打印几个页面(并向它们添加一个over图像),我知道如何打印完整的pdf,但我需要的只是打印用户选择的页面,

应该有点像

代码语言:javascript
复制
[printPages:[NSArray arrayWithObjects:1,2,5,6,9,11]]

所以我可以打印一个只有PDF页面的文档

我需要在页面中添加一些覆盖图像:D

你知道这是否可能吗?

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-30 11:33:56

我最终创建了这个函数

代码语言:javascript
复制
-(void) splitPdf:(NSArray*) pages andNewFilePath:(NSString*)newFilePath andShouldRotate:(BOOL) shouldRotate andShouldPrintHoles:(BOOL)shouldPrintHoles{

    UIImage *holes;

    if(shouldRotate)    holes = [UIImage imageNamed:@"holes_rotated.png"];
    else                holes = [UIImage imageNamed:@"holes.png"];


    //create empty pdf file;
    UIGraphicsBeginPDFContextToFile(newFilePath, CGRectMake(0, 0, 792, 612), nil);

    CGPDFDocumentRef templateDocument = mPdf;

    //get amount of pages in template
    size_t count = CGPDFDocumentGetNumberOfPages(templateDocument);

    //for each page in template
    for(int i = 0; i< [pages count]; i = i+2){
        //get bounds of template page

        int pageNumber = [((NSNumber*)[pages objectAtIndex:i]) intValue];
        if (pageNumber <= count){

            CGPDFPageRef templatePage   = CGPDFDocumentGetPage(templateDocument,pageNumber);
            CGPDFPageRef templatePage2  = CGPDFDocumentGetPage(templateDocument,pageNumber+1);

            CGRect templatePageBounds = CGPDFPageGetBoxRect(templatePage, kCGPDFCropBox);

            //create empty page with corresponding bounds in new document
            //UIGraphicsBeginPDFPageWithInfo(templatePageBounds, nil);
            float margin = templatePageBounds.size.width*MARGIN_PROPORTION;
            CGRect newRect = CGRectMake(0, 0, templatePageBounds.size.width + margin, templatePageBounds.size.height*A4_PROPORTION + margin);
            UIGraphicsBeginPDFPageWithInfo(newRect, nil);
            CGContextRef context = UIGraphicsGetCurrentContext();

            CGContextSaveGState(context);
            if(shouldRotate){
                CGContextTranslateCTM( context, 0.5f * templatePageBounds.size.width, 0.5f * templatePageBounds.size.height) ;
                CGContextRotateCTM(context, radians(90));
                CGContextTranslateCTM( context, -0.5f * templatePageBounds.size.width, -0.5f * templatePageBounds.size.height) ;
            }

            //flip context due to different origins
            if(!shouldRotate){
                CGContextTranslateCTM(context,75, templatePageBounds.size.height + 130);
                CGContextScaleCTM(context, 0.75, -0.75);
            }
            else{
                CGContextTranslateCTM(context,-100, templatePageBounds.size.height - 70);
                CGContextScaleCTM(context, 0.75, -0.75);
            }

            //Center the image with margins
            if(!shouldRotate)    CGContextTranslateCTM(context, margin*0.5f, -margin*A4_PROPORTION);
            else                 CGContextTranslateCTM(context, margin*A4_PROPORTION,margin*0.5f);



            CGContextDrawPDFPage(context, templatePage);  //copy content of template page on the corresponding page in new file

            if(!shouldRotate) CGContextTranslateCTM(context, 0,538);
            else              CGContextTranslateCTM(context, 538,0);

            CGContextDrawPDFPage(context, templatePage2);


            CGContextRestoreGState(context);              //Restore state

            /* Here you can do any drawings */
            if(shouldPrintHoles){
                CGContextMoveToPoint(context, 0, 0);
                if(!shouldRotate) {
                    [holes drawAtPoint:CGPointMake(0, ((templatePageBounds.size.height*A4_PROPORTION+margin) * 0.5f) - holes.size.height*0.5f)];
                }
                else{
                    [holes drawAtPoint:CGPointMake(((templatePageBounds.size.width*A4_PROPORTION+margin) * 0.5f) - holes.size.width*0.5f,0)];
                }

            }
        }
        else{
            NSLog(@"Page to split is bigger than number of pages of the document");
        }
    }

    UIGraphicsEndPDFContext();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19338569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档