Giter VIP home page Giter VIP logo

pdf-notebook's Introduction

Hi there 👋

  • 山口 輝樹

  • 京都大学工学部 地球工学科土木工学コース 3回生

  • 制作物

    技育展 2023 決勝大会進出作品です。スポンサー企業賞(GMOインターネットグループ様)もいただきました。ありがとうございます!

    • アプリケーションのソースコードを読み込ませると,各モジュールの各シンボル(関数やクラス,変数など)に対するドキュメントを自動生成。

    練習日程をLINE Notify APIを利用してリマインドするGoogleAppsScriptプロジェクト。 ドメイン駆動設計・クリーンアーキテクチャを用いて実装。

  • 開発系アルバイト

    株式会社StudioRadish

    • 「ホワイトボード」プロジェクト。オンラインの手書き・ジェスチャーベースの掲示板
    • クライアントサイド開発。svg画像を制御することでUIを提供

    株式会社GeeLive

    • AWS LambdaやPythonを用いたAPI開発
    • フロントエンドWebページの開発

Skills

Language Proficiency
JavaScript ★★★★☆
TypeScript ★★★★☆
Python ★★★☆☆
HTML/CSS ★★★☆☆
PHP(Laravel) ★★☆☆☆
SQL ★★☆☆☆
Perl ★★☆☆☆
C ★☆☆☆☆
Git ★★★☆☆
Docker ★★☆☆☆
AWS ★★☆☆☆

Personal Projects

pdf-notebook's People

Contributors

hlhhs11 avatar

Watchers

 avatar

pdf-notebook's Issues

[Task] 仕様検討

プロジェクトの説明

PDFで与えられる資料に対して,手描き注釈テキストボックスではなく,どのようなパソコンにも存在するキーボード及び*マウス(タッチパッド)*のみを利用した方法でノートを記録する手段を提供する。
具体的なペルソナは,「PDFで渡された講義資料を見ながら講義を受ける大学生」であり,彼らが「文脈の読み取りづらい資料」や,「穴埋めが存在する資料」に対しても,普通のパソコンだけで見やすいノート・記録をとれる仕組みを提供することを目的とする。

機能の概要

本アプリケーションでは,画面を左右に2分割して,片方に「ノートを取りたいPDF」を,もう片方に「ノート編集画面(マークダウンのリッチテキストエディタ)」を表示するUIを想定している。
ノート編集時にメインとなる機能は,1. ノートをリッチテキストエディタで編集する機能と,2. ノートにPDF内のページを関連付ける(参照を設定する)機能である。そして,これらの機能を利用して作成したPDFとノートを合わせた「資料」を閲覧する際には,PDF側ではなくノート側を主体として読んでいくことが期待される。すなわち,ノート側に講義時の文脈などを記録していき,必要に応じて資料の該当ページを参照できるような導線が理想的である。
最初に考えた方法は,PDFの各ページとノートの各ページを一対一で紐付ける方法である。PowerPointの発表者メモ機能のイメージに近い。PDFの該当ページに不足している情報(穴埋めの中身や,教員の発言など)を補うにはこれで十分である。
しかしながら,それだけではPDF資料の各ページを繋ぐ「文脈」を明示するには足りないだろう。たとえば,PDF資料の中で「重要な部分」(数式やまとめページなど)に対して「重要でない部分」(具体例や参考資料など)のページ数における比重が圧倒的に多い場合,PDFの各ページに対して補足事項が書かれていたところで,根本的な「読みづらさ」はほとんど改善されないのだ。また酷い場合では,講義の文脈がPDF資料の途中のページから始まり,その後前の方のページに移動する,という場合もある。このようなとき,PDFの各ページに一対一で紐付いた補足メモ程度では,後から見てわかりやすいノートは書けない。
そこで,ノート側で始めから文脈(≒教員の話の順番)を記録していき,必要な場合にPDF資料への参照を設定しておく(複数対応可!)と,閲覧時に「ノートを読んでいくと,自動で対応PDFページが表示される1」あるいは「ノート内に対応PDFページが埋め込まれて表示される」というように,ノートを主体としてPDF資料も活用できるような仕組みを作りたいのだ。
このような参照の設定を実現するUIの想定案としては,たとえば「ノートのPDFと紐付けたい部分を選択(テキストを選択)」→「該当PDFページを選択」というものが考えられるだろう。

使用ライブラリ

UIにはReact等のWeb系フロントエンドUIライブラリを使用すると便利であろう。そのうえで,本アプリケーションのコアロジックを実現するためにはPDF閲覧・編集機能2と,それに紐付いたノートを編集する機能(マークダウンのリッチテキストエディタを想定)が不可欠である。

PDF閲覧・編集機能を提供するライブラリ

ChatGPTのWebBrowsing機能を利用して,HTMLに埋め込み可能なPDFエディタを調査した結果を以下に示す。
例としてpdf.jsについて簡単に調査してみたが,README.mdのOnline Demoを開いてみたところ,注釈・テキストボックスなどの簡単な編集にも対応しているようである。こうした機能を最大限利用したい。

  • PDFObject :
    PDFObjectは、HTMLドキュメントにPDFを動的に埋め込むための軽量なJavaScriptユーティリティです。これはオープンソースで、JavaScriptとHTML5を使用して開発されています。

  • pdf.js:
    Mozillaによって開発されたpdf.jsは、HTML5およびJavaScriptを使用してPDFリーダーを実装するプロジェクトです。

  • PDF.js Express:
    PDF.js Expressは、ReactベースのUIをオープンソースのPDF.jsレンダリングエンジンにラップする無料のPDF.jsビューアです。このビューアは、テキストのハイライト、フリーハンドの描画、コメント、形状など、26の事前構築された注釈を提供し、カスタム注釈を作成することも可能です。また、PDFフォームの記入と署名、およびユーザーインターフェイスのカスタマイズもサポートしています。

  • ViewerJS:
    ViewerJSは、PDF、プレゼンテーション、スプレッドシートなどのドキュメントをウェブサイトやブログで簡単に使用できるツールで、外部依存関係なしで動作します。

マークダウンのリッチテキストエディタを提供するライブラリ

PDFに紐付いたノートは,見た目を整える労力を最低限に抑えて,キーボードのみでの入力に集中できることが期待される。この点で,WYSIWYG (What You See Is What You Get)でマークダウン形式のテキストを編集するのが最も便利であろうと考えられる。
このような目的で,OSSのマークダウンのリッチテキストエディタ・ライブラリ・フレームワーク等を調査した。

関連するIssue

[このタスクに関連する他のIssueがあればリンクを追加してください]

期限

[タスクの完了予定日を指定してください]

その他の情報

要追記

Footnotes

  1. この場合,「主として表示したいページへの参照」と「主ではないが確認が必要なページへの(サブの)参照」という優先度も設定する必要がある。

  2. 本プロジェクトの主旨は「PDFに紐付いたノートの編集」機能を提供することだが,穴埋めや多少のメモを直接PDFファイルに書き込みたい場合も考えられる。このような要望にも対応できるよう,PDFは閲覧だけでなく一定程度の編集もできるようにしておきたいのだ

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.