ホームページ > 記事 > ウェブフロントエンド > Vue3+Vue-PDF が PDF ファイルのオンライン プレビューを実装する方法
最初に Vue3
プロジェクトを作成し、ターミナルでコマンド
pnpm create vite vue-pdf-preview
を入力し、vue-ts
を選択して、 Enter キーを押し、 cd キーを押してプロジェクトのルート ディレクトリに入り、pnpm install
を実行して、プロジェクトの依存関係パッケージがインストールされるまで待ちます。
プロジェクトの依存関係パッケージがインストールされたら、プロジェクトを開始してコマンド pnpm run dev
を実行してみましょう。コンソールに次の内容が入力されていることがわかります
vite v2.9.9 dev server running at: > Local: http://localhost:3000/ > Network: use `--host` to expose ready in 780ms.
control/command マウスの左ボタンを押し続けると、プロジェクトがブラウザで開きます
プロジェクトは正常に開始されました追加PDF プレビュー プラグインをインストールします
pnpm install vue-pdf-embed pnpm install vue3-pdfjs# の下に新しいファイルを作成します##src
src/components/pdfPreview.vue
、vue-pdf
プレビューを初期化するコードを追加します。コードは次のとおりです。 <pre class="brush:js;"><template>
<div class="pdf-preview">
</div>
</template>
<script setup lang="ts">
import { reactive, onMounted, computed } from "vue";
const props = defineProps({
pdfUrl: {
type: String,
required: true
}
})
onMounted(() => {
});
</script>
<style lang="css" scoped>
.pdf-preview {
position: relative;
height: 100vh;
padding: 20px 0;
box-sizing: border-box;
background: rgb(66, 66, 66);
}
.vue-pdf-embed {
text-align: center;
width: 515px;
border: 1px solid #e5e5e5;
margin: 0 auto;
box-sizing: border-box;
}
</style></pre>
After追加が完了したら、
プレビュー コンポーネントを導入します。 App.vue ファイルに移動し、準備した PDF
ファイルを のようにインポートします。以下: <template>
<div>
<PDFView :pdfUrl="jsPdf" />
</div>
</template>
<script setup lang="ts">
import PDFView from "./components/pdfPreview.vue"
import jsPdf from "./Javascript.pdf"
</script>
次に戻ります。プレビュー機能を改善するために、新しく作成された
プレビュー コンポーネント ページに移動します。
最初に PDF を紹介します。プレビュー プラグイン:import VuePdfEmbed from "vue-pdf-embed";
import { createLoadingTask } from "vue3-pdfjs/esm"; // 获得总页数
Use
reactive ページ番号、ページ番号、PDF ファイルのプレビュー アドレス変数を定義します <pre class="brush:js;">const state = reactive({
source: props.pdfUrl, 预览pdf文件地址
pageNum: 1, 当前页面
scale: 1, // 缩放比例
numPages: 0, // 总页数
});</pre>
フック関数で createLoadingTask
を使用して、プレビュー ファイルの総ページ数をダウンロードします。 const loadingTask = createLoadingTask(state.source);
loadingTask.promise.then((pdf:{numPages: number}) => {
state.numPages = pdf.numPages;
});
<div class="pdf-wrap">
<vue-pdf-embed :source="state.source" : class="vue-pdf-embed" :page="state.pageNum" />
</div>
ブラウザを開くと、PDF ファイルが読み込まれていることがわかりますが、スタイルがあまり良くありません。次のステップでスタイルを最適化し、ページを改善します。 PDF ファイルの回転機能、ズーム機能、現在のページ/総ページ数表示機能
<div class="page-tool"> <div class="page-tool-item" >上一页</div> <div class="page-tool-item">下一页</div> <div class="page-tool-item">{{state.pageNum}}/{{state.numPages}}</div> <div class="page-tool-item" >放大</div> <div class="page-tool-item">缩小</div> </div>
Beautification style:
.pdf-preview { position: relative; height: 100vh; padding: 20px 0; box-sizing: border-box; background-color: e9e9e9; } .pdf-wrap{ overflow-y:auto ; } .vue-pdf-embed { text-align: center; width: 515px; border: 1px solid #e5e5e5; margin: 0 auto; box-sizing: border-box; } .page-tool { position: absolute; bottom: 35px; padding-left: 15px; padding-right: 15px; display: flex; align-items: center; background: rgb(66, 66, 66); color: white; border-radius: 19px; z-index: 100; cursor: pointer; margin-left: 50%; transform: translateX(-50%); } .page-tool-item { padding: 8px 15px; padding-left: 10px; cursor: pointer; }ファイルのページめくり機能、ズーム機能、現在ページ/総ページ数表示機能を追加、改良しました
const scale = computed(() => `transform:scale(${state.scale})`) function lastPage() { if (state.pageNum > 1) { state.pageNum -= 1; } } function nextPage() { if (state.pageNum < state.numPages) { state.pageNum += 1; } } function pageZoomOut() { if (state.scale < 2) { state.scale += 0.1; } } function pageZoomIn() { if (state.scale > 1) { state.scale -= 0.1; } }テンプレート
<div class="page-tool-item" @click="lastPage">上一页</div> <div class="page-tool-item" @click="nextPage">下一页</div> <div class="page-tool-item">{{state.pageNum}}/{{state.numPages}}</div> <div class="page-tool-item" @click="pageZoomOut">放大</div> <div class="page-tool-item" @click="pageZoomIn">缩小</div>
以上がVue3+Vue-PDF が PDF ファイルのオンライン プレビューを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。