buildStringBuffer method

Future<String> buildStringBuffer(
  1. EpubBookRef epubBookRef
)

Implementation

Future<String> buildStringBuffer(EpubBookRef epubBookRef) async {
  // START BUILDING HTML CONTENT TODO: ADJUST FOR VERTICAL DIRECTION
  final htmlBuffer = StringBuffer(
      '<html lang="en">'
          '<head>'
          '<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes, maximum-scale=5">'
          '<style>'
          'body { margin: 0; padding: 0; overflow: hidden; display: flex; flex-direction: column; height: 100vh; touch-action: manipulation;}'
          '.vertical-container {'
          '  display: flex;'
          '  flex-direction: column;' // Vertical arrangement of elements
          '  overflow-y: auto;' // Enable vertical scrolling
          '  overflow-x: hidden;' // Disable horizontal scrolling
          '  width: 100%;'
          '  box-sizing: border-box;'
          '  padding: 0px !important;' // Add padding for spacing
          '}'
          '.vertical-container img {'
          '  max-width: 100%;' // Scale images to fit the container width
          '  margin-bottom: 0px;' // Add spacing between images
          '  object-fit: contain;' // Maintain image aspect ratio
          '}'
          '</style>'
          '</head>'
          '<body>'
          '<div class="vertical-container">');
  //  LOOPING THROUGH THE CONTENT
  final content = epubBookRef.Content;
  final images = content?.Images;

  //  EMBEDDING THE IMAGES
  if (images != null) {
    for (final imageEntry in images.entries) {
      final imageKey = imageEntry.key;
      final imageFileRef = imageEntry.value;

      //  READ BINARY DATA
      final imageData = await imageFileRef.readContentAsBytes();
      // Convert binary content to Base64
      final base64Data = base64Encode(imageData);
      final mimeType = imageFileRef.ContentMimeType ?? 'image/*';

      // Embed image in HTML
      htmlBuffer.writeln(
          '<img src="data:$mimeType;base64,$base64Data" alt="$imageKey" style="max-width: 100%; margin: 10px 0;" />');
    //end if

    }// end for loop
  }

  htmlBuffer.writeln('</div></body></html>');
  return htmlBuffer.toString();
}