如何在ios中动态生成多页pdf时处理分页

Posted

技术标签:

【中文标题】如何在ios中动态生成多页pdf时处理分页【英文标题】:How to handle pagination in generating multiple page pdf in ios dynamically 【发布时间】:2013-01-20 12:36:43 【问题描述】:

我使用以下代码生成 pdf 文件及其内容。 最初,我设计了 pdf 内容,通过将 cgpoint 值赋予线条来绘制表格。

+(void)drawPDF:(NSString*)fileName


    UIGraphicsBeginPDFContextToFile(fileName, CGRectZero, nil);

    UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, 1024, 748), nil);


    int xOrigin = 50;
    int yOrigin = 300;

   int rowHeight = 120;
   int columnWidth = 130;

   int numberOfRows = 7;
    int numberOfColumns = 4;

    [self drawTableAt:CGPointMake(xOrigin, yOrigin) withRowHeight:rowHeight andColumnWidth:columnWidth andRowCount:numberOfRows andColumnCount:numberOfColumns];


   UIGraphicsEndPDFContext();


 +(void)drawTableAt:(CGPoint)origin
  withRowHeight:(int)rowHeight
andColumnWidth:(int)columnWidth
   andRowCount:(int)numberOfRows
andColumnCount:(int)numberOfColumns

 

    for (int i = 0; i <= numberOfRows; i++) 

        int newOrigin = origin.y + (rowHeight*i);


        CGPoint from = CGPointMake(origin.x, newOrigin);
        CGPoint to = CGPointMake(origin.x + (numberOfColumns*columnWidth), newOrigin);

        [self drawLineFromPoint:from toPoint:to];


    

    for (int i = 0; i <= numberOfColumns; i++) 

        int newOrigin = origin.x + (columnWidth*i);


        CGPoint from = CGPointMake(newOrigin, origin.y);
        CGPoint to = CGPointMake(newOrigin, origin.y +(numberOfRows*rowHeight));

        [self drawLineFromPoint:from toPoint:to];


    


+(void)drawLineFromPoint:(CGPoint)from toPoint:(CGPoint)to

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetLineWidth(context, 2.0);

    CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();

    CGFloat components[] = 0.2, 0.2, 0.2, 0.3;

    CGColorRef color = CGColorCreate(colorspace, components);

    CGContextSetStrokeColorWithColor(context, color);


    CGContextMoveToPoint(context, from.x, from.y);
    CGContextAddLineToPoint(context, to.x, to.y);

    CGContextStrokePath(context);
    CGColorSpaceRelease(colorspace);
    CGColorRelease(color);


输出如下

但我将 numberOfRows 指定为 7,只有 3 行可见,查看其余行(即)我需要查看 pdf 的第二页。 numberOfRows 可能会动态变化,如果 numberOfRows = 12 表示否。 pdf 中的页数应为 3 或以上。 该怎么办? 我是新手。

【问题讨论】:

【参考方案1】:

我相信您必须自己处理分页。即,您致电

    UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, 1024, 748), nil);

这里只有一页,1024x768。您当然也可以使该尺寸更大,但如果您需要添加第二页,则必须添加更多。我认为此链接为您说明了一切:

http://developer.apple.com/library/ios/#documentation/2ddrawing/conceptual/drawingprintingios/GeneratingPDF/GeneratingPDF.html

(看到第一组 6 个步骤表明您应该根据需要重复步骤 2/3/4,其中 2 是按您的方式添加页面)。

【讨论】:

如何重复第二步(创建页面)。 谢谢,我让代码 UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, 1024, 748), nil);在 for 循环中并为更多页面进行了许多自定义框架设置,最终工作正常。 你能发布你用来解决这个问题的代码吗?我有类似的问题,并会帮助你看看你是怎么做到的。 嗨,Nazik,您能解释一下您是如何做到这一点的...我需要查看 pdf 的第二页。 numberOfRows 可能会动态变化,如果 numberOfRows = 12 表示否。 pdf 中的页数应为 3 或以上.... @NAZIK 嗨,你能把你的代码发给我,用于创建多页的 pdf。

以上是关于如何在ios中动态生成多页pdf时处理分页的主要内容,如果未能解决你的问题,请参考以下文章

mPDF 中动态生成页面的页码

poi根据模版生成多页word,并压缩下载

生成多页 PDF UIView

替代 PDF 用于动态生成的带有分页符的文档

20170727xlVBA根据总名单和模板生成多页名单

CAD如何在线转换成多页PDF