LoginSignup
1
0

More than 1 year has passed since last update.

PDFの線を太くする(Python)

Posted at

線の細いPDFがたまにある

たまにあります。
元がdxfやらdwgのCAD図面な奴です

ちょっと困る事がある

画面で見る分にはAcrobatの設定変えるだけでいいんですが、印刷するとまあ普通に全然ダメです、特に、A3のPDFで来るので、普通のA4プリンタで縮小印刷すると、まずまともに印刷できません

なので

線を太くするものを作ってみようと思いました。巷のPythonでPDFを弄る系は殆どがテキストやイメージを抽出するものばっかりだったので、なにかの一助になればと・・・

Python用でPDF弄るものとしては

PyPDF2 , pdfminer.sixとか色々あるようですが、PyMuPDFが使いやすそうだったので、PyMuPDFを使ってみました。

PDFlinebold.py
import fitz

path = 'MyPDF.pdf'
opath = 'outPDF.pdf'

scale = 10.0
maxlimit = 2.0

doc = fitz.open(path)

page_count = doc.page_count

for p in range(page_count):
    page = doc.load_page(p)

    for draw in page.get_drawings():
        if draw['width'] != 0 or draw['width'] >= maxlimit:
            shape = page.new_shape()
            w = draw['width']*scale
            width =  w if w <= maxlimit else maxlimit
            color = draw['color']
            closepath = draw['closePath']
            fill = draw['fill']
            for path in draw['items']:
                if path[0] == 'l':
                    shape.draw_line(*path[1:])
                elif path[0] == 'c':
                    shape.draw_bezier(*path[1:])
                elif path[0] == 're':
                    shape.draw_rect(path[1])
                elif path[0] == 'qu':
                    shape.draw_quad(path[1])
                else:
                    print(path)
            shape.finish(color=color, width=width, fill=fill, closePath=closepath)
            shape.commit()

doc.save(opath)

path のファイル名に使用されている線を scale 倍に太くします
maxlimit より太い線にはならないように、 maxlimitより太い線には手を付けません。
opath のPDFファイルとして出力されます

PDFの線全てではなく、必要最小限(直線、ベジエ、四角形)のみ太くします。また、色は元の線と同じ色にしますが、点線、透明度、マスクなどの情報は無くなります

また、実際は元の線を消さずに、上から書き加えています。元の線をどうやって消すのかわかりませんでした。
ですので、線を細くすることはできません

直線、ベジエ、四角形以外の線があった場合、どういうデータか表示されるので、
https://pymupdf.readthedocs.io/en/latest/shape.html
などを見て追加すればよいと思われます

1
0
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
0