MacのプレビューアプリはPDFを操作するのに地味に便利なんですが、1つ、AdobeAcrobat Readerに劣る点があり、それはレイヤーのon/offができないということです。私は海外の洋裁型紙をpdfでダウンロードして買うことが多いんですが、幾つものサイズのレイヤーが1つのファイルに入っていて、ユーザーは使わないレイヤーをoffにして印刷することを期待されていることがあります。これがMacのプレビューで出来ないのでちょっとストレスでした。このためだけにAdobe製品を入れるなんてあんまり気が向きません。
Google Colabで簡単なPythonコードを書いて、いらないレイヤーをoffにしたpdfファイルを作る方法が分かりましたのでメモっておきます。
まず、PyMuPDFをインストールします。
!pip install pymupdf
どんなレイヤーがあるのかまず見てみましょう。
import fitz
doc = fitz.open("input.pdf")
doc_ocgs = doc.get_ocgs()
print(doc_ocgs)
私の手元の洋裁型紙ではこんなオブジェクトが返ってきました。
{20: {'name': 'LARGE', 'intent': ['View', 'Design'], 'on': True, 'usage': 'Artwork'},
21: {'name': 'MEDIUM', 'intent': ['View', 'Design'], 'on': True, 'usage': 'Artwork'},
22: {'name': 'SMALL', 'intent': ['View', 'Design'], 'on': True, 'usage': 'Artwork'},
23: {'name': 'XS', 'intent': ['View', 'Design'], 'on': True, 'usage': 'Artwork'},
24: {'name': 'Pattern information', 'intent': ['View'], 'on': True, 'usage': 'Artwork'},
25: {'name': 'Layout information', 'intent': ['View'], 'on': True, 'usage': 'Artwork'},
26: {'name': 'Numbers', 'intent': ['View', 'Design'], 'on': True, 'usage': 'Artwork'}}
私はSMALLサイズのレイヤーだけonにしたいので、LARGE、MEDIUM、XSサイズは消して、pdfを保存したいと思います。表示をoffにしたいレイヤーを数字の20、21、23番で指定しています。それ以外のレイヤーはベースとしてonのままにしています。
doc.set_layer(-1, off=[20,21,23], basestate="ON")
doc.save("output.pdf")
以上です!
MacのプレビューアプリだけでPDFを扱って生きていきたいが、一部のレイヤーをoffしたい時用の便利スクリプトでした。