PDFを扱っていて、PDFをそのまま編集できたらいいのにな~と思うときありませんか?本来であれば、PDFに出力前の形式に戻って編集をしなければいけませんが、それでは手間がかかる!
そんなときに、おすすめなのが今回紹介する borbというライブラリです。PDFに書かれていることを読み取ることもできるのでPDFからテキストデータに変換して、自然言語処理などをすることもできますね!!
今回は、その入門編として、borbでできることから 簡単な読み書きのhello worldまでをまとめていきます!
borbの公式ホームページ
borb | Read, write, and edit PDF files with borb, a pure python library
The pure python library borb is excellent at handling PDF documents. It makes reading, creating, and changing PDF files easier, faster, and more user friendly.
borbとは?
borb は pythonで PDF内を操作したり、読み書きをすることができるライブラリです!
(ちなみに、一人で開発しているらしいです。)
また、具体的にできることに関しては、以下の通りです。
かなり広範囲に渡って、PDFを編集することができますね!
- PDF の読み込み + メタ情報の抽出
- メタ情報の変更
- PDFからのテキスト, 画像抽出
- PDF内の画像の変更
- PDF への アノテーションの追加
- PDF に表, テキスト, リスト の追加
- ページレイアウトの管理
実際に使ってみよう!
インストール
pip install からインストール可能なので、インストールは簡単です!
pip install borb
PDF の 書き出し (Hello world)
まず、 PDFに "Hello World!" と出力する方法を学んでいきましょう!
作成する流れとしては以下の通りです!
この流れで、書いていくと下のコードのように実装できます!
このままコピペをして実行してもらえると、 "Hello World!" と書かれた output.pdfが出力できると思うので確認してみてくださいね!
from borb.pdf.canvas.layout.text.paragraph import Paragraph
from borb.pdf.document import Document
from borb.pdf.page.page import Page
from borb.pdf.canvas.layout.page_layout.multi_column_layout import SingleColumnLayout
from borb.pdf.canvas.layout.page_layout.page_layout import PageLayout
from borb.pdf.pdf import PDF
def main():
# 空のドキュメントを生成
doc: Document = Document()
# 空のページを生成して加える
page: Page = Page()
doc.append_page(page)
# ページのレイアウトを決める (今回は SingleColumnLayout:1ページ1列)
layout: PageLayout = SingleColumnLayout(page)
# パラグラフを追加 (Hello World)
layout.add(Paragraph("Hello World!"))
# PDFを保存・書き出し
with open("output.pdf", "wb") as out_file_handle:
PDF.dumps(out_file_handle, doc)
if __name__ == "__main__":
main()
PDF の 読み込み (Hello world)
ここでは、SimpleTextExtractionを使って、PDF文書の読み込みを行っています。
実際に上のPDFの書き出しの際に生成した output.pdfを下記のコードで読み込んでみると、" Hello World! "と表示されますよ!
import typing
from borb.pdf.document import Document
from borb.pdf.pdf import PDF
from borb.toolkit.text.simple_text_extraction import SimpleTextExtraction
def main():
doc: typing.Optional[Document] = None
l: SimpleTextExtraction = SimpleTextExtraction()
with open("output.pdf", "rb") as in_file_handle:
doc = PDF.loads(in_file_handle, [l])
assert doc is not None
print(l.get_text_for_page(0))
if __name__ == "__main__":
main()
コメント