2011-08-15 58 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本身。以下举例说明了原则(自2005年起适用于此forum post)。您可以创建一个字符串来即时表现您的图像。一个好的开始可能是这个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]; 

使用QSStrings进行编码以获得您的编码,如果它是图片/ gif,请不要忘记更改文件类型:

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

使用img src中的encodedJpg字符串,就像Matthew上面所做的一样。

这为我解决了一个很大的问题 - 谢谢!

3

可以使用UIWebViewviewPrintFormatter而不是将HTML内容(仅显示文本)配置UIMarkupTextPrintFormatter来打印HTML图像。您可以从本地或远程位置加载内容,然后在您的webViewDidFinishLoad:方法实施中启动打印。

Sample Code可从Apple公司获得(发现于UIWebView类参考)。

4

SWIFT 3: 我花了一段时间来弄清楚这一点,但如果你使用前缀“文件://”,在您的网址的前面,那么它会工作。像这样:

<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