Dトラッカー125のオイルを、総走行距離 7,044 km にて交換。
購入時が 4,372 km だったので、2,672 km 走っての交換になる。
随時、更新。基本、Linuxのアプリを使用する方法。
余談だけど、以下の pdftk などでよく出てくる cat とは"to concatenate." (連結すること)の意味だそうだ。
Xournalというソフトを使う。
Ubuntuでは以下でインストールできる。
$ sudo apt install xournal
線を引いたり、テキストを追加したりした編集データは、拡張子「.xoj」として保存され、元のPDFデータはそのままなので、安心。
もちろん、元のPDFデータと書き込みなどの編集データ(.xoj)を結合させて、新たなPDFデータにエクスポートさせることも可能。
ダウンロードしてきたzipファイルを解凍。 ローカルディスク(C:)直下に解凍した「xournal-0.4.8.2016-win32」をフォルダごとコピー。
フォルダ内にある「xournal.exe」をダブルクリックすると、起動する。xournal.exeのショートカットをデスクトップ上に置いておくか、タスクバーにピン留めしておくといい。
既存のPDFを開くには、xournal を起動してから、左上のメニューから File > Open で。
日本語入力時の文字化け問題
ファイル名に日本語を含む「.xoj」ファイルが直接開けない問題
xournal を起動してから、左上のメニューから File > Open で開けば、大丈夫。
Xournalからフォークされたもので、こちらのほうが高機能らしい。Ubuntu18.04では以下でインストール可能。
$ sudo snap install xournalpp
Windows版は2021年4月2日現在、キーボードでの日本語入力ができない。
Windows版 Version 1.1.3 においては日本語入力が可能となった(2023年1月21日現在)。
$ pdftk 入力.pdf cat ページ番号(1 3 2 4 などでページ入れ替え) output 出力.pdf
追記:分割については、pdftkでいちいちやらなくても(時々、エラーもでるし)、Ubuntuのドキュメントビューアー(Evince)で、 印刷>ファイルに出力する でやったほうが簡単だった…。
さらに追記:pdftkでパスワードがらみのエラーが出るときは、下記の「PDFにかかっているパスワードを削除して編集可能にする」を参照のこと。
$ pdfunite 入力.pdf 入力.pdf 出力.pdf
任意のディレクトリ内の全てのPDFを結合する場合
$ pdfunite *.pdf 出力.pdf
$ pdftk 入力1.pdf 入力2.pdf cat output 出力.pdf
例えば「入力001.pdf」の1~2ページと、「入力002.pdf」の5~6ページを結合させる場合は
pdftk A=入力001.pdf B=入力002.pdf cat A1-2 B5-6 output 出力.pdf
さらに「入力001.pdf」の1~2ページ + 「入力002.pdf」の5~6ページ + 再び「入力001.pdf」の3~4ページ の場合
pdftk A=入力001.pdf B=入力002.pdf cat A1-2 B5-6 A3-4 output 出力.pdf
Windowsの場合、以下の内容で「PDF結合.bat」ファイルを作成する。あらかじめ pdftk をインストールしておく。
@echo off
echo 開始 %date% %time%
set HIZUKE=%date: =0%
set JIKOKU=%time: =0%
set yy=%HIZUKE:~0,4%
set mm=%HIZUKE:~5,2%
set dd=%HIZUKE:~8,2%
set hh=%JIKOKU:~0,2%
set mi=%JIKOKU:~3,2%
set ss=%JIKOKU:~6,2%
pdftk %* cat output ALL_%yy%%mm%%dd%_%hh%%mi%%ss%.pdf
エクスプローラーのアドレス欄に「shell:sendto」として、開いた場所に上記の「PDF結合.bat」をコピー。
使い方は以下のとおり。
参考リンク:Windowsのバッチ処理でファイル名に日付を付加する方法 | 夢幻電脳館 、 [送る]メニューに項目を追加する方法(Windows 7/8.x/10編):Tech TIPS - @IT
pypdfをインストール
pip install pypdf
import pypdf
# pypdf のバージョンを示すため。なくてもいい。
print(pypdf.__version__)
merger = pypdf.PdfMerger()
merger.append('入力1.pdf')
merger.append('入力.pdf')
merger.append('入力3.pdf')
merger.write('出力.pdf')
merger.close()
しおりの内容を作成するには、以下のAまたはBで作成。
以下のような内容で「しおり」(bookmarks)設定ファイルの bookmarks.txt をutf-8で作成する。
BookmarkBegin
BookmarkTitle: しおり名1
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: しおり名1-2
BookmarkLevel: 2
BookmarkPageNumber: 3
BookmarkBegin
BookmarkTitle: しおり名2
BookmarkLevel: 1
BookmarkPageNumber: 5
Title でラベルを、 Level によって木構造のネストを、 PageNumber によってリンクする先のページ番号を指定。
Geanyのsnippets.confに、以下のようにGeanyのスニペット登録(入力補完)しておくと便利かも。
[Default]
しおり=BookmarkBegin\nBookmarkTitle: \nBookmarkLevel: 1\nBookmarkPageNumber:
作成したしおり(bookmarks.txt)をつける。
$ pdftk 入力.pdf update_info_utf8 bookmarks.txt output 出力.pdf
しおりが少なければ、上記のようにテキストエディタで作成すればいいのだが、しおりが多い場合や、しおりを頻繁に更新しないといけない場合、テキストエディタでの作成は辛いので、LibreOffoceのCalcを使う。
新規でbookmarks.odsを作成し、画像のように、
として、保存。
次に、bookmarks.odsからbookmarks.csvへ変換する。
libreoffice --headless --convert-to csv:"Text - txt - csv (StarCalc):59,34,76,,,,,,true" bookmarks.ods
オプションの詳細は LibreOffice Calc のデータ(.ods)を csv に変換する - adbird(広告鳥) 備忘録 を参照のこと。
端末で以下を実行し、改行を入れたり、フィールドの区切り記号 「;」を削除したりして整えた bookmarks.csv を作成。
# 1) 1行目を削除
sed -i '1 d' bookmarks.csv
# 2) 行頭を置換
sed -i -e 's/^/BookmarkBegin\nBookmarkLevel:/g' bookmarks.csv
# 3) 最初に出てくる「;」を「BookmarkTitle:」に置換
sed -i -e 's/;/\nBookmarkTitle:/' bookmarks.csv
# 4) 2番目に出てくる(正確には上記ですでに1番目の「;」は置換済みなので、再び最初に出てくる)「;」を「BookmarkPageNumber: 」に置換
sed -i -e 's/;/\nBookmarkPageNumber: /' bookmarks.csv
1)〜4)をワンライナーにしたものはこちら。
sed -i '1 d' bookmarks.csv && sed -i -e 's/^/BookmarkBegin\nBookmarkLevel:/g' -e 's/;/\nBookmarkTitle:/' -e 's/;/\nBookmarkPageNumber: /' bookmarks.csv
しおり(bookmarks.csv)をつける。txtではなく、csvなので注意。
$ pdftk 入力.pdf update_info_utf8 bookmarks.csv output 出力.pdf
ExifTool をインストール。
sudo apt install libimage-exiftool-perl
すべてのメタデータを表示させる。
exiftool 入力.pdf
タイトルと作成者名を変える。
exiftool -Title="PDFのタイトル" -Author="PDFの作成者" 入力.pdf
タイトルと作者名を削除する。
exiftool -Title="" -Author="" 入力.pdf
InfoBegin
InfoKey: Title
InfoValue: 文書のタイトル
というようなテキストデータ(metadata.txt)を作成。
InfoKey
にはAuthor
、Subject
、Keywords
などがあるようだ。以下で実行。
pdftk 入力.pdf update_info metadata.txt output 出力.pdf
metadata.txt に上記のしおり(ブックマーク)の情報も同時に書き込んでもいい。
$ pdftk 入力.pdf cat 1-endeast output 出力.pdf
1-end…全ページ。 east…90度回転。 eastのところをsouthに変えたら180度回転。
$ mogrify -rotate 90 入力.pdf
mogrifyはデータを上書き保存するので、実行前に必ずバックアップを取る。
$ gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=出力.pdf 入力.pdf
ただし、PDF内にある画像がラスター画像(jpgやpng)だとぼやけたり、文字が潰れたりする。ベクター画像(epsやsvg、emfなど)の場合はキレイなまま、PDFデータが縮小できる。
LibreOfficeのWriterで作成して、pngにエクスポートすると、画像がぼやけてしまう。一度、PDFにエクスポートしてから、下記コマンドでpngにしたほうがよい。
$ convert -density 600 入力.pdf 出力.png
WindowsのCygwin での上記コマンドがうまくいかなかったので、以下で実行。
WingetでGhostscriptをインストール。
$ winget install Ghostscript
pdfをpngに変換。
$ gswin64c -sDEVICE=png16m -r300 -dGraphicsAlphaBits=4 -o 出力.png 入力.pdf
png16m
は24-bit RGB color
を意味し、r300
は解像度、dGraphicsAlphaBits
はアンチエイリアス(1,2,4のいずれか数値が大きいほどシャギーが目立ちにくくなる)。
ディレクトリ内に複数のPDFデータ(1枚もの)が入っており、それらを一気にPNGに変換するスクリプト。
以下の内容を、ディレクトリ内に pdftopng.sh として保存
for i in $(ls -1 *.pdf | xargs basename -s .pdf);
do
gswin64c -sDEVICE=png16m -r300 -dGraphicsAlphaBits=4 -o $i.png $i.pdf
done
$ sh pdftopng.sh
$ pdftoppm -rx 350 -ry 350 入力.pdf image
上記では解像度350dpi。-png
オプションをつければ、pngで出力される。
特定のページだけ画像にするには以下の通り。(以下は、解像度300dpiで、jpeg形式、5ページのみ。)
$ pdftoppm -r 300 -jpeg -f 5 -l 5 入力.pdf image
Windowsでは、TeXLiveをインストールすると付随してインストールされているはず。
参考:【 pdftoppm 】コマンド――PDFファイルを画像に変換する
imagemagickではエラーが出て失敗したが、GraphicsMagickならできた。
フォルダ内に連番のjpgを入れて、
$ gm convert *.jpg 出力.pdf
一つのPDFファイルの中に、ページサイズが違うものがごちゃまぜになってしまっている場合に、全てのページを1つのサイズに揃える手順。
例えばA4サイズに揃える場合
gs -sDEVICE=pdfwrite -sPAPERSIZE=a4 -dFIXEDMEDIA -dPDFFitPage -o 出力.pdf 入力.pdf
A4サイズに変更する。
pdfjam --papersize '{8.3in,11.7in}' 入力.pdf --outfile 出力.pdf
$ pdftk 前面.pdf background 背景.pdf output 出力.pdf
既存のPDFの端などに簡単な文字入力をしたい場合、LibreOfficeのWriterなどでおおよその場所に文字を書いて、PDFデータ(背景.pdf)として出力後、上記コマンドを使って、元のPDFデータと重ねる。
$ pdftk 元データ.pdf stamp スタンプ.pdf output 出力.pdf
スタンプとして既存のPDFデータの前面にスタンプとして重ねるには上記のコマンド。
これを活用して、PDFのページの上部にちょっとしたテキストを入れるスクリプトを作った。
複数ページのPDFにはmultistamp
が使える。
pdfcrop で以下のようにする。
$ pdfcrop --margins '5 5 5 5' input.pdf output.pdf
インストールされていなかったら、
tlmgr install pdfcrop
でインストール。
pdfcrop が入っているディレクトリに移動。2023のところなどは適宜変更。
cd /usr/local/texlive/2023/texmf-dist/scripts/pdfcrop
で、ls
をすると、
pdfcrop.pl
が入っていることが分かる。pdfcrop.pl を pdfcrop にリネーム(名前を変える)して、実行権限を与える。
sudo mv pdfcrop.pl pdfcrop
sudo chmod +x pdfcrop
いよいよPATHを通す。
echo $PATH
でPATHが通っているところを一応、確認。
nano ~/.bashrc
で.bashrcファイルに
export PATH=$PATH:/usr/local/texlive/2023/texmf-dist/scripts/pdfcrop
を追記。2023のところは適宜変更。
source ~/.bashrc
で変更を反映させる。
pdfjam が必要。
A4横置き用紙に2アップの場合
$ pdfjam 入力.pdf --outfile 出力.pdf --paper a4paper --landscape --nup 2x1
追記:コマンドがpdfnupからpdfjamに変わったらしい。
ただし、すでにTeXLiveとCygwinがインストール済みであることが前提。
TeXLiveのFullでインストールしている場合はすでに入っていると思うが、僕の場合、 Texliveを短時間(basic scheme +アルファ)でインストールする でTeXLiveをインストールしていたので、pdfjamがインストールされていなかった。
コマンドプロンプトでインストール。
tlmgr install pdfjam
以下にパスを通す。(環境によってpdfjamの入っている場所が違う〔例えば、「2022」のところはTeXLiveのバージョンで違う〕ので適宜変えること)
C:\texlive\2022\texmf-dist\scripts\pdfjam
パスの通し方は、Windowsでプログラムやスクリプトにパスを通す参照。
Cygwinターミナルで
$ pdfjam --help
でズラズラと説明が出てきたら成功。
同じく Texliveを短時間(basic scheme +アルファ)でインストールする でTeXLiveをインストールしていたので、pdfjamがインストールされていなかった。
sudo tlmgr install pdfjam
でインストール。
echo $PATH
でPATHが通っているところを一応、確認。
nano ~/.bashrc
で.bashrcファイルに
export PATH=$PATH:/usr/local/texlive/2022/texmf-dist/scripts/pdfjam
を追記。2022のところは適宜変更。
source ~/.bashrc
で変更を反映させる。
詳細な使い方は公式 GitHub - rrthomas/pdfjam: The pdfjam package for manipulating PDF files を参照のこと。
pdfjamが必要。pdfjamはTeXLiveに入っているので、つまりは、TeXLiveのインストールが必要。インストールされているはずなのに、PATHが通っていなかったら、上記を参照のこと。
中綴じ用面付表で面付け時のページの順を確認。左綴じ4ページの場合、4,1,2,3 の順番になる。以下、その仮定で。
A3用紙(横向き)に2UPの場合
$ pdfjam 入力.pdf '4,1,2,3' --outfile 出力.pdf --paper a3paper --landscape --nup 2x1
B4用紙(横向き)に2UPの場合
$ pdfjam 入力.pdf '4,1,2,3' --outfile 出力.pdf --papersize '{364mm,257mm}' --nup 2x1
縦書き原稿の場合は、A5縦書き原稿PDFを、A4用紙・小冊子面付けしたPDFに - adbird(広告鳥) 備忘録を参照のこと。
※追記:複数のPDFを結合したPDFにaddpageスクリプトでページ番号つけたPDFの文字が時々飛ぶ(消える)現象が起こった(もしかしたら、PDF結合の過程で飛んでいたのかもしれないけど)ので、下記のpdftkの方がいいかも。
addpageスクリプトをインストール。
$ sudo apt install python3-pip
$ pip3 install addpage
たぶん/home/〜/.local/bin/
(〜
の部分はユーザー名)に addpage
というスクリプトが入っているはずなので、実行。
$ python3 /home/〜/.local/bin/addpage -o output.pdf input.pdf
オプションはaddpage · PyPIを参考に。例えば、フォントサイズを8ptにするときは、-z 8
をつける。
Xubuntu20.04.2(64bit)をインストールしたラズパイ4で上記のスクリプトを使ったら、エラーが出て使えなかったので、下記の方法でページ番号を追加。
ディレクトリ内にLibreOfficeのWriterでページ番号のついている空白ページのデータ「ページ番号.odt」を作成する。(※ページ番号をつけたいPDFデータのページよりも多いページ数にしておく。Ctrl + Enter で改ページ挿入は知っておくと便利)。
「ページ番号.odt」をPDFエクスポートして「ページ番号.pdf」を作成。
pdftk の multistamp で、ページ番号.pdfと入力.pdfを重ねる。
$ pdftk 入力.pdf multistamp ページ番号.pdf output 出力.pdf
ただし、ページ番号をつけようとしているPDFに縦向きと横向きのページが混じっていると、ページの向きによってページ番号のフォントサイズが変わってしまう(「ページ番号.pdf」が縦向きページで、「入力.pdf」に横向きページが混じっていると、横向きページのページ番号のフォントが小さくなる)ので、注意。
pdftk の multistamp の場合、ページ番号を加えた出力ファイルが別名になるので、元のファイル名のままにしたい場合、少し不便だったので、以下のスクリプト(addpage.sh)を作った。
# バックアップ
cp $1.pdf $1_bak.pdf
# ページ番号追加
pdftk $1.pdf multistamp ページ番号.pdf output output.pdf
# 元のファイルに上書き
mv -f output.pdf $1.pdf
hoge.pdf にページ番号を追加したい場合、事前にページ番号だけの「ページ番号.pdf」を用意して、
sh addpage.sh hoge
とする。コマンドを打つときは、「hoge.pdf」ではなく「hoge」。
複数のPDFファイルを結合して、通しページ番号をつけるpythonスクリプト - adbird(広告鳥) 備忘録
python と pdftk で、複数のPDFを結合し、ページ番号をつけ、しおりをつけるスクリプト【改良版】 - adbird(広告鳥) 備忘録
python と pdftk でPDFを結合し、ページ番号をつけ、しおりをつけるスクリプト - adbird(広告鳥) 備忘録
任意のフォルダ内にpdfデータと、以下の内容のスクリプト pdftocbz.sh を作成して
for file in *.pdf
do
name="${file%.pdf}"
echo "Converting $name to cbz"
mkdir "./$name"
pdftoppm -jpeg "$file" "./$name/000" -r 300
zip -r6 "${name}.cbz" "./$name"
rm -rf "./$name"
done
スクリプト実行
$ sh pdftocbz.sh
参照:linux で pdf を cbz形式に変換する - マイブーム=メイプル
pdftkでpdfを結合しようとしたら
WARNING: The creator of the input PDF:
002.pdf
has set an owner password (which is not required to handle this PDF).
You did not supply this password. Please respect any copyright.
とエラーがでた。
編集できないようにパスワードがかっているらしい。
ドキュメントビューア(evince )で 印刷 > ファイルに出力する
で別のpdfにすれば、編集可能なpdfとなる。
参考:How Do I Use evince To Remove The Password?
$ qpdf --decrypt 入力.pdf 出力.pdf
参考:qpdfでPDFの暗号化による保護を解除 - はしくれエンジニアもどきのメモ、パスワード による機能制限がかかった PDF を解除する qpdf
twicliで #sformula や #supergt の検索表示していると、モタスポBGMとかいうボットがうざかったので、それを非表示(ミュート)にする方法。
「+」タブをクリック。>「抽出条件 (タブ名:ユーザID:ツイート:非表示) : 」のところに
NG:msbgm_bot::4
と入れて、適用。
同じく「+」タブ内の「設定」を開いて、「ユーザースタイルシート」に
a#pickup-NG{display:none;}
を入れて、保存。
参照リンク
最終更新:2018年2月6日
-s
を明示的にコマンドに入れて、スタンドアローンにしないと、htmlのヘッダーやbodyがつかなかったので、スクリプトを修正。以下に記すものは、html経由のPDF作成です。
LaTeX(Lualatex)経由は Pandoc で markdown から 論文PDF へ変換 を参考にしてください。
Markdown記法(Pandoc拡張Markdown)では、文字へのルビや下線(アンダーライン)の表現はない。
しかし、文書作成上、欠かせない表現なので、以下の手順でMarkdownをpdfデータに変換する前提で、何とかする。
Markdown内に直接、html記法で書いてもいいのだが、とくにルビのhtml記法はめんどうくさいし、下線もu要素で書けなくもないのだが、html5ではたんに下線を引くだけにu要素を使うのは良くないっぽいので、独自記法で書いて、sedで置換という手法をとる。
任意のフォルダ内に以下を作成。
ruby>rt {
font-size: 50%;
text-align: center;
}
.underline{text-decoration:underline;}
#!/bin/sh
#htmlに変換
pandoc $1.md -c sample.css -t html5 -s -o $1.html
#ルビ置換
sed -i -e 's/rb{/<ruby><rb>/g' $1.html
sed -i -e 's/|/<\/rb><rt>/g' $1.html
sed -i -e 's/}rb/<\/rt><\/ruby>/g' $1.html
#下線置換
sed -i -e 's/u{/<span class="underline">/g' $1.html
sed -i -e 's/}u/<\/span>/g' $1.html
#pdfに変換
wkhtmltopdf --disable-smart-shrinking --margin-top 20 --margin-left 20 --margin-right 20 $1.html `date +%Y%m%d-$1`.pdf
<!-- 独自記法メモ
u{下線}u
rb{漢字|かんじ}rb
-->
# 坊っちゃん
## 一
rb{親譲|おやゆずり}rbのrb{無鉄砲|むてっぽう}rbでu{小供の時から}u損ばかりしている。
$ sh makepdf.sh 原稿