微信小程序本身不支持屏蔽下载按钮加载在线pdf。因此,需要通过其它方式进行加载。
在这里,使用当前最新版的pdf.js 3.0+,点击跳转至下载地址
下载后,可以屏蔽下载按钮,修改view.html如下:
- html>
- <html dir="ltr" mozdisallowselectionprint>
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
- <meta name="google" content="notranslate">
- <title>浏览title>
-
- <link rel="stylesheet" href="viewer.css">
-
- <link rel="resource" type="application/l10n" href="locale/locale.properties">
- <script src="../build/pdf.js">script>
-
- <script src="viewer.js">script>
-
- head>
-
- <body tabindex="1">
- <div id="outerContainer">
-
- <div id="sidebarContainer">
- <div id="toolbarSidebar">
- <div id="toolbarSidebarLeft">
- <div id="sidebarViewButtons" class="splitToolbarButton toggled" role="radiogroup">
- <button id="viewThumbnail" class="toolbarButton toggled" title="Show Thumbnails" tabindex="2" data-l10n-id="thumbs" role="radio" aria-checked="true" aria-controls="thumbnailView">
- <span data-l10n-id="thumbs_label">Thumbnailsspan>
- button>
- <button id="viewOutline" class="toolbarButton" title="Show Document Outline (double-click to expand/collapse all items)" tabindex="3" data-l10n-id="document_outline" role="radio" aria-checked="false" aria-controls="outlineView">
- <span data-l10n-id="document_outline_label">Document Outlinespan>
- button>
- <button id="viewAttachments" class="toolbarButton" title="Show Attachments" tabindex="4" data-l10n-id="attachments" role="radio" aria-checked="false" aria-controls="attachmentsView">
- <span data-l10n-id="attachments_label">Attachmentsspan>
- button>
- <button id="viewLayers" class="toolbarButton" title="Show Layers (double-click to reset all layers to the default state)" tabindex="5" data-l10n-id="layers" role="radio" aria-checked="false" aria-controls="layersView">
- <span data-l10n-id="layers_label">Layersspan>
- button>
- div>
- div>
-
- <div id="toolbarSidebarRight">
- <div id="outlineOptionsContainer" class="hidden">
- <div class="verticalToolbarSeparator">div>
-
- <button id="currentOutlineItem" class="toolbarButton" disabled="disabled" title="Find Current Outline Item" tabindex="6" data-l10n-id="current_outline_item">
- <span data-l10n-id="current_outline_item_label">Current Outline Itemspan>
- button>
- div>
- div>
- div>
- <div id="sidebarContent">
- <div id="thumbnailView">
- div>
- <div id="outlineView" class="hidden">
- div>
- <div id="attachmentsView" class="hidden">
- div>
- <div id="layersView" class="hidden">
- div>
- div>
- <div id="sidebarResizer">div>
- div>
-
- <div id="mainContainer">
- <div class="findbar hidden doorHanger" id="findbar">
- <div id="findbarInputContainer">
- <input id="findInput" class="toolbarField" title="Find" placeholder="Find in document…" tabindex="91" data-l10n-id="find_input" aria-invalid="false">
- <div class="splitToolbarButton">
- <button id="findPrevious" class="toolbarButton" title="Find the previous occurrence of the phrase" tabindex="92" data-l10n-id="find_previous">
- <span data-l10n-id="find_previous_label">Previousspan>
- button>
- <div class="splitToolbarButtonSeparator">div>
- <button id="findNext" class="toolbarButton" title="Find the next occurrence of the phrase" tabindex="93" data-l10n-id="find_next">
- <span data-l10n-id="find_next_label">Nextspan>
- button>
- div>
- div>
-
- <div id="findbarOptionsOneContainer">
- <input type="checkbox" id="findHighlightAll" class="toolbarField" tabindex="94">
- <label for="findHighlightAll" class="toolbarLabel" data-l10n-id="find_highlight">Highlight Alllabel>
- <input type="checkbox" id="findMatchCase" class="toolbarField" tabindex="95">
- <label for="findMatchCase" class="toolbarLabel" data-l10n-id="find_match_case_label">Match Caselabel>
- div>
- <div id="findbarOptionsTwoContainer">
- <input type="checkbox" id="findMatchDiacritics" class="toolbarField" tabindex="96">
- <label for="findMatchDiacritics" class="toolbarLabel" data-l10n-id="find_match_diacritics_label">Match Diacriticslabel>
- <input type="checkbox" id="findEntireWord" class="toolbarField" tabindex="97">
- <label for="findEntireWord" class="toolbarLabel" data-l10n-id="find_entire_word_label">Whole Wordslabel>
- div>
-
- <div id="findbarMessageContainer" aria-live="polite">
- <span id="findResultsCount" class="toolbarLabel">span>
- <span id="findMsg" class="toolbarLabel">span>
- div>
- div>
-
- <div class="editorParamsToolbar hidden doorHangerRight" id="editorFreeTextParamsToolbar">
- <div class="editorParamsToolbarContainer">
- <div class="editorParamsSetter">
- <label for="editorFreeTextColor" class="editorParamsLabel" data-l10n-id="editor_free_text_color">Colorlabel>
- <input type="color" id="editorFreeTextColor" class="editorParamsColor" tabindex="100">
- div>
- <div class="editorParamsSetter">
- <label for="editorFreeTextFontSize" class="editorParamsLabel" data-l10n-id="editor_free_text_size">Sizelabel>
- <input type="range" id="editorFreeTextFontSize" class="editorParamsSlider" value="10" min="5" max="100" step="1" tabindex="101">
- div>
- div>
- div>
-
- <div class="editorParamsToolbar hidden doorHangerRight" id="editorInkParamsToolbar">
- <div class="editorParamsToolbarContainer">
- <div class="editorParamsSetter">
- <label for="editorInkColor" class="editorParamsLabel" data-l10n-id="editor_ink_color">Colorlabel>
- <input type="color" id="editorInkColor" class="editorParamsColor" tabindex="102">
- div>
- <div class="editorParamsSetter">
- <label for="editorInkThickness" class="editorParamsLabel" data-l10n-id="editor_ink_thickness">Thicknesslabel>
- <input type="range" id="editorInkThickness" class="editorParamsSlider" value="1" min="1" max="20" step="1" tabindex="103">
- div>
- <div class="editorParamsSetter">
- <label for="editorInkOpacity" class="editorParamsLabel" data-l10n-id="editor_ink_opacity">Opacitylabel>
- <input type="range" id="editorInkOpacity" class="editorParamsSlider" value="100" min="1" max="100" step="1" tabindex="104">
- div>
- div>
- div>
-
- <div style="display: none;" id="secondaryToolbar" class="secondaryToolbar hidden doorHangerRight">
- <div id="secondaryToolbarButtonContainer">
- <button id="secondaryOpenFile" class="secondaryToolbarButton visibleLargeView" title="Open File" tabindex="51" data-l10n-id="open_file">
- <span data-l10n-id="open_file_label">Openspan>
- button>
-
- <button id="secondaryPrint" class="secondaryToolbarButton visibleMediumView" title="Print" tabindex="52" data-l10n-id="print">
- <span data-l10n-id="print_label">Printspan>
- button>
-
- <button id="secondaryDownload" class="secondaryToolbarButton visibleMediumView" title="Save" tabindex="53" data-l10n-id="save">
- <span data-l10n-id="save_label">Savespan>
- button>
-
- <div class="horizontalToolbarSeparator visibleLargeView">div>
-
- <button id="presentationMode" class="secondaryToolbarButton" title="Switch to Presentation Mode" tabindex="54" data-l10n-id="presentation_mode">
- <span data-l10n-id="presentation_mode_label">Presentation Modespan>
- button>
-
- <a href="#" id="viewBookmark" class="secondaryToolbarButton" title="Current view (copy or open in new window)" tabindex="55" data-l10n-id="bookmark">
- <span data-l10n-id="bookmark_label">Current Viewspan>
- a>
-
- <div class="horizontalToolbarSeparator">div>
-
- <button id="firstPage" class="secondaryToolbarButton" title="Go to First Page" tabindex="56" data-l10n-id="first_page">
- <span data-l10n-id="first_page_label">Go to First Pagespan>
- button>
- <button id="lastPage" class="secondaryToolbarButton" title="Go to Last Page" tabindex="57" data-l10n-id="last_page">
- <span data-l10n-id="last_page_label">Go to Last Pagespan>
- button>
-
- <div class="horizontalToolbarSeparator">div>
-
- <button id="pageRotateCw" class="secondaryToolbarButton" title="Rotate Clockwise" tabindex="58" data-l10n-id="page_rotate_cw">
- <span data-l10n-id="page_rotate_cw_label">Rotate Clockwisespan>
- button>
- <button id="pageRotateCcw" class="secondaryToolbarButton" title="Rotate Counterclockwise" tabindex="59" data-l10n-id="page_rotate_ccw">
- <span data-l10n-id="page_rotate_ccw_label">Rotate Counterclockwisespan>
- button>
-
- <div class="horizontalToolbarSeparator">div>
-
- <div id="cursorToolButtons" role="radiogroup">
- <button id="cursorSelectTool" class="secondaryToolbarButton toggled" title="Enable Text Selection Tool" tabindex="60" data-l10n-id="cursor_text_select_tool" role="radio" aria-checked="true">
- <span data-l10n-id="cursor_text_select_tool_label">Text Selection Toolspan>
- button>
- <button id="cursorHandTool" class="secondaryToolbarButton" title="Enable Hand Tool" tabindex="61" data-l10n-id="cursor_hand_tool" role="radio" aria-checked="false">
- <span data-l10n-id="cursor_hand_tool_label">Hand Toolspan>
- button>
- div>
-
- <div class="horizontalToolbarSeparator">div>
-
- <div id="scrollModeButtons" role="radiogroup">
- <button id="scrollPage" class="secondaryToolbarButton" title="Use Page Scrolling" tabindex="62" data-l10n-id="scroll_page" role="radio" aria-checked="false">
- <span data-l10n-id="scroll_page_label">Page Scrollingspan>
- button>
- <button id="scrollVertical" class="secondaryToolbarButton toggled" title="Use Vertical Scrolling" tabindex="63" data-l10n-id="scroll_vertical" role="radio" aria-checked="true">
- <span data-l10n-id="scroll_vertical_label" >Vertical Scrollingspan>
- button>
- <button id="scrollHorizontal" class="secondaryToolbarButton" title="Use Horizontal Scrolling" tabindex="64" data-l10n-id="scroll_horizontal" role="radio" aria-checked="false">
- <span data-l10n-id="scroll_horizontal_label">Horizontal Scrollingspan>
- button>
- <button id="scrollWrapped" class="secondaryToolbarButton" title="Use Wrapped Scrolling" tabindex="65" data-l10n-id="scroll_wrapped" role="radio" aria-checked="false">
- <span data-l10n-id="scroll_wrapped_label">Wrapped Scrollingspan>
- button>
- div>
-
- <div class="horizontalToolbarSeparator">div>
-
- <div id="spreadModeButtons" role="radiogroup">
- <button id="spreadNone" class="secondaryToolbarButton toggled" title="Do not join page spreads" tabindex="66" data-l10n-id="spread_none" role="radio" aria-checked="true">
- <span data-l10n-id="spread_none_label">No Spreadsspan>
- button>
- <button id="spreadOdd" class="secondaryToolbarButton" title="Join page spreads starting with odd-numbered pages" tabindex="67" data-l10n-id="spread_odd" role="radio" aria-checked="false">
- <span data-l10n-id="spread_odd_label">Odd Spreadsspan>
- button>
- <button id="spreadEven" class="secondaryToolbarButton" title="Join page spreads starting with even-numbered pages" tabindex="68" data-l10n-id="spread_even" role="radio" aria-checked="false">
- <span data-l10n-id="spread_even_label">Even Spreadsspan>
- button>
- div>
-
- <div class="horizontalToolbarSeparator">div>
-
- <button id="documentProperties" class="secondaryToolbarButton" title="Document Properties…" tabindex="69" data-l10n-id="document_properties" aria-controls="documentPropertiesDialog">
- <span data-l10n-id="document_properties_label">Document Properties…span>
- button>
- div>
- div>
-
- <div class="toolbar">
- <div id="toolbarContainer">
- <div id="toolbarViewer">
- <div id="toolbarViewerLeft">
- <button id="sidebarToggle" class="toolbarButton" title="Toggle Sidebar" tabindex="11" data-l10n-id="toggle_sidebar" aria-expanded="false" aria-controls="sidebarContainer">
- <span data-l10n-id="toggle_sidebar_label">Toggle Sidebarspan>
- button>
- <div class="toolbarButtonSpacer">div>
- <button id="viewFind" class="toolbarButton" title="Find in Document" tabindex="12" data-l10n-id="findbar" aria-expanded="false" aria-controls="findbar">
- <span data-l10n-id="findbar_label">Findspan>
- button>
- <div class="splitToolbarButton hiddenSmallView">
- <button class="toolbarButton" title="Previous Page" id="previous" tabindex="13" data-l10n-id="previous">
- <span data-l10n-id="previous_label">Previousspan>
- button>
- <div class="splitToolbarButtonSeparator">div>
- <button class="toolbarButton" title="Next Page" id="next" tabindex="14" data-l10n-id="next">
- <span data-l10n-id="next_label">Nextspan>
- button>
- div>
- <input type="number" id="pageNumber" class="toolbarField" title="Page" value="1" min="1" tabindex="15" data-l10n-id="page" autocomplete="off">
- <span id="numPages" class="toolbarLabel">span>
- div>
- <div id="toolbarViewerRight">
- <button id="openFile" class="toolbarButton hiddenLargeView" title="Open File" tabindex="31" data-l10n-id="open_file">
- <span data-l10n-id="open_file_label">Openspan>
- button>
-
- <button id="print" class="toolbarButton hiddenMediumView" title="Print" tabindex="32" data-l10n-id="print">
- <span data-l10n-id="print_label">Printspan>
- button>
-
- <button id="download" class="toolbarButton hiddenMediumView" title="Save" tabindex="33" data-l10n-id="save">
- <span data-l10n-id="save_label">Savespan>
- button>
-
- <div class="verticalToolbarSeparator hiddenMediumView">div>
-
- <div style="display: none;" id="editorModeButtons" class="splitToolbarButton toggled" role="radiogroup">
- <button style="display: none;" id="editorFreeText" class="toolbarButton" disabled="disabled" title="Text" role="radio" aria-checked="false" tabindex="34" data-l10n-id="editor_free_text2">
- <span data-l10n-id="editor_free_text2_label">Textspan>
- button>
- <button style="display: none;" id="editorInk" class="toolbarButton" disabled="disabled" title="Draw" role="radio" aria-checked="false" tabindex="35" data-l10n-id="editor_ink2">
- <span data-l10n-id="editor_ink2_label">Drawspan>
- button>
- div>
-
- <div id="editorModeSeparator" class="verticalToolbarSeparator">div>
-
- <button style="display: none;" id="secondaryToolbarToggle" class="toolbarButton" title="Tools" tabindex="48" data-l10n-id="tools" aria-expanded="false" aria-controls="secondaryToolbar">
- <span data-l10n-id="tools_label">Toolsspan>
- button>
- div>
- <div id="toolbarViewerMiddle">
- <div class="splitToolbarButton">
- <button id="zoomOut" class="toolbarButton" title="Zoom Out" tabindex="21" data-l10n-id="zoom_out">
- <span data-l10n-id="zoom_out_label">Zoom Outspan>
- button>
- <div class="splitToolbarButtonSeparator">div>
- <button id="zoomIn" class="toolbarButton" title="Zoom In" tabindex="22" data-l10n-id="zoom_in">
- <span data-l10n-id="zoom_in_label">Zoom Inspan>
- button>
- div>
- <span id="scaleSelectContainer" class="dropdownToolbarButton">
- <select id="scaleSelect" title="Zoom" tabindex="23" data-l10n-id="zoom">
- <option id="pageAutoOption" title="" value="auto" selected="selected" data-l10n-id="page_scale_auto">Automatic Zoomoption>
- <option id="pageActualOption" title="" value="page-actual" data-l10n-id="page_scale_actual">Actual Sizeoption>
- <option id="pageFitOption" title="" value="page-fit" data-l10n-id="page_scale_fit">Page Fitoption>
- <option id="pageWidthOption" title="" value="page-width" data-l10n-id="page_scale_width">Page Widthoption>
- <option id="customScaleOption" title="" value="custom" disabled="disabled" hidden="true">option>
- <option title="" value="0.5" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 50 }'>50%option>
- <option title="" value="0.75" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 75 }'>75%option>
- <option title="" value="1" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 100 }'>100%option>
- <option title="" value="1.25" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 125 }'>125%option>
- <option title="" value="1.5" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 150 }'>150%option>
- <option title="" value="2" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 200 }'>200%option>
- <option title="" value="3" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 300 }'>300%option>
- <option title="" value="4" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 400 }'>400%option>
- select>
- span>
- div>
- div>
- <div id="loadingBar">
- <div class="progress">
- <div class="glimmer">
- div>
- div>
- div>
- div>
- div>
-
- <div id="viewerContainer" tabindex="0">
- <div id="viewer" class="pdfViewer">div>
- div>
- div>
-
- <div id="dialogContainer">
- <dialog id="passwordDialog">
- <div class="row">
- <label for="password" id="passwordText" data-l10n-id="password_label">Enter the password to open this PDF file:label>
- div>
- <div class="row">
- <input type="password" id="password" class="toolbarField">
- div>
- <div class="buttonRow">
- <button id="passwordCancel" class="dialogButton"><span data-l10n-id="password_cancel">Cancelspan>button>
- <button id="passwordSubmit" class="dialogButton"><span data-l10n-id="password_ok">OKspan>button>
- div>
- dialog>
- <dialog id="documentPropertiesDialog">
- <div class="row">
- <span id="fileNameLabel" data-l10n-id="document_properties_file_name">File name:span>
- <p id="fileNameField" aria-labelledby="fileNameLabel">-p>
- div>
- <div class="row">
- <span id="fileSizeLabel" data-l10n-id="document_properties_file_size">File size:span>
- <p id="fileSizeField" aria-labelledby="fileSizeLabel">-p>
- div>
- <div class="separator">div>
- <div class="row">
- <span id="titleLabel" data-l10n-id="document_properties_title">Title:span>
- <p id="titleField" aria-labelledby="titleLabel">-p>
- div>
- <div class="row">
- <span id="authorLabel" data-l10n-id="document_properties_author">Author:span>
- <p id="authorField" aria-labelledby="authorLabel">-p>
- div>
- <div class="row">
- <span id="subjectLabel" data-l10n-id="document_properties_subject">Subject:span>
- <p id="subjectField" aria-labelledby="subjectLabel">-p>
- div>
- <div class="row">
- <span id="keywordsLabel" data-l10n-id="document_properties_keywords">Keywords:span>
- <p id="keywordsField" aria-labelledby="keywordsLabel">-p>
- div>
- <div class="row">
- <span id="creationDateLabel" data-l10n-id="document_properties_creation_date">Creation Date:span>
- <p id="creationDateField" aria-labelledby="creationDateLabel">-p>
- div>
- <div class="row">
- <span id="modificationDateLabel" data-l10n-id="document_properties_modification_date">Modification Date:span>
- <p id="modificationDateField" aria-labelledby="modificationDateLabel">-p>
- div>
- <div class="row">
- <span id="creatorLabel" data-l10n-id="document_properties_creator">Creator:span>
- <p id="creatorField" aria-labelledby="creatorLabel">-p>
- div>
- <div class="separator">div>
- <div class="row">
- <span id="producerLabel" data-l10n-id="document_properties_producer">PDF Producer:span>
- <p id="producerField" aria-labelledby="producerLabel">-p>
- div>
- <div class="row">
- <span id="versionLabel" data-l10n-id="document_properties_version">PDF Version:span>
- <p id="versionField" aria-labelledby="versionLabel">-p>
- div>
- <div class="row">
- <span id="pageCountLabel" data-l10n-id="document_properties_page_count">Page Count:span>
- <p id="pageCountField" aria-labelledby="pageCountLabel">-p>
- div>
- <div class="row">
- <span id="pageSizeLabel" data-l10n-id="document_properties_page_size">Page Size:span>
- <p id="pageSizeField" aria-labelledby="pageSizeLabel">-p>
- div>
- <div class="separator">div>
- <div class="row">
- <span id="linearizedLabel" data-l10n-id="document_properties_linearized">Fast Web View:span>
- <p id="linearizedField" aria-labelledby="linearizedLabel">-p>
- div>
- <div class="buttonRow">
- <button id="documentPropertiesClose" class="dialogButton"><span data-l10n-id="document_properties_close">Closespan>button>
- div>
- dialog>
- <dialog id="printServiceDialog" style="min-width: 200px;">
- <div class="row">
- <span data-l10n-id="print_progress_message">Preparing document for printing…span>
- div>
- <div class="row">
- <progress value="0" max="100">progress>
- <span data-l10n-id="print_progress_percent" data-l10n-args='{ "progress": 0 }' class="relative-progress">0%span>
- div>
- <div class="buttonRow">
- <button id="printCancel" class="dialogButton"><span data-l10n-id="print_progress_close">Cancelspan>button>
- div>
- dialog>
- div>
-
- div>
- <div id="printContainer">div>
-
- <input type="file" id="fileInput" class="hidden">
- body>
- html>
如果需要修改以文件名做为页面的Title,需要修改view.js,屏蔽掉设置document.title的代码
设置nginx.conf:
- server {
- listen 2000;
- listen [::]:2000;
- server_name _;
- root /home/data/file-db;
- index /html/web/viewer.html;
- location / {
- autoindex off;
- autoindex_exact_size off;
- autoindex_localtime off;
- }
- }
把pdf文件放置在 /home/data/file-db中(含子目录)
把pdf.js相关的web和build文件夹放在/home/data/file-db/html中。
使用地址:http://<
“?”后的部分为encodeURIcomponent()后的url,端口号需要与本服务url相同
- <view>
- <web-view :src="src">web-view>
- view>
-
- <script>
- export default {
- data: function (){
- return {
- src: null
- };
- },
- onLoad(options) {
- this.src = 'http://171.84.0.40:20000/html/web/viewer.html?file=' + encodeURIComponent(options.url);
- }
- }
- script>
-