LoginSignup
1
1

More than 1 year has passed since last update.

PDFのレイヤーを一部offにしたファイルを作る

Last updated at Posted at 2023-04-20

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したい時用の便利スクリプトでした。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1