anchor.diff:        throw ImageException('Invalid font archive');
       }
   
  -    String font_str = String.fromCharCodes(font_file.content as List<int>);
  +    /// Remove leading whitespace so xml detection is correct
  +    String font_str = String.fromCharCodes(font_file.content as List<int>).trimLeft();
       XmlDocument xml;
   
  -    if (font_str.startsWith('<font>')) {
  +    /// Added <?xml which may be present, appropriately
  +    if (font_str.startsWith('<?xml') || font_str.startsWith('<font>')) {
         xml = parse(font_str);
         if (xml == null) {
           throw ImageException('Invalid font XML');
  
positive.code:     Map<int, Image> fontPages = {0: page};
  
      XmlDocument doc;
  
      if (fnt.startsWith('<font>')) {
        doc = parse(fnt);
        if (doc == null) {
          throw ImageException('Invalid font XML');
  
negative.code:       n.children.whereType<XmlElement>();
  
    void _parseFnt(XmlDocument xml, Map<int, Image> fontPages, [Archive arc]) {
      /// Rather than check for children, which will also count whitespace as XmlText,
      /// The first child should have the name <font>.
      var docElements = _childElements(xml).toList();
      if (docElements.length != 1 || docElements[0].name.toString() != 'font') {
        throw ImageException('Invalid font XML');
      }
  
      var font = docElements[0];
  
      for (var c in _childElements(font)) {
        String name = c.name.toString();
  