qunitamaのモノづくりブログ

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

GoodNotes 5 テンプレート

前回、iPad mini用のNoteshelf 2 のテンプレートを公開しましたが、
qunitama.hatenablog.com
GoodNotes 5 のテンプレートも作成してみましたので公開いたします。

注意事項

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

スクリプト

グラフ用紙版

#!/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 = "GN_graph.pdf";

# ---------------------------------------------------------------------
# --- アプリの用紙エリアの実寸を記入 機種:iPad mini アプリ:Goodnotes
# ---------------------------------------------------------------------
$PAPER_AREA_X_MM_GN_IPADMINI  = 120; #縦置き時の横幅をmmで記入
$PAPER_AREA_Y_MM_GN_IPADMINI  = 137; #縦置き時の縦幅をmmで記入
$PAPER_AREA_X_PIX_GN_IPADMINI = 1536; #縦置き時の横幅をピクセルで記入

#縦置き時の縦幅(自動計算)
$PAPER_AREA_Y_PIX_GN_IPADMINI = int($PAPER_AREA_X_PIX_GN_IPADMINI
				* $PAPER_AREA_Y_MM_GN_IPADMINI
				/ $PAPER_AREA_X_MM_GN_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_GN_IPADMINI;
$PDF_Y_MM  = $PAPER_AREA_Y_MM_GN_IPADMINI;
$IMG_X_PIX = $PAPER_AREA_X_PIX_GN_IPADMINI;
$IMG_Y_PIX = $PAPER_AREA_Y_PIX_GN_IPADMINI;

# ---------------------------------------------------------------------
# --- 生成倍率を指定 実寸で生成すると線が太いので2、3倍の大きさ生成
# ---------------------------------------------------------------------
$BAIRITSU = 1.6;

# ---------------------------------------------------------------------
# --- 生成サイズを計算
# ---------------------------------------------------------------------
$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 = "1";       #濃い線の幅

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

# ---------------------------------------------------------------------
# --- 描画ルーチン
# ---------------------------------------------------------------------
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
# ---------------------------------------------------------------------
# Template Create Script for Note Application
#
#
# ---------------------------------------------------------------------
# --- 固定値
# ---------------------------------------------------------------------
$MM_PER_IN = 25.4;   # 1インチは25.4mm
$FILE_WK1 = "wk_grid_1.png";
$FILE_WK2 = "wk_grid_2.png";
$FILE_PDF = "GN_grid.pdf";

# ---------------------------------------------------------------------
# --- アプリの用紙エリアの実寸を記入 機種:iPad mini アプリ:Goodnotes
# ---------------------------------------------------------------------
$PAPER_AREA_X_MM_GN_IPADMINI  = 120; #縦置き時の横幅をmmで記入
$PAPER_AREA_Y_MM_GN_IPADMINI  = 137; #縦置き時の縦幅をmmで記入
$PAPER_AREA_X_PIX_GN_IPADMINI = 1536; #縦置き時の横幅をピクセルで記入

#縦置き時の縦幅(自動計算)
$PAPER_AREA_Y_PIX_GN_IPADMINI = int($PAPER_AREA_X_PIX_GN_IPADMINI
				* $PAPER_AREA_Y_MM_GN_IPADMINI
				/ $PAPER_AREA_X_MM_GN_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_GN_IPADMINI;
$PDF_Y_MM  = $PAPER_AREA_Y_MM_GN_IPADMINI;
$IMG_X_PIX = $PAPER_AREA_X_PIX_GN_IPADMINI;
$IMG_Y_PIX = $PAPER_AREA_Y_PIX_GN_IPADMINI;

# ---------------------------------------------------------------------
# --- 生成倍率を指定 実寸で生成すると線が太いので2、3倍の大きさ生成
# ---------------------------------------------------------------------
$BAIRITSU = 1.6;

# ---------------------------------------------------------------------
# --- 生成サイズを計算
# ---------------------------------------------------------------------
$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 = "1";       #薄い線の幅

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

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

# ---------------------------------------------------------------------
# --- 描画ルーチン
# ---------------------------------------------------------------------
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方眼用紙版