diff --git a/core/core.libraries.yml b/core/core.libraries.yml
index 179382b..8d53222 100644
--- a/core/core.libraries.yml
+++ b/core/core.libraries.yml
@@ -228,6 +228,12 @@ drupal.machine-name:
     - core/drupalSettings
     - core/drupal.form
 
+drupal.print:
+  version: VERSION
+  css:
+    theme:
+      misc/print.css: { media: print }
+
 drupal.progress:
   version: VERSION
   js:
diff --git a/core/modules/book/book.module b/core/modules/book/book.module
index e80b5e3..cd1e580 100644
--- a/core/modules/book/book.module
+++ b/core/modules/book/book.module
@@ -468,7 +468,6 @@ function template_preprocess_book_export_html(&$variables) {
   $variables['base_url'] = $base_url;
   $variables['language'] = $language_interface;
   $variables['language_rtl'] = ($language_interface->getDirection() == LanguageInterface::DIRECTION_RTL);
-  $variables['head'] = drupal_get_html_head();
 
   // HTML element attributes.
   $attributes = array();
diff --git a/core/modules/book/src/Controller/BookController.php b/core/modules/book/src/Controller/BookController.php
index 53c64ad..31801b8 100644
--- a/core/modules/book/src/Controller/BookController.php
+++ b/core/modules/book/src/Controller/BookController.php
@@ -166,7 +166,15 @@ public function bookExport($type, NodeInterface $node) {
     }
 
     $exported_book = $this->bookExport->{$method}($node);
-    return new Response($this->renderer->renderRoot($exported_book));
+    // @todo: Inject this service on creation.
+    $renderer = \Drupal::service('bare_html_page_renderer');
+    return new Response(
+      $renderer->renderBarePage(
+        $exported_book,
+        empty($exported_book['#title']) ? $node->getTitle() : $exported_book['#title'],
+        empty($exported_book['#theme']) ? 'book_export_html' : $exported_book['#theme']
+      )
+    );
   }
 
 }
diff --git a/core/modules/book/templates/book-export-html.html.twig b/core/modules/book/templates/book-export-html.html.twig
index 5fb2e97..1799b9b 100644
--- a/core/modules/book/templates/book-export-html.html.twig
+++ b/core/modules/book/templates/book-export-html.html.twig
@@ -24,7 +24,7 @@
     <title>{{ title }}</title>
     {{ page.head }}
     <base href="{{ base_url }}" />
-    <link type="text/css" rel="stylesheet" href="misc/print.css" />
+    {{ attach_library('core/drupal.print') }}
   </head>
   <body>
     {#
diff --git a/core/themes/classy/templates/layout/book-export-html.html.twig b/core/themes/classy/templates/layout/book-export-html.html.twig
deleted file mode 100644
index ea33648..0000000
--- a/core/themes/classy/templates/layout/book-export-html.html.twig
+++ /dev/null
@@ -1,45 +0,0 @@
-{#
-/**
- * @file
- * Theme override for printed version of book outline.
- *
- * Available variables:
- * - title: Top level node title.
- * - head: Header tags.
- * - language: Language object.
- * - language_rtl: A flag indicating whether the current display language is a
- *   right to left language.
- * - base_url: URL to the home page.
- * - contents: Nodes within the current outline rendered through
- *   book-node-export-html.html.twig.
- *
- * @see template_preprocess_book_export_html()
- */
-#}
-<!DOCTYPE html>
-<html{{ html_attributes }}>
-  <head>
-    <title>{{ title }}</title>
-    {{ page.head }}
-    <base href="{{ base_url }}" />
-    <link type="text/css" rel="stylesheet" href="misc/print.css" />
-  </head>
-  <body>
-    {#
-      The given node is embedded to its absolute depth in a top level section.
-      For example, a child node with depth 2 in the hierarchy is contained in
-      (otherwise empty) div elements corresponding to depth 0 and depth 1. This
-      is intended to support WYSIWYG output - e.g., level 3 sections always look
-      like level 3 sections, no matter their depth relative to the node selected
-      to be exported as printer-friendly HTML.
-    #}
-
-  {% for i in 1..depth-1 if depth > 1 %}
-    <div class="section-{{ i }}">
-  {% endfor %}
-  {{ contents }}
-  {% for i in 1..depth-1 if depth > 1 %}
-    </div>
-  {% endfor %}
-  </body>
-</html>
