1. 程式人生 > >PDF預覽之PDFObject.js總結

PDF預覽之PDFObject.js總結

this pdf閱讀器 -c containe link 用戶 維度 打開 輕松

get from:PDF預覽之PDFObject.js總結
  1. PDFObject.js - 將PDF嵌入到一個div內,而不是占據整個頁面(要求瀏覽器支持顯示PDF,不支持,可配置PDF.js來實現)
  2. 官網:
  3. https://pdfobject.com/
  4. github地址:
  5. https://github.com/pipwerks/PDFObject
  6. 支持:
  7. PDFObject 2.0不向後兼容1.0版本,針對現代瀏覽器設計,支持Chrome, Firefox, Safari (OS X and iOS), IE 9-11, and MS Edge
  8. 使用:
  9. 1.創建嵌入PDF的容器
  10. <div id="pdf"></div>
  11. 2.告訴PDFObject,插入的PDF文件路徑,以及插入到哪個容器
  12. <script src="library/pdfobject.js"></script>
  13. <script>
  14. PDFObject.embed(‘uploads/pdfs/dongxuemin.pdf‘, ‘#pdf‘);
  15. </script>
  16. 3.可以選擇使用CSS來指定視覺樣式,包括維度、邊框、邊距等
  17. <style>
  18. .pdfobject-container {
  19. height: 500px;
  20. }
  21. .pdfobject {
  22. border: 1px solid #ccc;
  23. }
  24. </style>
  25. 問題:
  26. 在HTML頁面中,要嵌入PDF,是否需要Javascript代碼?
  27. 答案:
  28. 可以完全不用Javascript代碼!
  29. 作者給出了頁面上嵌入PDF,而不使用任何Javascript代碼的4種方法:
  30. https://pdfobject.com/static.html
  31. /*
  32. 註意:這些示例適用於所有現代桌面瀏覽器,但結果會因舊桌面瀏覽器和移動瀏覽器而異。至於iOS 9,這些示例在iOS的Safari中都不能正常工作。
  33. */
  34. 1.使用 <object> 標簽,當瀏覽器不支持PDF嵌入時,允許我們有替代的展示內容
  35. <object data="uploads/pdfs/dongxuemin.pdf#page=2" type="application/pdf" width="100%" height="100%">
  36. <p>抱歉,您的瀏覽器不支持PDF預覽,請點擊鏈接下載PDF文件<a href="uploads/pdfs/dongxuemin.pdf"></a></p>
  37. </object>
  38. /*
  39. PDF文件如果不能被嵌入,說明該瀏覽器不支持PDF預覽,給出路徑,點擊鏈接就會下載(服務器,應該不需要怎麽配置,這都是默認配置)
  40. */
  41. 2.使用 <embed> 標簽,該方法被廣泛支持,但並非無處不在。不幸的是,<embed>並不像<object>一樣,當瀏覽器不支持時,提供替代的顯示方案,用戶看不到任何信息。
  42. <embed src="uploads/pdfs/dongxuemin.pdf#page=2" type="application/pdf" width="100%" height="100%">
  43. 3.使用 <iframe> 標簽,也是被廣泛使用
  44. <iframe src="uploads/pdfs/dongxuemin.pdf#page=2" width="100%" height="100%">
  45. <p>抱歉,您的瀏覽器不支持PDF預覽,請點擊鏈接下載PDF文件<a href="uploads/pdfs/dongxuemin.pdf"></a></p>
  46. </iframe>
  47. 4.使用 <object><iframe></iframe></object> 嵌套方式,能兼容更多用戶
  48. <object data="uploads/pdfs/dongxuemin.pdf#page=2" type="application/pdf" width="100%" height="100%">
  49. <iframe src="uploads/pdfs/dongxuemin.pdf#page=2" width="100%" height="100%">
  50. <p>抱歉,您的瀏覽器不支持PDF預覽,請點擊鏈接下載PDF文件<a href="uploads/pdfs/dongxuemin.pdf"></a></p>
  51. </iframe>
  52. </object>
  53. 既然不適用Javascript就可以嵌入PDF,為什麽還要使用 PDFObject?
  54. PDFObject2.0會檢測瀏覽器是否支持行內/嵌入PDF。
  55. 如果正在使用動態HTML,例如:單頁面應用,可能需要隨意插入PDF。如果某些瀏覽器不支持PDF嵌入,而你又沒有檢測瀏覽器是否只會PDF顯示,則會丟失PDF相關內容,以及破壞頁面的UI布局。
  56. 而使用PDFObject,可以在需要嵌入PDF時,檢測瀏覽器是否支持,如果支持,則嵌入PDF,不支持,我們不嵌入PDF相關標簽,從而使用其他內容來替代。避免上面提到的問題。
  57. PDFObject2.0支持npm。現代web應用使用npm來管理包和依賴。PDFObject2.0已註冊到npm,可以動態加載
  58. PDFObject還可以輕松地指定Adobe的專有 ‘PDF打開參數‘。(註意,這些參數僅由Adobe Reader支持,大多數PDF閱讀器將忽略參數,包括Chrome,Internet Explorer和Safari中的內置PDF閱讀器,請閱讀下文。)
  59. PDFObject不做什麽?(摘自其他文章翻譯,實在不想一字一字再翻譯了,自己英語也很有限...)
  60. PDFObject不是一個渲染引擎。 PDFObject只是將一個<embed>元素寫入頁面,並依賴於瀏覽器或瀏覽器插件來呈現PDF。如果瀏覽器不支持嵌入式PDF,PDFObject不能強制瀏覽器呈現PDF。
  61. 如果您需要強制瀏覽器顯示PDF,我們建議使用Mozilla的PDF.js.請註意,PDF.js有其自身的限制,如跨域安全限制。 PDFObject和PDF.js很好地協同工作,下面的例子中有一些很棒的PDF.js示例鏈接。
  62. PDFObject不提供自定義PDF工具欄的外觀的功能。工具欄由瀏覽器控制,並且從瀏覽器到瀏覽器(Chrome與Safari和Firefox等)的差異很大。其中一些瀏覽器提供了通過PDF打開Parmeters顯示或隱藏工具欄或功能(如搜索字段)的功能。但是,一般來說,瀏覽器不提供自定義工具欄的任何機制。如果您真的需要自定義工具欄,請嘗試針對Mozilla的PDF.js進行自定義以滿足您的需求。
  63. PDFObject不驗證PDF的存在,或PDF實際呈現。假設您指定一個有效的URL,並且網絡正常運行。 PDFObject不檢查404錯誤,JavaScript無法檢測PDF是否實際呈現,除非您使用的PDF.js不屬於PDFObject範圍。
  64. PDFObject不會神奇地實現PDF打開參數。如上所述,這些參數不被廣泛支持。 PDF渲染引擎支持它們或不支持 - PDFObject不能強制渲染引擎實現這些功能。
  65. API
  66. PDFObject提供2個屬性和1個方法:
  67. 屬性:
  68. PDFObject.supportsPDFs
  69. 檢測瀏覽器是否支持內嵌PDF,返回true | false。基於 navigator.mimeTypes[‘application/pdf‘] | ActiveX的AcroPDF.PDF | PDF.PdfCtrl 檢測。
  70. PDFObject並不會檢測是具體哪個第三方(Adobe Reader, FoxIt, PDF.js等)
  71. PDFObject.pdfobjectversion
  72. 返回PDFObject的版本
  73. 方法:
  74. PDFObject.embed(url, target, options)
  75. 嵌入成功,返回內嵌的元素對象(大多數情況返回<embed>標簽,當集成PDF.js,返回<iframe>標簽)
  76. 嵌入失敗,則返回false
  77. 作為PDFObject的核心,該方法提供了大量的功能和靈活性配置。
  78. url - pdf地址
  79. target - 可以是CSS選擇器、DOM對象、jQuery對象
  80. options - 配置對象
  81. page - 默認null。指定PDF打卡第幾頁。(前提是:瀏覽器支持)
  82. id - 默認null。指定嵌入的<embed>或<iframe>元素對象的ID
  83. PDFObject.embed(‘dongxuemin.pdf‘, ‘#pdf‘, {id: ‘my-pdf‘});
  84. 會嵌入一個<embed>元素
  85. <embed src="dongxuemin.pdf" id="my-pdf">
  86. width - 默認 ‘100%‘。會在<embed>元素上,設置一個 style="width: 100%"
  87. height - 默認 ‘100%‘。會在<embed>元素上,設置一個 style="height: 100%"
  88. /*
  89. 建議通過 CSS 來設置<embed>元素的尺寸,不設置width和height,此種方式,要求指定
  90. .pdfobject-container {
  91. width: 100px;
  92. height: 100px;
  93. }
  94. 因為:PDFObject會自動追加
  95. <embed> - pdfobject類
  96. target(PDF嵌入的容器) - pdfobject-container類
  97. 所以,我們可以使用默認的 ‘width: 100%;height: 100%;‘,使得<embed>和target一樣大小,給 target 設置大小,等同於給 <embed> 設置大小
  98. */
  99. fallbackLink - 默認 "<p>This browser does not support inline PDFs. Please download the PDF to view it: <a href=‘[url]‘>Download PDF</a></p>"。
  100. 當瀏覽器不支持嵌入式PDF時,顯示的內容
  101. 1.支持HTML標簽
  102. 2.可以在內容中使用 ‘[url]‘,自動替代成我們填寫的 ‘pdf的url‘
  103. 3.設置為false,如果不支持PDF時,什麽都不會展示
  104. pdfOpenParams - 允許指定 Adobe的PDF打開參數(不做介紹了,看文檔)
  105. /*
  106. 這2個比較重要,和PDF.js相關
  107. */
  108. PDFJS_URL - 默認null。指定引入的PDF.js的PDF查看器的viewer訪問路徑
  109. forcePDFJS - 默認false。是否強制使用PDF.js來渲染,而不管瀏覽器的默認PDF閱讀器
  110. 實例:
  111. PDFObject.embed(‘dongxuemin.pdf‘); // 未指定元素對象,則會占據整個瀏覽器窗口
  112. PDFObject.embed(‘dongxuemin.pdf‘, ‘#pdf‘); // 嵌入到指定"id=pdf"的元素對象
  113. var options = {
  114. height: ‘300px‘,
  115. pdfOpenParams: {view: ‘FitV‘, page: ‘2‘},
  116. };
  117. PDFObject.embed(‘dongxuemin.pdf‘, ‘#pdf‘, options); // 指定配置對象
  118. 參考文章:
  119. https://www.cnblogs.com/iPing9/p/7153713.html

PDF預覽之PDFObject.js總結