2011-08-14 3 views

답변

10

사실은 훨씬 간단하게 생각했던 것보다 :

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

그런 다음 당신이 <img>에서 이미지 경로를 넣을 수 있고 이미지를 렌더링합니다! 빌라!

+1

저에게는 효과가없는 것 같습니다. 나는 이런 식으로한다 : JonEasy

+1

'UIPrintInteractionController'에게 먹이를 주었을 때 작동하지만'UIGraphicsBeginPDFContextToData'로 PDF 파일을 만들려고하지 않을 때 – ReDetection

3

나는 하루 종일 있었으며 인쇄 작업에 이미지를 어떻게 사용하던간에 항상 이미지를 렌더링하지 않는 것 같습니다. 나는 여러 가지 방법을 시도했다. 1) Base64 임베딩 이미지 데이터, 2) 파일 경로 URL 예. "file : /// localhost/...", 3) 문자열 기반 파일 경로 "/ Applications/....". 내 샌드 박스 문서 디렉토리에 이미지를 저장하고 아무 것도 렌더링하지 않았습니다. 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

개발 컴퓨터에서 사파리에서 렌더링

동일한 HTML

Safari render

+0

그래서? PDF가 올바르게 렌더링되지 않습니다. –

1

로컬 이미지는 먼저 imageView 내부에 배치 된 다음 base64 값으로 변환되어 이미지 태그 내부에서 사용되어야합니다.

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? –

관련 문제