Как добавить изображения в UIMarkupTextPrintFormatter? - PullRequest
12 голосов
/ 14 августа 2011

Я пытаюсь напечатать файл с использованием обычного HTML, однако у меня возникают трудности с добавлением изображений в файл для печати.

Как я могу ссылаться на изображения в моем проекте в HTML, который я хочу напечатать?Поддерживает ли UIMarkupTextPrintFormatter теги?

Ответы [ 3 ]

11 голосов
/ 16 августа 2011

На самом деле все гораздо проще, чем я думал:

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

Затем вы можете поместить путь к изображению в <img>, и он будет отображать изображение! Voila!

4 голосов
/ 24 апреля 2013

Я занимался этим весь день, и, как бы я ни включал изображения в свои задания на печать, всегда кажется, что они не отображаются.Я пробовал несколько методов.1) Base64 встраивание данных изображения, 2) URL пути к файлу, например."file: /// localhost / ...", 3) Строковые пути к файлам "/ Applications / ....".Я хранил изображения в своей папке Documents для песочницы, и ничего не отрисовалось.Все остальное в 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

Тот же HTML, отображаемый в сафари на компьютере разработчика

Safari render

1 голос
/ 13 августа 2016

Локально Изображения должны быть сначала помещены в 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)
...