2011-08-15 9 views
5

は、私が印刷したい文字列です:UIMarkupTextPrintFormatterを使用してローカルHTMLを印刷するにはどうすればよいですか?ここ

<p><img src="/Users/Max/Library/Application Support/iPhone Simulator/4.3/Applications/5FCCB847-52D9-48F4-A900-459C6A77A5A6/Documents/18/logo18_lg.jpg" alt="" height="72" /></p> 

これは私が自分のアプリケーション内で発生している大きなHTMLページの小さな断片である、と私はそうのようなプリントにこれに渡しています:

UIMarkupTextPrintFormatter *html = [[UIMarkupTextPrintFormatter alloc] initWithMarkupText:printContents]; 

上記のイメージスニペットを含め、印刷する必要があるすべてのHTMLが印刷内容に含まれています。印刷されていない画像を除いて、印刷は大きく機能します。

答えて

4

私は矛盾するのが大好きですが、私はあなたが仕事に見ているのアプローチを得ることができるとは思いません。回避策は、HTML自体にイメージを埋め込むことです。以下はその原則を示しています(forum postから2005年に適応)。その場でイメージを表現する文字列を作成することができます。始めるのに適した場所はstackoverflow questionです。

- (void) buttonTapped; 
{ 
    NSString* printContents = @"This is a work around <IMG SRC=\"data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAwAAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUU lvONmOZtfzgFzByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSpa/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQ ZXZeYGejmJlZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwv KOzrcd3iq9uisF81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PHhhx4dbgYKAAA7\">"; 

    UIMarkupTextPrintFormatter *html = [[UIMarkupTextPrintFormatter alloc] initWithMarkupText:printContents]; 
    UIPrintInteractionController* printController = [UIPrintInteractionController sharedPrintController]; 
    [printController setPrintFormatter:html]; 
    [printController presentAnimated:YES completionHandler:^(UIPrintInteractionController *printInteractionController, BOOL completed, NSError *error) { 
     // 
    }]; 

} 
+0

素晴らしいことができます - どこであなたは上記のあなたの頭の画像を生成するために使用されるライブラリ? – Slee

2

上記の提案は、あなたがそれを行うために必要なもので、ここで、完璧に動作します:

ダウンロードしてプロジェクトにこれを追加します。https://github.com/mikeho/QSUtilities

はNSDataのにあなたのファイルをロードします。

NSData *logo = [[NSData alloc] initWithContentsOfFile:filePath]; 

QSStringを使用してエンコードしてエンコードする場合は、画像/ gifの場合はファイルタイプを変更するのを忘れないでください:

NSString *encodedJpg = [NSString stringWithFormat:@"data:image/jpg;base64,%@",[QSStrings encodeBase64WithData:logo]]; 

マシューは、上記のようにやったのIMG SRCにencodedJpg文字列を使用します。

これは私にとって大きな問題を解決しました - ありがとうございます!

3

UIMarkupTextPrintFormatterにテキストを印刷するだけでなく、UIMarkupTextPrintFormatterを設定する代わりに、UIWebViewviewPrintFormatterを使用して画像とともにHTMLを印刷することができます。ローカルまたはリモートのいずれかの場所からコンテンツをロードしてから、webViewDidFinishLoad:メソッド実装で印刷を開始できます。

Sample Code

は(UIWebViewクラスに関して見出さ)アップルから入手可能です。

4

SWIFT 3: それはこれを理解するために私にしばらく時間がかかったが、あなたは接頭辞「ファイル://」を使用する場合は、あなたのURLの前にし、それがうまくいきます。これと同じように:

<p><img src="file:///Users/Max/Library/Application Support/iPhone Simulator/4.3/Applications/5FCCB847-52D9-48F4-A900-459C6A77A5A6/Documents/18/logo18_lg.jpg" alt="" height="72" /></p> 

希望これは

+1

実際には、UIMarkupTextPrintFormatter()を呼び出してからしばらく待つ必要があります。レンダリングには時間がかかるので、すぐにpdfに書き出すと、画像のレンダリングが完了せず、pdfドキュメントには表示されません。これに関する詳細:https://stackoverflow.com/questions/40239515/uimarkuptextprintformatter-never-renders-base64-images –

+1

これは実際には、Base64ハックを使用する必要はありません。 –

+0

これは受け入れられる回答ですが、UIMarkupTextPrintFormatterが画像のレンダリングを終了するまでに少し待たなければならない編集が必要です – KaraBenNemsi

関連する問題