10

これまで、私のアプリは確認をプレーンHTMLとして生成し、そのHTMLを通常のMFMailComposeViewControllerに渡して、顧客にメールで送信していました。iOS 4.2の新しい印刷クラスを利用して、代わりにHTMLをPDFにレンダリングし、それを添付ファイルとして送信したいと思いました。

私は次のことを試しました:

NSString *html = /* generate my HTML here */
NSMutableData *pdfData = [NSMutableData data];
UIMarkupTextPrintFormatter *fmt = [[UIMarkupTextPrintFormatter alloc] 
                                   initWithMarkupText:html];

// Render the html into a PDF
UIGraphicsBeginPDFContextToData( pdfData, CGRectZero, nil );

for (NSInteger i=0; i < [fmt pageCount]; i++)
{
    UIGraphicsBeginPDFPage();
    CGRect bounds = UIGraphicsGetPDFContextBounds();
    [fmt drawInRect:bounds forPageAtIndex:i];
}

UIGraphicsEndPDFContext();

問題は、[fmt pageCount]常にゼロを返すため、実際のページコンテンツがPDFNSDataにレンダリングされないことです。

HTMLをPDFに変換するために実際の印刷ジョブの外でUIMarkupTextPrintFormatterを使用して運が良かった人はいますか?どんな助けでも大歓迎です。

4

3 に答える 3

4

印刷フォーマッター(UIMarkupTextPrintFormatterを含む)は、システムが引き継いで印刷ジョブを開始すると、印刷の直前まで実際にレンダリング/描画されないようです。(Appleのドキュメントによると、drawRect:は、印刷ジョブのコンテンツを提供するために印刷の直前に呼び出されます。)

私は基本的に同じことをする必要があるので、誰かが私が間違っていることを証明してください:)

于 2010-12-08T02:15:00.800 に答える
4

私は自分のアプリの1つでこれを行います。ここで、同様の質問に対する私の答えを参照してください。

iOSでXML/HTMLテンプレートからPDFファイルを生成する方法はありますか?

于 2012-04-28T03:35:34.510 に答える
1

私は発見しました。これは、プライベートAPIを使用する意思があるか、使用を許可されている場合に可能です。(たとえば、エンタープライズアプリの場合)。

方法:通常どおりフォーマッターを作成します。UIPrintPageRendererにインストールします。

レンダラーのプライベートプロパティpaperRectprintableRect適切に設定します。

numberOfPages今は動作します!

通常のようにpdfcgcontextを設定し、レンダラーのdrawPageAtIndex:inRect:メソッドを使用してページを描画します。聖なる牛、それは働いた。

[ppr setValue:[NSValue valueWithCGRect:page] forKey:@"paperRect"];義務的な抗議:はい、Appleはあなたが(例えば)呼び出してそれらをバウンスするアプリを提出することを望んでいないことを知っています。

于 2011-11-15T18:08:39.737 に答える