線の細いPDFがたまにある
たまにあります。
元がdxfやらdwgのCAD図面な奴です
ちょっと困る事がある
画面で見る分にはAcrobatの設定変えるだけでいいんですが、印刷するとまあ普通に全然ダメです、特に、A3のPDFで来るので、普通のA4プリンタで縮小印刷すると、まずまともに印刷できません
なので
線を太くするものを作ってみようと思いました。巷のPythonでPDFを弄る系は殆どがテキストやイメージを抽出するものばっかりだったので、なにかの一助になればと・・・
Python用でPDF弄るものとしては
PyPDF2 , pdfminer.sixとか色々あるようですが、PyMuPDFが使いやすそうだったので、PyMuPDFを使ってみました。
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
などを見て追加すればよいと思われます