0

たくさんのことを行うテスト用のアプリがありますが、最終製品はデータベースにアップロードされる .pdf です。残念ながら、私のエンド ユーザーの 1 人は、長い .pdf がすべて 1 ページであるという事実を気に入っていません。生成されるページの長さは非常に可変であるため、何があっても 1 つのページを生成していました。Adobe Acrobat が印刷用に大きなファイルを複数のページに並べて表示することは知っていますが、一部の人にとってはこれが難しすぎるのではないかと顧客は懸念しています ---

これが私が今.pdfを作成している方法です

- (void)exportAsPDF:(NSString *)filename
{        
    int restorer = mineTable.frame.size.height;

    CGRect temp = CGRectMake(mineTable.frame.origin.x, mineTable.frame.origin.y, mineTable.frame.size.width, 200*formDataStorage.cake.count);
    [self resizeTheTable:temp];

    int addNumber = temp.size.height - temp.origin.y;

    CGRect mediaBox = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height + addNumber);

    NSString *tmpFile = filename;

    CGContextRef ctx = CGPDFContextCreateWithURL((__bridge CFURLRef)[NSURL fileURLWithPath:tmpFile], &mediaBox, NULL);

    //turn PDF upside-down
    CGAffineTransform transform = CGAffineTransformIdentity;
    transform = CGAffineTransformMakeTranslation(0, mediaBox.size.height);
    transform = CGAffineTransformScale(transform, 1.0, -1.0);

    CGPDFContextBeginPage(ctx, NULL);
    CGContextConcatCTM(ctx, transform);

    [self.view setNeedsLayout];
    [self.view setNeedsDisplay];
    [self.view.layer renderInContext:ctx];

    CGPDFContextEndPage(ctx);

    CGPDFContextClose(ctx);
    CFRelease(ctx);
}

ご覧のとおり、ビューのサイズを変更して、レンダリングしているテーブル内のすべてのセルを表示し、ビューのスクリーンショットを .pdf に並べ替えます。サイズ変更されたビューがユーザーに表示されることはありません (すべてが画面に収まるわけではありません)。

作成された .pdf のさまざまな部分をさまざまなページに関連付ける方法を知っている人はいますか? ありがとう。

4

2 に答える 2

3

私はこのコードを使用することになりました:

- (void)exportAsPDF:(NSString *)filename
{        
    int restorer = mineTable.frame.size.height;
    CGRect temp = CGRectMake(mineTable.frame.origin.x, mineTable.frame.origin.y, mineTable.frame.size.width, 398*formDataStorage.cake.count);
    [self resizeTheTable:temp];

    int addNumber = temp.size.height - temp.origin.y;
    CGRect mediaBox = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height + addNumber);

    NSMutableData *theData = [NSMutableData data];
    CGSize pageSize = CGSizeMake(self.view.frame.size.width, 792);
    UIGraphicsBeginPDFContextToData(theData, CGRectZero, nil);
    CGContextRef pdfContext = UIGraphicsGetCurrentContext();

    NSInteger currentPage = 0;
    BOOL done = NO;

    do {
        UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0.0, pageSize.width, pageSize.height), nil);
        CGContextTranslateCTM(pdfContext, 0, -(pageSize.height*currentPage));
        [self.view.layer renderInContext:pdfContext];

        if ((pageSize.height*(currentPage+1)) > mediaBox.size.height) done = YES;
        else currentPage++;
    } while (!done);

    UIGraphicsEndPDFContext();

    [theData writeToFile:filename atomically:YES];
    NSLog(@"PDF written to: %@", filename);
}
于 2012-07-27T17:19:07.640 に答える
1

すでに回答済みですが、参考になる場合は、Docmosisなどのサービスを使用して iOS から PDF を生成できます。あなたの場合、ドキュメントはテンプレートに基づいて入力されるときに「フロー」するため、ページネーションの問題は発生しませんでした。欠点は、ネットに接続する必要があることです。

于 2012-08-02T08:54:59.703 に答える