무거운 PDF를 Pythonista로 가볍고 분할한 이야기
10609 단어 라이프 해킹PythonistaPDF
Pythonista에서 라이프 해킹을위한 작은 재료를 소개합니다.
개요
iPhone과 Pythonista를 사용하면 언제 어디서나 프로그래밍할 수 있습니다.
하지만 프릭 입력으로 Python Syntax를 계속 치는 것은, 에디터 지원이 있어도 유석에 힘들기 때문에,
라는 최소한의 기어를 조합하여 라이프 해킹하고 있습니다.
📱 실제로 해보면?
iPhone에서 프로그래밍해 보는 느낌은
이었다. iPad Pro와 SplitView를 사용하면 위의 문제를 해결할 수 있지만 iPad Pro는 외부로 가져 오지 않습니다 ...
여러가지 시행착오하여 눈을 통하고 싶은 페이지나 문서를 PDF로 하여 종이의 자료로 하면,
해결할 수 있는 것은? 라고 생각했습니다.
📃 종이 자료에 인쇄
iPhone에서 PDF를 인쇄하는 몇 가지 앱이 있지만,
나는 집에 프린터를 가지고 있지 않기 때문에 편의점에서 인쇄 할 수있는 응용 프로그램을 자주 사용하고 있습니다.
다만, 그 앱에 송신할 수 있는 PDF의 파일 사이즈가 6MB까지라는 제약이 있어, 대처에 곤란했습니다.
따라서 PDF 분할 앱을 다운로드하거나 Mac에서 크기를 조정하고 다시 iPhone으로 되돌리는 것은
덜 똑똑하지 않습니다.
...
전치가 길어졌습니다.
이 문제를 해결하기 위해 Pythonista를 사용하여 PDF 파일 크기를 6MB로 줄여서 분할합니다.
🐍 Python으로 해결
# -*- coding: utf-8 -*-
import os
import appex
from PIL import Image
from PyPDF2 import PdfFileWriter, PdfFileReader
div = 6
def imageWriter(page0):
xObject = page0['/Resources']['/XObject'].getObject()
for obj in xObject:
if xObject[obj]['/Subtype'] == '/Image':
size = (xObject[obj]['/Width'], xObject[obj]['/Height'])
data = xObject[obj].getData()
if xObject[obj]['/ColorSpace'] == '/DeviceRGB':
mode = "RGB"
else:
mode = "P"
if xObject[obj]['/Filter'] == '/FlateDecode':
img = Image.frombytes(mode, size, data)
img.save(obj[1:] + ".png")
elif xObject[obj]['/Filter'] == '/DCTDecode':
with open(obj[1:] + ".jpg", "wb") as img:
img.write(data)
elif xObject[obj]['/Filter'] == '/JPXDecode':
with open(obj[1:] + ".jp2", "wb") as img:
img.write(data)
def main():
src = appex.get_file_path()
src = PdfFileReader(src, 'rb')
items = [range(i, min(i + div, src.numPages)) for i in range(0, src.numPages, div)]
if not os.path.exists('pdf'):
os.mkdir('pdf')
for i, lst in enumerate(items):
dst = PdfFileWriter()
for j in lst:
dst.addPage(src.getPage(j))
with open('pdf/%03d.pdf' % i, 'wb') as out:
dst.removeLinks()
dst.write(out)
if __name__ == '__main__':
main()
PyPDF2 내에서 불필요한 메타데이터 삭제 페이지 수를 분할하여 파일당 크기를 6MB까지
경량화하고 있습니다. Pythonista Documents의 pdf 폴더에 내보내집니다.
PIL과 PyPDF2는 Pythonista built-in 모듈이므로 별도의 pip 설치
필요가 없습니다. appex 모듈은 Pythonista 용 모듈이므로 다른 환경에서는
os.path 모듈 등으로 읽어야 합니다.
요약
포켓에 들어가는 사이즈감으로 모바일 해킹 할 수 있는 것이 Pythonista 최대의 메리트이므로,
궁리에 따라 무엇이든 할 수 있을 것 같습니다. 카페의 작은 테이블에서도 방해가 되지 않는 사이즈감입니다☕
일상적인 작은 문제를 해결하는 수단으로서 Python의 작은 재료의 소개였습니다.
Reference
이 문제에 관하여(무거운 PDF를 Pythonista로 가볍고 분할한 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sho7noka/items/3b7701e0c8a0d27fd2fb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)