🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

2回答

6276閲覧

PDFにある表をJavaScriptで抽出することは可能でしょうか?

退会済みユーザー

退会済みユーザー

総合スコア0

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

2クリップ

投稿2019/09/17 09:33

前提・実現したいこと

JavaScriptを使って、指定したPDF内に記載されている表部分を抽出し、テーブル構造のデータとして取得したい

試したこと

例えば、サイゼリアのアレルギー情報が記載されたPDFについて、テーブル情報をJavaScriptで抽出しようとしました。
https://www.saizeriya.co.jp/others/images/grand.pdf

Mozilla製のPDF.jsを利用して以下のような感じでやってみたのですが、表データも分割された文字列として取得できるのみで、テーブル構造として取得することができませんでした。
※ちなみにPDF.jsをnpmで取得する場合は、npm install --save pdfjs-distで利用可能です
※例はTypeScriptですが、JavaScriptで良いです。

typescript

1import pdfjsLib from "pdfjs-dist"; 2 3pdfjsLib.GlobalWorkerOptions.workerSrc = 4 './vendors~pdfjsWorker.js'; 5 6const loadingTask = pdfjsLib.getDocument("./grand_kids.pdf"); 7loadingTask.promise.then(async doc => { 8 const num = doc.numPages; 9 for (let i = 1; i <= num; i++) { 10 const a = await doc.getPage(i) 11 const text = await a.getTextContent(); 12 // textに文字列は入るが、テーブル構造にはなっていない。座標情報から頑張るしかない? 13 } 14})

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oikashinoa

2019/09/17 23:23

pdf table extract js でいくつか見つかりますが試してみてください。結果を書いていただけると嬉しいです。
退会済みユーザー

退会済みユーザー

2019/09/19 01:37

ありがとう。 pdf.js-extractくらいしか出てこないんだけど、他にありました? ちなみにpdf.js-extractはテーブル構造は引っ張れなかった。座標情報返すだけで、PDF.jsと変わりない(というか内部で使ってそれ返すだけ)
退会済みユーザー

退会済みユーザー

2019/09/19 02:26

ありがとう、ちょっとやってみてる。 #依存パッケージ(child_process)が既にnpmにないとかで試行錯誤中
退会済みユーザー

退会済みユーザー

2019/09/19 02:33

これJavaの実行環境必要系ですな。やめとこう。 ピュアJSのいいライブラリあれば引き続き教えてくだされ。 こちらではPythonのcamelot使ってherokuと連携させてやる方法を試行錯誤してみる。
oikashinoa

2019/09/19 03:52

pdf.jsは偉大ですな。代わりになるのって有償のpspdfkitくらいしか見つかんない。 これ以降は解答欄でやりましょう
guest

回答2

0

~まちがい。モジュール作ったら情報かきます~

投稿2019/09/20 09:29

編集2019/09/20 09:30
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

pdf-table-extractorWeb Demoを試してみて下さい。

サイゼリアのPDFで試すと結果をテーブルにしてくれているので、Demoのソースを見れば方法が解ると思います。

…これを見てて想定と違ったのであれば、どんなふうにテーブルが取れれればよいのか記載したほうがいいと思います。

投稿2019/09/19 12:43

編集2019/09/19 13:13
oikashinoa

総合スコア2826

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/20 00:56

デモ通りに動けば素晴らしい!!! 試してみて、こちらでも動かせればBAにします!!!!!
oikashinoa

2019/09/20 02:13

簡単にDemoのソースの解析結果(この関数何やっているよ。こんな流れだったよ)をレポートしていただけると嬉しいです。
退会済みユーザー

退会済みユーザー

2019/09/20 02:59 編集

当該モジュールは、やはりPDF.jsから取得した座標データからテーブルを類推して再構築していますね~ 簡単にいうと、 PDFJS.getDocument(pdf).then(pdf_table_extractorで一気にテーブルデータの配列に構築).then(各UIに吐き出し) という感じ!index.htmlの127行目から読み下していけばよいですな。pdf_table_extractorがこのモジュールのメイン処理ですな。 無念ながらnpmモジュールない+TS型ない+モジュールexportされてなくて再利用しにくい ので、forkしてanyしまくりの適当TSファイルに書き直してできればnpm公開しようとしているところっす~
oikashinoa

2019/09/20 03:04

素晴らしい!!!公開よろしくお願いします。
退会済みユーザー

退会済みユーザー

2019/09/20 03:55

あ、先だってとりあえずモジュールの動作は確認できたのでBAにしときます!
退会済みユーザー

退会済みユーザー

2019/09/20 09:31

頑張ってるけどちょっと時間かかりそう。期待せずにまっててちょ。できれば来週やる。
oikashinoa

2019/09/25 05:56

お疲れさまです。ありがたく使わせていただきます!
退会済みユーザー

退会済みユーザー

2019/09/25 08:09

いいねだかスターだかをnpmだかgithubだかによろしこ
oikashinoa

2019/09/25 23:08

引越し中に付きスマホで少しだけやってみたけど… github fork元にstar付けたけど、今回のnpmのソースはgitにあります? npm イイねかstarに該当する機能、有りました?有るなら付けますよ。
退会済みユーザー

退会済みユーザー

2019/09/26 01:21

githubのリポジトリをpackage.jsonに書いてなかった!書きました。ちなみに以下です。 https://github.com/kobatakuJP/pdf-table-extractor 確かにnpmはイイネとかないかも!すまん初めてだったんでよくわかってなかったw適当でごめんなさい!
oikashinoa

2019/09/26 03:01

gitにstar付けました!お疲れさまです。
退会済みユーザー

退会済みユーザー

2019/09/26 04:55

やった~あざっす!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問