1. ホーム
  2. ios

[解決済み] iOSでUIViewをPDFに変換するには?

2023-04-04 11:42:07

質問

PDFをアプリの内に表示する方法について、多くの資料があります。 UIView . 私が今取り組んでいるのは、PDFを UIViews .

例えば、私の場合は UIView のように、Textviewsのようなサブビューを持つ。 UILabels , UIImages を変換するにはどうすればよいのでしょうか? ビッグ UIView を、そのすべてのサブビューとサブサブビューを含む全体として、PDFに変換しますか?

私が確認したのは Apple の iOS リファレンス . しかし、それはPDFファイルへのテキスト/画像の断片の書き込みについてだけ述べています。

私が直面している問題は、PDFとしてファイルに書き込みたいコンテンツがたくさんあることです。もし私がそれらをひとつひとつ PDF に書き込むとしたら、それは膨大な作業になりそうです。 そのため、次のような書き方を探しています。 UIViews をPDFに書き込んだり、ビットマップに書き込んだりする方法を探しています。

私は、Stack Overflow内の他のQ/Aからコピーしたソースコードを試しました。しかし、それは私に空の PDF を UIView の境界サイズを持つ空白のPDFが得られるだけです。

-(void)createPDFfromUIView:(UIView*)aView saveToDocumentsWithFileName:(NSString*)aFilename
{
    // Creates a mutable data object for updating with binary data, like a byte array
    NSMutableData *pdfData = [NSMutableData data];

    // Points the pdf converter to the mutable data object and to the UIView to be converted
    UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil);
    UIGraphicsBeginPDFPage();

    // draws rect to the view and thus this is captured by UIGraphicsBeginPDFContextToData
    [aView drawRect:aView.bounds];

    // remove PDF rendering context
    UIGraphicsEndPDFContext();

    // Retrieves the document directories from the iOS device
    NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);

    NSString* documentDirectory = [documentDirectories objectAtIndex:0];
    NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:aFilename];

    // instructs the mutable data object to write its context to a file on disk
    [pdfData writeToFile:documentDirectoryFilename atomically:YES];
    NSLog(@"documentDirectoryFileName: %@",documentDirectoryFilename);
}

どのように解決するのですか?

なお、以下の方法では 単なるビットマップ を作成するだけで、実際のタイポグラフィを作成するわけではありません。

(void)createPDFfromUIView:(UIView*)aView saveToDocumentsWithFileName:(NSString*)aFilename
{
    // Creates a mutable data object for updating with binary data, like a byte array
    NSMutableData *pdfData = [NSMutableData data];

    // Points the pdf converter to the mutable data object and to the UIView to be converted
    UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil);
    UIGraphicsBeginPDFPage();
    CGContextRef pdfContext = UIGraphicsGetCurrentContext();


    // draws rect to the view and thus this is captured by UIGraphicsBeginPDFContextToData

    [aView.layer renderInContext:pdfContext];

    // remove PDF rendering context
    UIGraphicsEndPDFContext();

    // Retrieves the document directories from the iOS device
    NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);

    NSString* documentDirectory = [documentDirectories objectAtIndex:0];
    NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:aFilename];

    // instructs the mutable data object to write its context to a file on disk
    [pdfData writeToFile:documentDirectoryFilename atomically:YES];
    NSLog(@"documentDirectoryFileName: %@",documentDirectoryFilename);
}

また、インポートしていることを確認します。 QuartzCore/QuartzCore.hをインポートしてください。