1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

中学生が作った自分だけのMarkdownエディターに部分印刷機能をつけたお話

Posted at

はじめに

先日、「中学生が自分だけのMarkdownエディターを作ってみた話」というふざけたタイトルで記事を投稿させていただいたのですが、本日はそのエディターに印刷機能をつけたお話です。

便利なので、もしよければ使ってみてください。

コード

document.getElementById('print-btn').addEventListener('click', () => {
            	// 印刷用にiframeを作成する
            	const iframe = document.createElement('iframe');
            	iframe.srcdoc = "<!DOCTYPE html>";
            	document.body.appendChild(iframe);
            	iframe.style.display = 'none';
            	iframe.onload = () => {
            		iframe.contentDocument.body.appendChild(document.getElementById('preview').cloneNode(true));
            		document.querySelectorAll("link[rel='stylesheet']").forEach(el => iframe.contentDocument.head.appendChild(el.cloneNode(true)))
            		iframe.contentWindow.print();
            		iframe.contentWindow.addEventListener('afterprint', () => iframe.remove());
            	}
            })

iflameに内容をつけたし、それを印刷する形を取りました。
idがpreviewdivだけを印刷したかったので、そんな方法を調べたところ、行き着いた方法です。

overviewにハマった!

ただ、この方法だとマークダウンの限られたところしか表示されない。
Markdownを短くするために、編集しているところ以外はスクロールできるようにしたのですが、その関係で表示されるところしか印刷できないようになってしまいました。

解決

cssのoverview<head>内の<style>で読み込むように。
そして、iflameには外部スタイルシートのデザインしか読み込まないよう変更し、解決しました。

参考文献

サイトを参考にさせていただきました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?