如何使用UIMarkupTextPrintFormatter打印带有本地图像的本地html?

时间:2011-08-15 18:41:49

标签: iphone objective-c ipad

这是我要打印的字符串:

<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 个答案:

答案 0 :(得分: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) {
        //
    }];

}

答案 1 :(得分:4)

可以使用UIWebView的{​​{1}}打印包含图像的HTML,而不是使用HTML内容(仅打印文本)配置viewPrintFormatter。您可以从本地或远程位置加载内容,然后在UIMarkupTextPrintFormatter方法实现中启动打印。

Apple提供了

Sample Code(可在webViewDidFinishLoad:课程参考中找到)。

答案 2 :(得分:4)

SWIFT 3: 我花了一段时间来解决这个问题,但是如果你使用前缀&#34; file://&#34;在您的网址前面,它会工作。像这样:

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

希望这有帮助

答案 3 :(得分:2)

上述建议完美无缺,以下是您需要做的事情:

下载并将其添加到您的项目中:https://github.com/mikeho/QSUtilities

将您的文件加载到NSData:

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

使用QSStrings进行编码以获取编码,如果是image / gif,请不要忘记更改文件类型:

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

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

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