ppt-preview.vue 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <template>
  2. <div class="preview">
  3. <iframe :src="`https://view.officeapps.live.com/op/view.aspx?src=${encodeURIComponent(url)}`" frameborder="0"></iframe>
  4. </div>
  5. </template>
  6. <script setup lang="ts">
  7. import { IProps } from "../pdf-preview/index.type";
  8. import { onMounted } from 'vue';
  9. const props = defineProps<IProps>();
  10. const toBlob = (url: string) => {
  11. return new Promise((resolve, reject) => {
  12. fetch(url)
  13. .then((response) => response.blob())
  14. .then((blob) => {
  15. resolve(blob);
  16. })
  17. .catch((err) => reject(err));
  18. });
  19. };
  20. const toArrayBuffer = (blob: Blob): Promise<ArrayBuffer> => {
  21. return new Promise((resolve) => {
  22. const reader = new FileReader()
  23. reader.onload = () => resolve(reader.result as ArrayBuffer);
  24. reader.readAsArrayBuffer(blob)
  25. })
  26. }
  27. const initData = async () => {
  28. const b = await toBlob(props.url);
  29. const ab = await toArrayBuffer(b as Blob);
  30. console.log(props.url, ab);
  31. };
  32. onMounted(() => {
  33. initData()
  34. })
  35. </script>
  36. <style scoped lang="scss">
  37. .preview {
  38. position: fixed;
  39. top: 0;
  40. left: 0;
  41. width: 100vw;
  42. max-height: 100vh;
  43. overflow: auto;
  44. iframe {
  45. width: 100%;
  46. height: 100vh;
  47. }
  48. }
  49. </style>