【问题标题】:how do I use UIMarkupTextPrintFormatter to print a local html with local images?如何使用 UIMarkupTextPrintFormatter 打印带有本地图像的本地 html?
【发布时间】:2011-10-27 12:03:42
【问题描述】:

这是我要打印的字符串:

<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 页面的一小部分,我将其传递给 print,如下所示:

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

其中打印内容包含我需要打印的所有 html,包括上面的图像 sn-p。除了不打印的图像外,打印效果很好。

【问题讨论】:

    标签: iphone objective-c ipad


    【解决方案1】:

    我很想被反驳,但我不认为你可以得到你正在寻找的方法来工作。一种解决方法是将图像嵌入到 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) {
            //
        }];
    
    }
    

    【讨论】:

    • 太棒了 - 你用来生成上面头像的库在哪里?
    【解决方案2】:

    可以使用UIWebViewviewPrintFormatter 打印带有图像的HTML,而不是使用HTML 内容配置UIMarkupTextPrintFormatter(它只会打印文本)。您可以从本地或远程位置加载您的内容,然后在您的 webViewDidFinishLoad: 方法实现中启动打印。

    Sample Code 可从 Apple 获得(可在 UIWebView 类参考中找到)。

    【讨论】:

      【解决方案3】:

      SWIFT 3: 我花了一些时间才弄清楚这一点,但如果您在 URL 前使用前缀“file://”,那么它会起作用。像这样:

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

      希望对你有帮助

      【讨论】:

      • 其实调用 UIMarkupTextPrintFormatter() 后还需要等待一段时间。渲染需要一些时间,因此如果您立即导出为 pdf,您的图像还没有完成渲染,并且不会显示在 pdf 文档中。更多信息在这里:stackoverflow.com/questions/40239515/…
      • 这应该是公认的答案,但编辑后您必须等待一小段时间让 UIMarkupTextPrintFormatter 完成图像的渲染
      【解决方案4】:

      上述建议非常有效,您需要这样做:

      下载并将其添加到您的项目中: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]];
      

      像 Matthew 上面那样在 img src 中使用 encodedJpg 字符串。

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

      【讨论】:

        猜你喜欢
        • 2019-09-09
        • 1970-01-01
        • 2023-02-14
        • 2015-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-31
        • 1970-01-01
        相关资源
        最近更新 更多