Closed3
Vue3(Nuxt3)でPDFを表示したい
前提条件
- Node v18.16.0
- Nuxt 3.0.0
要件
アプリのバックエンドAPIからのPDFを取得すると、レスポンスがBlob型で返ってくる。それをクライアントにダウンロードさせずにプレビューできる機能が欲しい。
APIにアクセスするにはトークンが必要なので、pdf.jsを使って単にURLを指定するだけではPDFを取得することが出来ない(はず。未検証)。そのため、トークンの送受信が可能なクライアントでBlobを取得することになった。
VueでPDFをプレビューできるライブラリ
-
vue-pdf: Vue2にしか対応していなさそう
-
@tato30/vue-pdf: Vue3に対応していそう
-
pdf.js: 上の2つはこれのラッパーライブラリ
@tato30/vue-pdfでBlobのPDFを表示させる方法
@tato30/vue-pdfでは、usePDF
というフックでpdfを読み込み、pdfのデータを読み込める関数が用意されている。usePDF
は以下のように用いる(→Docs: Basic Usage)
const { pdf, pages, info } = usePDF('document.pdf')
引数には基本的に、PDFが存在するURLを書くようであるが、今回はURLではなく、ダウンロードしたあとのBlobかそれを変換したデータを引数に渡したい。
usePDF
の引数の型
export type UsePDFSrc = string | URL | TypedArray | PDFDataRangeTransport | DocumentInitParameters;
また、この型は本家pdf.jsのsrcの型と同じである。
This parameter is the same src of pdf.js
https://tato30.github.io/VuePDF/guide/composables.html#usepdf
そのため、pdf.jsでBlobになったPDFを読み込む方法を調べれば良さそうである。
pdf.jsでBlobをビューワに渡すためのデータの変換方法
もろにこの記事が参考になりそう
ここの中で一番実装が簡単そうなのは、次のように、URL.creageObjectURL
を使う方法だった。
// resにはblobが入っている
fileURL = URL.createObjectURL(res);
const { pdf, pages, info } = usePDF(fileURL);
このスクラップは2024/02/02にクローズされました