2011-08-14 28 views
9

私はストレートHTMLを使用してファイルを印刷しようとしていますが、印刷ファイルに画像を追加するのが難しいです。UIMarkupTextPrintFormatterでイメージを追加するには?

プロジェクト内のイメージを、印刷したいHTML形式で参照するにはどうすればよいですか? UIMarkupTextPrintFormatterタグをサポートしていますか?

答えて

10

それは実際に私が思ったよりもはるかに簡単です:

NSString *yourImagePath = [[[NSBundle mainBundle] URLForResource:@"resource" withExtension:@"extension"] absoluteString]; 

次にあなたが<img>に画像パスを置くことができ、それが画像をレンダリングします! Voila!

+1

それは私にとってはうまくいかないようです。私はこのようなことをします: JonEasy

+1

'UIPrintInteractionController'に与えられたときにはうまく動作しますが、' UIGraphicsBeginPDFContextToData'でPDFファイルを作成しようとしたときには動作しません – ReDetection

3

私はこの一日中、印刷ジョブにイメージを組み込んでも、いつもそれらをレンダリングしていないようです。私は複数の方法を試みました。 1)Base64埋め込み画像データ、2)ファイルパスURL。 "file:/// localhost/..."、3)文字列ベースのファイルパス "/ Applications/...."。私はサンドボックスのDocumentsディレクトリにイメージを格納していて、何もレンダリングされていません。 pdfの他のすべては問題ありません。私も上記を試みたが、バンドルからの画像さえもレンダリングされないので役に立たない。何がありますか?私もhtmlをファイルに入れて、コンピュータ上のサファリにロードしました(シミュレータのテストでは絶対パスは同じです)。

ソース

+ (NSData*)renderMarkup:(NSString*)markup 
{ 
    UIMarkupTextPrintFormatter *formatter = [[UIMarkupTextPrintFormatter alloc] initWithMarkupText:markup]; 

    SBAnnotationPrintPageRenderer *renderer = [[SBAnnotationPrintPageRenderer alloc] init]; 
    [renderer addPrintFormatter:formatter startingAtPageAtIndex:0]; 
    renderer.footerHeight = 10; 
    renderer.headerHeight = 10; 

    NSMutableData * pdfData = [NSMutableData data]; 
    UIGraphicsBeginPDFContextToData(pdfData, CGRectZero, nil); 

    for (NSInteger i = 0; i < [renderer numberOfPages]; i++) 
    { 
    UIGraphicsBeginPDFPage(); 

    CGRect bounds = UIGraphicsGetPDFContextBounds(); 
    [renderer drawPageAtIndex:i inRect:bounds]; 
    } 

    UIGraphicsEndPDFContext(); 

    return pdfData; 
} 

そして、生成されたHTML

<table> 
    <tr> 
     <td> 
      <img style='background-color:blue;' src='/Users/zachthayer/Library/Application Support/iPhone Simulator/6.1/Applications/A47C1BDF-DCD1-49A5-A452-59802AEC2A94/Documents/29161AFF-BE35-4EEE-A7A1-ACF2DA9ABA71.png'/> 
     </td> 
     <td> 
      <h2>Superadmin</h2> 
      <i>00:00:00:00</i> 
      <p>Test note</p> 
     </td> 
    </tr> 
</table> 

れ、レンダリングPDF

Rendered PDF

開発コンピュータ上のSafariでレンダリング

同じHTML

Safari render

+0

だから何ですか? PDFが正しくレンダリングされません。 –

1

ローカルLocally ImagesはimageView内に置かれ、次にbase64値に変換され、htmlのimageタグ内で使用されます。

let imageData:NSData = UIImagePNGRepresentation(imageView.image!)! 
let strBase64:String = imageData.base64EncodedStringWithOptions(.Encoding64CharacterLineLength) 
var imageTag = String(format: "<img src=\"data:image/png;base64,%@\"", strBase64) 
+0

最悪のコード。なぜ 。 Encoding64CharacterLineLength? –

関連する問題