如何在iOS上使用“真实”文本内容生成PDF?

我想在我的iOS 6应用程序中生成一个漂亮的PDF。

我试过了:

  • UIView在上下文中呈现
  • 使用CoreText
  • 使用NSString drawInRect
  • 使用UILabel drawRect
  • 这是一个代码示例:

    -(CGContextRef) createPDFContext:(CGRect)inMediaBox path:(NSString *) path
    {
        CGContextRef myOutContext = NULL;
        NSURL * url;
    
        url = [NSURL fileURLWithPath:path];
        if (url != NULL) {
            myOutContext = CGPDFContextCreateWithURL ((__bridge CFURLRef) url,
                                                      &inMediaBox,
                                                      NULL);
        }
    
    
        return myOutContext;
    }
    
    -(void)savePdf:(NSString *)outputPath
    {
        if (!pageViews.count)
            return;
    
        UIView * first = [pageViews objectAtIndex:0];
    
        CGContextRef pdfContext = [self createPDFContext:CGRectMake(0, 0, first.frame.size.width, first.frame.size.height) path:outputPath];
    
        for(UIView * v in pageViews)
        {
            CGContextBeginPage (pdfContext,nil);
            CGAffineTransform transform = CGAffineTransformIdentity;
            transform = CGAffineTransformMakeTranslation(0, (int)(v.frame.size.height));
            transform = CGAffineTransformScale(transform, 1, -1);
            CGContextConcatCTM(pdfContext, transform);
    
            CGContextSetFillColorWithColor(pdfContext, [UIColor whiteColor].CGColor);
            CGContextFillRect(pdfContext, v.frame);
    
            [v.layer renderInContext:pdfContext];
    
            CGContextEndPage (pdfContext);
        }
    
        CGContextRelease (pdfContext);
    }
    

    所呈现的UIViews只包含一个UIImageView +一堆UILabels(有些有一些没有边框)。

    我也尝试了一个在stackoverflow上找到的建议:子类化UILabel并执行此操作:

    - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
        BOOL isPDF = !CGRectIsEmpty(UIGraphicsGetPDFContextBounds());
        if (!layer.shouldRasterize && isPDF)
            [self drawRect:self.bounds]; // draw unrasterized
        else
            [super drawLayer:layer inContext:ctx];
    }
    

    但是这也没有改变任何事情。

    无论我做什么,在预览中打开PDF时,文本部分都可以选择为一个块,但不能选择每个字符的字符,缩放pdf显示它实际上是位图图像。

    有什么建议么?


    Raywenderlich的这个教程保存了我的一天。希望它也能为你工作。 http://www.raywenderlich.com/6818/how-to-create-a-pdf-with-quartz-2d-in-ios-5-tutorial-part-2


    去年我做这件事时的经验是,苹果公司没有提供任何图书馆来做这件事。 我最终导入了一个开源C库(libHaru)。 然后我在视图层次结构中的每个类中添加了一个输出到它的函数。 任何具有子视图的视图都会在其子视图上调用渲染。 我的UILabels,UITextFields,UIImageViews,UISwitches等将输出他们的内容作为文字或图形相应我也呈现一些意见的背景颜色。

    这不是很令人生畏,但libHaru给我一些字体的问题,所以iirc我最终只使用了默认字体和字体大小。

    链接地址: http://www.djcxy.com/p/11221.html

    上一篇: How can I generate a PDF with "real" text content on iOS?

    下一篇: How to get the wifi configuration file location in android