qunitamaのモノづくりブログ

レザークラフトなど、モノづくりのブログです

Noteshelf 2 テンプレート

普段、iPad miniで利用しているNoteshelf2、標準のテンプレートはとても素晴らしいのですが、細かめのグラフ用紙のテンプレートが欲しかったので自作する事にしました。

作成ツール

普段はInkscapeExcelなどで作るのですが、miniではないiPadやGoodnotes5などでも使う可能性があり、毎回微調整しながら作成するのは大変なので、PerlImageMagickで作る事にしました。

作成ポイント

スクリプトを作る際、下記の点を実現出来るようにしました。

  • 作成するPDFは描画エリアピッタリの縦横比
  • グラフの1マスの長さをmmで指定出来るようにする
  • 線の太さと色を指定出来るようにする

実行環境

PerlImageMagickのconvertコマンドが使用出来る環境でしたら、おそらく動くと思われます。私はWIndows10環境にcygwinをインストール後、PerlImageMagickをインストールして動かしました。

注意事項

  • スクリプトはファイルを生成します。生成するファイル名はスクリプト内で指定していますが、既存のファイル名を指定した場合、上書きされてしまいますのでご注意下さい。
  • 実行は自己責任でお願いします。

スクリプト

 完成したPerlスクリプトです。

グラフ用紙版

#!/usr/bin/perl
# ---------------------------------------------------------------
# Script Name : Template Create Script for Note Application
#
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------
# --- 固定値
# ---------------------------------------------------------------
$MM_PER_IN = 25.4;   # 1インチは25.4mm
$FILE_WK1 = "wk_graph_1.png"; #ワークファイル名
$FILE_WK2 = "wk_graph_2.png"; #ワークファイル名
$FILE_PDF = "NS_graph.pdf"; #出力PDFファイル名

# ---------------------------------------------------------------
# --- アプリの用紙エリアの実寸を記入 機種:iPad mini アプリ:Noteshelf
# ---------------------------------------------------------------
$PAPER_AREA_X_MM_NS_IPADMINI  = 120; #縦置き時の横幅をmmで記入
$PAPER_AREA_Y_MM_NS_IPADMINI  = 150; #縦置き時の縦幅をmmで記入
$PAPER_AREA_X_PIX_NS_IPADMINI = 1536; #縦置き時の横幅をピクセルで記入

#縦置き時の縦幅(自動計算)
$PAPER_AREA_Y_PIX_NS_IPADMINI = int($PAPER_AREA_X_PIX_NS_IPADMINI
				* $PAPER_AREA_Y_MM_NS_IPADMINI
				/ $PAPER_AREA_X_MM_NS_IPADMINI);

# ---------------------------------------------------------------
# --- 描画する方眼のサイズをmmで指定
# ---------------------------------------------------------------
$HOUGAN_SIZE_MM = 1;

# ---------------------------------------------------------------
# --- 太線指定
# --- 5を指定すれば5本目は太線,0で太線なし
# ---------------------------------------------------------------
$FUTOSEN_STEP = 5;

# ---------------------------------------------------------------
# --- タイトル区切り線の位置を指定
# --- 10を指定すれば10本目は太線,0で区切り線なし
# ---------------------------------------------------------------
$KUGIRISEN_POS = 10;

# ---------------------------------------------------------------
# --- 機種とアプリを指定
# ---------------------------------------------------------------
$PDF_X_MM  = $PAPER_AREA_X_MM_NS_IPADMINI;
$PDF_Y_MM  = $PAPER_AREA_Y_MM_NS_IPADMINI;
$IMG_X_PIX = $PAPER_AREA_X_PIX_NS_IPADMINI;
$IMG_Y_PIX = $PAPER_AREA_Y_PIX_NS_IPADMINI;

# ---------------------------------------------------------------
# --- 生成倍率を指定 実寸で生成すると実際に書いた時の線が
# --- 太いので2,3倍の大きさで生成
# ---------------------------------------------------------------
$BAIRITSU = 2.4;

# ---------------------------------------------------------------
# --- 生成サイズを計算
# ---------------------------------------------------------------
$PDF_X_MM  *= $BAIRITSU;
$PDF_Y_MM  *= $BAIRITSU;
$IMG_X_PIX *= $BAIRITSU;
$IMG_Y_PIX *= $BAIRITSU;

$HOUGAN_SIZE_MM *= $BAIRITSU;

# ---------------------------------------------------------------
# --- DPI計算
# ---------------------------------------------------------------
$PDF_DPI = $IMG_X_PIX / ($PDF_X_MM / $MM_PER_IN);

# ---------------------------------------------------------------
# --- 描画する方眼のピクセル数を自動計算
# ---------------------------------------------------------------
$HOUGAN_SIZE_PIX = $IMG_X_PIX / $PDF_X_MM * $HOUGAN_SIZE_MM;

# ---------------------------------------------------------------
# --- 色指定,太さ指定
# ---------------------------------------------------------------
$PAPER_COLOR    = "#fafbfb";

$LINE_USU_COLOR = "#cccccc"; #薄い線の色
$LINE_USU_WIDTH = "1";       #薄い線の幅

$LINE_KOI_COLOR = "#767676"; #濃い線の色
$LINE_KOI_WIDTH = "2";       #濃い線の幅

$LINE_KUG_COLOR = "#767676"; #タイトル区切り線の色
$LINE_KUG_WIDTH = "4";       #タイトル区切り線の幅

# ---------------------------------------------------------------
# --- 描画ルーチン
# ---------------------------------------------------------------
sub line_draw {

	my ($x1,$y1,$x2,$y2,$col,$width) = @_;

        $cmd = sprintf("convert -stroke xc:%s -strokewidth".
                        " %s -draw 'line %d,%d %d,%d' %s %s",
                        $col,$width,$x1,$y1,$x2,$y2,
                        $FILE_WK1,$FILE_WK2);

	system($cmd);
	$cmd = sprintf("mv %s %s",$FILE_WK2,$FILE_WK1); 
	system($cmd);
}

# ---------------------------------------------------------------
# --- 生成処理開始
# ---------------------------------------------------------------
# 用紙生成
$cmd = sprintf("convert -size %dx%d xc:%s %s",
		$IMG_X_PIX,$IMG_Y_PIX,$PAPER_COLOR,$FILE_WK1); 
system($cmd);

# 縦線描画
$wk_x = $HOUGAN_SIZE_PIX;
$count = 1;
while($wk_x < $IMG_X_PIX){
	if ($FUTOSEN_STEP>0 && $count % $FUTOSEN_STEP == 0){
		line_draw($wk_x,0,$wk_x,$IMG_Y_PIX,
			$LINE_KOI_COLOR,$LINE_KOI_WIDTH);
	}else{
		line_draw($wk_x,0,$wk_x,$IMG_Y_PIX,
			$LINE_USU_COLOR,$LINE_USU_WIDTH);
	}
	$wk_x += $HOUGAN_SIZE_PIX;
	$count++;
}
# 横線描画
$wk_y = $HOUGAN_SIZE_PIX;
$count = 1;
while($wk_y < $IMG_Y_PIX){
	if ($FUTOSEN_STEP>0 && $count % $FUTOSEN_STEP == 0){
		line_draw(0,$wk_y,$IMG_X_PIX,$wk_y,
			$LINE_KOI_COLOR,$LINE_KOI_WIDTH);
	}else{
		line_draw(0,$wk_y,$IMG_X_PIX,$wk_y,
			$LINE_USU_COLOR,$LINE_USU_WIDTH);
	}
	$wk_y += $HOUGAN_SIZE_PIX;
	$count++;
}
# 区切り線描画

if ($KUGIRISEN_POS>0){
	$wk_y = $HOUGAN_SIZE_PIX * $KUGIRISEN_POS;
	line_draw(0,$wk_y,$IMG_X_PIX,$wk_y,
			$LINE_KUG_COLOR,$LINE_KUG_WIDTH);
}

# PDFに変換して完成

$cmd = sprintf("convert -density %d -geometry %dx%d %s %s",
	$PDF_DPI,$IMG_X_PIX,$IMG_Y_PIX,$FILE_WK1,$FILE_PDF);
system($cmd);

5mm方眼用紙版

#!/usr/bin/perl
# ---------------------------------------------------------------
# Script Name : Template Create Script for Note Application
#
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------
# --- 固定値
# ---------------------------------------------------------------
$MM_PER_IN = 25.4;   # 1インチは25.4mm
$FILE_WK1 = "wk_grid_1.png"; #ワークファイル名
$FILE_WK2 = "wk_grid_2.png"; #ワークファイル名
$FILE_PDF = "NS_grid.pdf"; #出力PDFファイル名

# ---------------------------------------------------------------
# --- アプリの用紙エリアの実寸を記入 機種:iPad mini アプリ:Noteshelf
# ---------------------------------------------------------------
$PAPER_AREA_X_MM_NS_IPADMINI  = 120; #縦置き時の横幅をmmで記入
$PAPER_AREA_Y_MM_NS_IPADMINI  = 150; #縦置き時の縦幅をmmで記入
$PAPER_AREA_X_PIX_NS_IPADMINI = 1536; #縦置き時の横幅をピクセルで記入

#縦置き時の縦幅(自動計算)
$PAPER_AREA_Y_PIX_NS_IPADMINI = int($PAPER_AREA_X_PIX_NS_IPADMINI
				* $PAPER_AREA_Y_MM_NS_IPADMINI
				/ $PAPER_AREA_X_MM_NS_IPADMINI);

# ---------------------------------------------------------------
# --- 描画する方眼のサイズをmmで指定
# ---------------------------------------------------------------
$HOUGAN_SIZE_MM = 5;

# ---------------------------------------------------------------
# --- 太線指定
# --- 5を指定すれば5本目は太線,0で太線なし
# ---------------------------------------------------------------
$FUTOSEN_STEP = 0;

# ---------------------------------------------------------------
# --- タイトル区切り線の位置を指定
# --- 10を指定すれば10本目は太線,0で区切り線なし
# ---------------------------------------------------------------
$KUGIRISEN_POS = 2;

# ---------------------------------------------------------------
# --- 機種とアプリを指定
# ---------------------------------------------------------------
$PDF_X_MM  = $PAPER_AREA_X_MM_NS_IPADMINI;
$PDF_Y_MM  = $PAPER_AREA_Y_MM_NS_IPADMINI;
$IMG_X_PIX = $PAPER_AREA_X_PIX_NS_IPADMINI;
$IMG_Y_PIX = $PAPER_AREA_Y_PIX_NS_IPADMINI;

# ---------------------------------------------------------------
# --- 生成倍率を指定 実寸で生成すると実際に書いた時の線が
# --- 太いので2,3倍の大きさで生成
# ---------------------------------------------------------------
$BAIRITSU = 2.4;

# ---------------------------------------------------------------
# --- 生成サイズを計算
# ---------------------------------------------------------------
$PDF_X_MM  *= $BAIRITSU;
$PDF_Y_MM  *= $BAIRITSU;
$IMG_X_PIX *= $BAIRITSU;
$IMG_Y_PIX *= $BAIRITSU;

$HOUGAN_SIZE_MM *= $BAIRITSU;

# ---------------------------------------------------------------
# --- DPI計算
# ---------------------------------------------------------------
$PDF_DPI = $IMG_X_PIX / ($PDF_X_MM / $MM_PER_IN);

# ---------------------------------------------------------------
# --- 描画する方眼のピクセル数を自動計算
# ---------------------------------------------------------------
$HOUGAN_SIZE_PIX = $IMG_X_PIX / $PDF_X_MM * $HOUGAN_SIZE_MM;

# ---------------------------------------------------------------
# --- 色指定,太さ指定
# ---------------------------------------------------------------
$PAPER_COLOR    = "#fafbfb";

$LINE_USU_COLOR = "#767676"; #薄い線の色
$LINE_USU_WIDTH = "2";       #薄い線の幅

$LINE_KOI_COLOR = "#767676"; #濃い線の色
$LINE_KOI_WIDTH = "2";       #濃い線の幅

$LINE_KUG_COLOR = "#767676"; #タイトル区切り線の色
$LINE_KUG_WIDTH = "4";       #タイトル区切り線の幅

# ---------------------------------------------------------------
# --- 描画ルーチン
# ---------------------------------------------------------------
sub line_draw {

	my ($x1,$y1,$x2,$y2,$col,$width) = @_;

        $cmd = sprintf("convert -stroke xc:%s -strokewidth".
                        " %s -draw 'line %d,%d %d,%d' %s %s",
                        $col,$width,$x1,$y1,$x2,$y2,
                        $FILE_WK1,$FILE_WK2);

	system($cmd);
	$cmd = sprintf("mv %s %s",$FILE_WK2,$FILE_WK1); 
	system($cmd);
}

# ---------------------------------------------------------------
# --- 生成処理開始
# ---------------------------------------------------------------
# 用紙生成
$cmd = sprintf("convert -size %dx%d xc:%s %s",
		$IMG_X_PIX,$IMG_Y_PIX,$PAPER_COLOR,$FILE_WK1); 
system($cmd);

# 縦線描画
$wk_x = $HOUGAN_SIZE_PIX;
$count = 1;
while($wk_x < $IMG_X_PIX){
	if ($FUTOSEN_STEP>0 && $count % $FUTOSEN_STEP == 0){
		line_draw($wk_x,0,$wk_x,$IMG_Y_PIX,
			$LINE_KOI_COLOR,$LINE_KOI_WIDTH);
	}else{
		line_draw($wk_x,0,$wk_x,$IMG_Y_PIX,
			$LINE_USU_COLOR,$LINE_USU_WIDTH);
	}
	$wk_x += $HOUGAN_SIZE_PIX;
	$count++;
}
# 横線描画
$wk_y = $HOUGAN_SIZE_PIX;
$count = 1;
while($wk_y < $IMG_Y_PIX){
	if ($FUTOSEN_STEP>0 && $count % $FUTOSEN_STEP == 0){
		line_draw(0,$wk_y,$IMG_X_PIX,$wk_y,
			$LINE_KOI_COLOR,$LINE_KOI_WIDTH);
	}else{
		line_draw(0,$wk_y,$IMG_X_PIX,$wk_y,
			$LINE_USU_COLOR,$LINE_USU_WIDTH);
	}
	$wk_y += $HOUGAN_SIZE_PIX;
	$count++;
}
# 区切り線描画

if ($KUGIRISEN_POS>0){
	$wk_y = $HOUGAN_SIZE_PIX * $KUGIRISEN_POS;
	line_draw(0,$wk_y,$IMG_X_PIX,$wk_y,
			$LINE_KUG_COLOR,$LINE_KUG_WIDTH);
}

# PDFに変換して完成

$cmd = sprintf("convert -density %d -geometry %dx%d %s %s",
	$PDF_DPI,$IMG_X_PIX,$IMG_Y_PIX,$FILE_WK1,$FILE_PDF);
system($cmd);

完成したPDF

完成したPDFを置いておきますので、ご自由にお使い下さい。

グラフ用紙版

5mm方眼用紙版