如何在UIMarkupTextPrintFormatter中添加图像?

时间:2011-08-14 17:43:28

标签: objective-c ios cocoa-touch airprint

我正在尝试使用直接HTML打印文件,但是,我在将图像添加到打印文件时遇到了困难。

如何在我想要打印的HTML中引用项目中的图像? UIMarkupTextPrintFormatter是否支持标签?

3 个答案:

答案 0 :(得分:11)

它实际上比我想象的要简单得多:

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

然后您可以将图像路径放在<img>中,它将渲染图像!瞧!

答案 1 :(得分:4)

我整天都在这里,无论我如何将图像合并到我的打印作业中,它似乎总是无法渲染它们。我尝试了多种方法。 1)Base64嵌入图像数据,2)文件路径URL例如。 “file:/// localhost / ...”,3)基于字符串的文件路径“/ Applications / ....”。我一直在将图像存储在我的沙盒文档目录中,并且没有任何内容呈现出来。 pdf中的其他所有内容都很好。我也尝试了上述内容并且无法使用甚至包中的图像都会呈现出来。是什么赋予了?我甚至把html放到一个文件中并在我的计算机上安装了safari(因为在模拟器中测试绝对路径是相同的)并且它可以工作。

来源

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

答案 2 :(得分:1)

本地图像应首先放在imageView中,然后转换为base64值,并在html中的图像标记内使用它。

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