qunitamaのモノづくりブログ

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

Goodnotes 5 テンプレート生成Perlスクリプト 修正版

iPad miniでのGoodnotes5 描画エリア(複数タブ使用時)は、実寸で横120mm縦136mmです。その座標空間内の座標を指定してテンプレート生成出来るようにスクリプトを修正しました。

注意事項

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

Perlスクリプト

ドット用紙

#!/usr/bin/perl

use utf8;

# ---------------------------------------------------------------------
# Template Create Script for Note Application
#
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# --- 固定値 変更不要
# ---------------------------------------------------------------------
$MM_PER_IN = 25.4; # 1インチは25.4mm

# ---------------------------------------------------------------------
# --- 出力PDFのDPIを指定
# ---------------------------------------------------------------------
$DPI = 300;

# ---------------------------------------------------------------------
# --- 中間ファイル名や出力ファイル名を指定
# --- ユーザ環境に合わせて変更してください
# ---------------------------------------------------------------------
$FILE_WK1 = "wk_1.bmp";
$FILE_WK2 = "wk_2.bmp";
$FILE_WK3 = "wk_3.png";
$FILE_PDF = "GN_dot.pdf";

# ---------------------------------------------------------------------
# --- アプリの用紙エリアの実寸をmmで記入
# --- 機種:iPad mini アプリ:Goodnotes 120x136
# ---------------------------------------------------------------------
$PDF_X_MM = 120; #縦置き時の横幅
$PDF_Y_MM = 136; #縦置き時の縦幅

# ---------------------------------------------------------------------
# --- 生成倍率を指定 実寸で生成すると線が太いので
# --- 生成用紙を大きくする
# ---------------------------------------------------------------------
$BAIRITSU = 1.6;

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

# 色定義
$COL_USU = "#9FA0A0";  # 薄目
$COL_KOI = "#544A47";  # 濃目
$COL_RED = "#d7003a";  # 赤
$COL_BLU = "#007bbb";  # 青

# 線幅定義
$WID_HOS = "1"; # 細
$WID_FUT = "3"; # 太

# FONTを指定
$FONT =	"/cygdrive/c/Windows/Fonts/BIZ-UDGothicR.ttc";

# ---------------------------------------------------------------------
# --- 描画ルーチン *基本的には変更不要
# ---------------------------------------------------------------------
sub z {
    my ($mm) = @_;
    return $DPI / $MM_PER_IN * $mm * $BAIRITSU;
}
sub rew {
    $cmd = sprintf("mv %s %s",$FILE_WK2,$FILE_WK1); 
    system($cmd);
}
sub draw_paper {
    $cmd = sprintf(
                "convert -size %dx%d xc:%s %s",
                z($PDF_X_MM),z($PDF_Y_MM),
                $PAPER_COLOR,$FILE_WK1); 
    system($cmd);
}
sub draw_line {
    my ($x1,$y1,$x2,$y2,$col,$width) = @_;

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

    rew;
}
sub draw_tatesen {
    my ($x,$y,$takasa,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        draw_line(
            $x+$kankaku*$i,$y,
            #$x+$kankaku*$i,$y+$takasa-1,
            $x+$kankaku*$i,$y+$takasa,
            $col,$width);
    }
}
sub draw_yokosen {
    my ($x,$y,$haba,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        draw_line(
            $x,$y+$kankaku*$i,
            #$x+$haba-1,$y+$kankaku*$i,
            $x+$haba,$y+$kankaku*$i,
            $col,$width);
    }
}
sub draw_dot {
    my ($cx,$cy,$x,$y,$col) = @_;

    $cmd = sprintf(
                "convert -fill xc:%s ".
                "-draw 'circle %d,%d %d,%d' %s %s",
                $col,z($cx),z($cy),z($x),z($y),
                $FILE_WK1,$FILE_WK2); 
    system($cmd);

    rew;
}
sub draw_text {
    my ($x,$y,$font,$col,$size,$text) = @_;

    $cmd = sprintf(
                "convert -font \"%s\" -fill xc:%s ".
                "-pointsize %d -draw ".
                "\"text %d,%d '%s'\" %s %s",
                $font,$col,z($size),z($x),z($y),$text,
                $FILE_WK1,$FILE_WK2);
    system($cmd);

    rew;
}
sub make_png {
    $cmd = sprintf(
		"convert %s %s",$FILE_WK1,$FILE_WK3);
    system($cmd);
}
sub make_pdf {
    $cmd = sprintf(
                "convert -density %d -geometry %dx%d %s %s",
                $DPI,z($PDF_X_MM),z($PDF_Y_MM),
                $FILE_WK3,$FILE_PDF);
    system($cmd);
}
# ---------------------------------------------------------------------
# --- 用紙生成処理 ※ユーザ指定処理
# ---------------------------------------------------------------------

$bs = 5; # 基準間隔 5mm

# 用紙生成

draw_paper;

# dot 描画

for($y=$bs;$y<=135;$y+=$bs){
    for($x=$bs;$x<=115;$x+=$bs){
        draw_dot(
            $x,$y,$x+0.15,$y,
            $COL_USU);
    }
}

# PNGに変換

make_png;

# PDFに変換

make_pdf;

5mm方眼用紙

#!/usr/bin/perl

use utf8;

# ---------------------------------------------------------------------
# Template Create Script for Note Application
#
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# --- 固定値 変更不要
# ---------------------------------------------------------------------
$MM_PER_IN = 25.4; # 1インチは25.4mm

# ---------------------------------------------------------------------
# --- 出力PDFのDPIを指定
# ---------------------------------------------------------------------
$DPI = 300;

# ---------------------------------------------------------------------
# --- 中間ファイル名や出力ファイル名を指定
# --- ユーザ環境に合わせて変更してください
# ---------------------------------------------------------------------
$FILE_WK1 = "wk_1.bmp";
$FILE_WK2 = "wk_2.bmp";
$FILE_WK3 = "wk_3.png";
$FILE_PDF = "GN_grid.pdf";

# ---------------------------------------------------------------------
# --- アプリの用紙エリアの実寸をmmで記入
# --- 機種:iPad mini アプリ:Goodnotes 120x136
# ---------------------------------------------------------------------
$PDF_X_MM = 120; #縦置き時の横幅
$PDF_Y_MM = 136; #縦置き時の縦幅

# ---------------------------------------------------------------------
# --- 生成倍率を指定 実寸で生成すると線が太いので
# --- 生成用紙を大きくする
# ---------------------------------------------------------------------
$BAIRITSU = 1.6;

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

# 色定義
$COL_USU = "#9FA0A0";  # 薄目
$COL_KOI = "#544A47";  # 濃目
$COL_RED = "#d7003a";  # 赤
$COL_BLU = "#007bbb";  # 青

# 線幅定義
$WID_HOS = "1"; # 細
$WID_FUT = "3"; # 太

# FONTを指定
$FONT =	"/cygdrive/c/Windows/Fonts/BIZ-UDGothicR.ttc";

# ---------------------------------------------------------------------
# --- 描画ルーチン *基本的には変更不要
# ---------------------------------------------------------------------
sub z {
    my ($mm) = @_;
    return $DPI / $MM_PER_IN * $mm * $BAIRITSU;
}
sub rew {
    $cmd = sprintf("mv %s %s",$FILE_WK2,$FILE_WK1); 
    system($cmd);
}
sub draw_paper {
    $cmd = sprintf(
                "convert -size %dx%d xc:%s %s",
                z($PDF_X_MM),z($PDF_Y_MM),
                $PAPER_COLOR,$FILE_WK1); 
    system($cmd);
}
sub draw_line {
    my ($x1,$y1,$x2,$y2,$col,$width) = @_;

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

    rew;
}
sub draw_tatesen {
    my ($x,$y,$takasa,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        draw_line(
            $x+$kankaku*$i,$y,
            #$x+$kankaku*$i,$y+$takasa-1,
            $x+$kankaku*$i,$y+$takasa,
            $col,$width);
    }
}
sub draw_yokosen {
    my ($x,$y,$haba,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        draw_line(
            $x,$y+$kankaku*$i,
            #$x+$haba-1,$y+$kankaku*$i,
            $x+$haba,$y+$kankaku*$i,
            $col,$width);
    }
}
sub draw_dot {
    my ($cx,$cy,$x,$y,$col) = @_;

    $cmd = sprintf(
                "convert -fill xc:%s ".
                "-draw 'circle %d,%d %d,%d' %s %s",
                $col,z($cx),z($cy),z($x),z($y),
                $FILE_WK1,$FILE_WK2); 
    system($cmd);

    rew;
}
sub draw_text {
    my ($x,$y,$font,$col,$size,$text) = @_;

    $cmd = sprintf(
                "convert -font \"%s\" -fill xc:%s ".
                "-pointsize %d -draw ".
                "\"text %d,%d '%s'\" %s %s",
                $font,$col,z($size),z($x),z($y),$text,
                $FILE_WK1,$FILE_WK2);
    system($cmd);

    rew;
}
sub make_png {
    $cmd = sprintf(
		"convert %s %s",$FILE_WK1,$FILE_WK3);
    system($cmd);
}
sub make_pdf {
    $cmd = sprintf(
                "convert -density %d -geometry %dx%d %s %s",
                $DPI,z($PDF_X_MM),z($PDF_Y_MM),
                $FILE_WK3,$FILE_PDF);
    system($cmd);
}
# ---------------------------------------------------------------------
# --- 用紙生成処理 ※ユーザ指定処理
# ---------------------------------------------------------------------

$bs = 5; # 基準間隔 5mm

# 用紙生成

draw_paper;

# 罫線描画(縦線)

draw_tatesen(
    $bs,0,$PDF_Y_MM,$COL_USU,$WID_HOS,$bs,23);

# 罫線描画(横線)

draw_yokosen(
    0,$bs,$PDF_X_MM,$COL_USU,$WID_HOS,$bs,27);

# PNGに変換

make_png;

# PDFに変換

make_pdf;

グラフ用紙

#!/usr/bin/perl

use utf8;

# ---------------------------------------------------------------------
# Template Create Script for Note Application
#
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# --- 固定値 変更不要
# ---------------------------------------------------------------------
$MM_PER_IN = 25.4; # 1インチは25.4mm

# ---------------------------------------------------------------------
# --- 出力PDFのDPIを指定
# ---------------------------------------------------------------------
$DPI = 300;

# ---------------------------------------------------------------------
# --- 中間ファイル名や出力ファイル名を指定
# --- ユーザ環境に合わせて変更してください
# ---------------------------------------------------------------------
$FILE_WK1 = "wk_1.bmp";
$FILE_WK2 = "wk_2.bmp";
$FILE_WK3 = "wk_3.png";
$FILE_PDF = "GN_graph.pdf";

# ---------------------------------------------------------------------
# --- アプリの用紙エリアの実寸をmmで記入
# --- 機種:iPad mini アプリ:Goodnotes 120x136
# ---------------------------------------------------------------------
$PDF_X_MM = 120; #縦置き時の横幅
$PDF_Y_MM = 136; #縦置き時の縦幅

# ---------------------------------------------------------------------
# --- 生成倍率を指定 実寸で生成すると線が太いので
# --- 生成用紙を大きくする
# ---------------------------------------------------------------------
$BAIRITSU = 1.6;

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

# 色定義
$COL_USU = "#9FA0A0";  # 薄目
$COL_KOI = "#544A47";  # 濃目
$COL_RED = "#d7003a";  # 赤
$COL_BLU = "#007bbb";  # 青

# 線幅定義
$WID_HOS = "1"; # 細
$WID_CHU = "2"; # 中
$WID_FUT = "3"; # 太

# FONTを指定
$FONT =	"/cygdrive/c/Windows/Fonts/BIZ-UDGothicR.ttc";

# ---------------------------------------------------------------------
# --- 描画ルーチン *基本的には変更不要
# ---------------------------------------------------------------------
sub z {
    my ($mm) = @_;
    return $DPI / $MM_PER_IN * $mm * $BAIRITSU;
}
sub rew {
    $cmd = sprintf("mv %s %s",$FILE_WK2,$FILE_WK1); 
    system($cmd);
}
sub draw_paper {
    $cmd = sprintf(
                "convert -size %dx%d xc:%s %s",
                z($PDF_X_MM),z($PDF_Y_MM),
                $PAPER_COLOR,$FILE_WK1); 
    system($cmd);
}
sub draw_line {
    my ($x1,$y1,$x2,$y2,$col,$width) = @_;

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

    rew;
}
sub draw_tatesen {
    my ($x,$y,$takasa,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        draw_line(
            $x+$kankaku*$i,$y,
            #$x+$kankaku*$i,$y+$takasa-1,
            $x+$kankaku*$i,$y+$takasa,
            $col,$width);
    }
}
sub draw_yokosen {
    my ($x,$y,$haba,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        draw_line(
            $x,$y+$kankaku*$i,
            #$x+$haba-1,$y+$kankaku*$i,
            $x+$haba,$y+$kankaku*$i,
            $col,$width);
    }
}
sub draw_dot {
    my ($cx,$cy,$x,$y,$col) = @_;

    $cmd = sprintf(
                "convert -fill xc:%s ".
                "-draw 'circle %d,%d %d,%d' %s %s",
                $col,z($cx),z($cy),z($x),z($y),
                $FILE_WK1,$FILE_WK2); 
    system($cmd);

    rew;
}
sub draw_text {
    my ($x,$y,$font,$col,$size,$text) = @_;

    $cmd = sprintf(
                "convert -font \"%s\" -fill xc:%s ".
                "-pointsize %d -draw ".
                "\"text %d,%d '%s'\" %s %s",
                $font,$col,z($size),z($x),z($y),$text,
                $FILE_WK1,$FILE_WK2);
    system($cmd);

    rew;
}
sub make_png {
    $cmd = sprintf(
		"convert %s %s",$FILE_WK1,$FILE_WK3);
    system($cmd);
}
sub make_pdf {
    $cmd = sprintf(
                "convert -density %d -geometry %dx%d %s %s",
                $DPI,z($PDF_X_MM),z($PDF_Y_MM),
                $FILE_WK3,$FILE_PDF);
    system($cmd);
}
# ---------------------------------------------------------------------
# --- 用紙生成処理 ※ユーザ指定処理
# ---------------------------------------------------------------------

$bs = 5; # 基準間隔 5mm

# 用紙生成

draw_paper;

# 罫線描画(縦線)

draw_tatesen(
    1,0,$PDF_Y_MM,$COL_USU,$WID_HOS,1,119);

draw_tatesen(
    $bs,0,$PDF_Y_MM,$COL_USU,$WID_CHU,$bs,23);

# 罫線描画(横線)

draw_yokosen(
    0,1,$PDF_X_MM,$COL_USU,$WID_HOS,1,135);

draw_yokosen(
    0,$bs,$PDF_X_MM,$COL_USU,$WID_CHU,$bs,27);

# PNGに変換

make_png;

# PDFに変換

make_pdf;

Weekly Schedule

#!/usr/bin/perl

use utf8;

# ---------------------------------------------------------------------
# Template Create Script for Note Application
#
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# --- 固定値 変更不要
# ---------------------------------------------------------------------
$MM_PER_IN = 25.4; # 1インチは25.4mm

# ---------------------------------------------------------------------
# --- 出力PDFのDPIを指定
# ---------------------------------------------------------------------
$DPI = 300;

# ---------------------------------------------------------------------
# --- 中間ファイル名や出力ファイル名を指定
# --- ユーザ環境に合わせて変更してください
# ---------------------------------------------------------------------
$FILE_WK1 = "wk_1.bmp";
$FILE_WK2 = "wk_2.bmp";
$FILE_WK3 = "wk_3.png";
$FILE_PDF = "GN_weekly.pdf";

# ---------------------------------------------------------------------
# --- アプリの用紙エリアの実寸をmmで記入
# --- 機種:iPad mini アプリ:Goodnotes 120x136
# ---------------------------------------------------------------------
$PDF_X_MM = 120; #縦置き時の横幅
$PDF_Y_MM = 136; #縦置き時の縦幅

# ---------------------------------------------------------------------
# --- 生成倍率を指定 実寸で生成すると線が太いので
# --- 生成用紙を大きくする
# ---------------------------------------------------------------------
$BAIRITSU = 1.6;

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

# 色定義
$COL_USU = "#9FA0A0";  # 薄目
$COL_KOI = "#544A47";  # 濃目
$COL_RED = "#d7003a";  # 赤
$COL_BLU = "#007bbb";  # 青

# 線幅定義
$WID_HOS = "1"; # 細
$WID_FUT = "3"; # 太

# FONTを指定
$FONT =	"/cygdrive/c/Windows/Fonts/BIZ-UDGothicR.ttc";

# ---------------------------------------------------------------------
# --- 描画ルーチン *基本的には変更不要
# ---------------------------------------------------------------------
sub z {
    my ($mm) = @_;
    return $DPI / $MM_PER_IN * $mm * $BAIRITSU;
}
sub rew {
    $cmd = sprintf("mv %s %s",$FILE_WK2,$FILE_WK1); 
    system($cmd);
}
sub draw_paper {
    $cmd = sprintf(
                "convert -size %dx%d xc:%s %s",
                z($PDF_X_MM),z($PDF_Y_MM),
                $PAPER_COLOR,$FILE_WK1); 
    system($cmd);
}
sub draw_line {
    my ($x1,$y1,$x2,$y2,$col,$width) = @_;

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

    rew;
}
sub draw_tatesen {
    my ($x,$y,$takasa,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        draw_line(
            $x+$kankaku*$i,$y,
            #$x+$kankaku*$i,$y+$takasa-1,
            $x+$kankaku*$i,$y+$takasa,
            $col,$width);
    }
}
sub draw_yokosen {
    my ($x,$y,$haba,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        draw_line(
            $x,$y+$kankaku*$i,
            #$x+$haba-1,$y+$kankaku*$i,
            $x+$haba,$y+$kankaku*$i,
            $col,$width);
    }
}
sub draw_dot {
    my ($cx,$cy,$x,$y,$col) = @_;

    $cmd = sprintf(
                "convert -fill xc:%s ".
                "-draw 'circle %d,%d %d,%d' %s %s",
                $col,z($cx),z($cy),z($x),z($y),
                $FILE_WK1,$FILE_WK2); 
    system($cmd);

    rew;
}
sub draw_text {
    my ($x,$y,$font,$col,$size,$text) = @_;

    $cmd = sprintf(
                "convert -font \"%s\" -fill xc:%s ".
                "-pointsize %d -draw ".
                "\"text %d,%d '%s'\" %s %s",
                $font,$col,z($size),z($x),z($y),$text,
                $FILE_WK1,$FILE_WK2);
    system($cmd);

    rew;
}
sub make_png {
    $cmd = sprintf(
		"convert %s %s",$FILE_WK1,$FILE_WK3);
    system($cmd);
}
sub make_pdf {
    $cmd = sprintf(
                "convert -density %d -geometry %dx%d %s %s",
                $DPI,z($PDF_X_MM),z($PDF_Y_MM),
                $FILE_WK3,$FILE_PDF);
    system($cmd);
}
# ---------------------------------------------------------------------
# --- 用紙生成処理 ※ユーザ指定処理
# ---------------------------------------------------------------------

$bs = 5; # 基準間隔 5mm

# 用紙生成

draw_paper;

# 罫線描画(縦線)

draw_tatesen(
    $bs,0,$PDF_Y_MM,$COL_USU,$WID_HOS,$bs,23);

# 罫線描画(横線)

draw_yokosen(
    0,$bs,$PDF_X_MM,$COL_USU,$WID_HOS,$bs,27);

# 曜日区切り線描画

draw_yokosen(
    0,10,$PDF_X_MM,$COL_USU,$WID_FUT,$bs*3,8);

# 曜日描画

draw_text(11, 24,$FONT,$COL_KOI,3,"月");
draw_text(11, 39,$FONT,$COL_KOI,3,"火");
draw_text(11, 54,$FONT,$COL_KOI,3,"水");
draw_text(11, 69,$FONT,$COL_KOI,3,"木");
draw_text(11, 84,$FONT,$COL_KOI,3,"金");
draw_text(11, 99,$FONT,$COL_BLU,3,"土");
draw_text(11,114,$FONT,$COL_RED,3,"日");


# 左から15mmの位置に縦線を描画

draw_tatesen(
    15,10,105,$COL_USU,$WID_FUT,0,1);

# dot 描画

$y = 10;
for($i=0;$i<7;$i++){
    $x = 25;
    for($j=0;$j<10;$j++){
        draw_dot(
            $x-0.1,$y+1,$x+0.3,$y+1,
            $COL_KOI);
        $x+=10;
    }
    $y+=15;
}

# 9 10 11 ... 18 描画

$y = 10;
for($i=0;$i<7;$i++){
    $x = 20;
    for($j=0;$j<10;$j++){
        if ($j==0){
            $wkx=$x-0.5; # 9は1桁なので少し右に
        }else{
            $wkx=$x-1;
        }
        draw_text(
            $wkx,$y+2,$FONT,
            $COL_KOI,2,$j+9);
        $x+=10;
    }
    $y+=15;
}

# PNGに変換

make_png;

# PDFに変換

make_pdf;

完成したPDF

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

ドット用紙

5mm方眼用紙

グラフ用紙

Weekly Schedule