JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 23
  • Score
    100M100P100Q67507F
  • License MIT

A powerful Angular file preview component library supporting multiple file formats including images, videos, PDFs, Office documents, text files and more.

Package Exports

  • @eternalheart/ngx-file-preview
  • @eternalheart/ngx-file-preview/package.json

Readme

NGX File Preview

一个功能强大的 Angular 文件预览组件库,支持多种文件格式的预览,提供灵活的自定义选项。

预览效果

默认列表视图

默认列表视图

自定义模板

自定义模板

各类型文件预览效果

文件类型 预览效果
图片预览 图片预览
视频预览 视频预览
音频预览 音频预览
PPT预览 PPT预览
Word预览 Word预览
Excel预览 Excel预览
文本预览 文本预览
压缩包预览 压缩包预览
未知类型 未知类型

特性

  • 🎯 支持多种文件格式预览 (图片、PDF、PPT、Word、文本、视频等)
  • 🎨 提供默认样式,也支持完全自定义
  • 💪 支持指令和组件两种使用方式
  • 🚀 轻量级,易于集成
  • 📱 响应式设计,支持移动端
  • ⌨️ 支持键盘快捷操作

安装

npm install @eternalheart/ngx-file-preview --save docx-preview hls.js ng2-pdf-viewer pptx-preview xlsx

配置

1. 字体图标配置

angular.json 文件中添加必要的样式和脚本:

{
  "projects": {
    "your-app": {
      "architect": {
        "build": {
          "options": {
            "styles": [
              "node_modules/@eternalheart/ngx-file-preview/assets/icon/font/iconfont.css"
            ],
            "scripts": [
              "node_modules/@eternalheart/ngx-file-preview/assets/icon/color/iconfont.js"
            ]
          }
        }
      }
    }
  }
}

2. 模块导入

在需要使用的模块中导入相关组件:

import { 
  PreviewDirective, 
  PreviewComponent, 
  PreviewModalComponent 
} from 'ngx-file-preview';

@Component({
  // ... 其他配置
  imports: [
    PreviewDirective,
    PreviewComponent,
  ]
})

使用方法

1. 指令方式

最简单的使用方式,直接在元素上添加指令:

import { PreviewDirective } from '@eternalheart/ngx-file-preview';

@Component({
  imports: [PreviewDirective],
  template: `
    <div [ngxFilePreview]="file">点击预览单个文件</div>
    <div [ngxFilePreview]="files">点击预览多个文件</div>
  `
})
export class YourComponent {
  file: PreviewFile = {
    name: 'example.jpg',
    type: 'image',
    url: 'path/to/file.jpg'
  };

  files: PreviewFile[] = [
    // ... 文件数组
  ];
}

2. 组件方式

使用默认列表模板:

import { PreviewComponent } from '@eternalheart/ngx-file-preview';

@Component({
  imports: [PreviewComponent],
  template: `
    <ngx-file-preview 
      [files]="files"
      (fileSelect)="onFileSelect($event)">
    </ngx-file-preview>
  `
})

使用自定义模板:

@Component({
  template: `
    <ngx-file-preview [files]="files">
      <ng-template #itemTemplate 
                   let-file 
                   let-index="index"
                   let-isActive="isActive"
                   let-preview="preview">
        <div class="custom-item" 
             [class.active]="isActive"
             (click)="preview()">
          <span>{{ file.name }}</span>
          <span>{{ formatFileSize(file.size) }}</span>
        </div>
      </ng-template>
    </ngx-file-preview>
  `
})

文件配置

PreviewFile 接口

interface PreviewFile {
  url: string;          // 文件URL
  type: PreviewType;    // 文件类型
  name: string;         // 文件名
  size?: number;        // 文件大小(可选)
  lastModified?: number;// 最后修改时间(可选)
  coverUrl?: string;    // 封面图URL(视频/音频可用,可选)
}

支持的文件类型 (PreviewType)

type PreviewType = 
  | 'image'   // 图片
  | 'pdf'     // PDF文档
  | 'ppt'     // PPT演示文稿
  | 'word'    // Word文档
  | 'txt'     // 文本文件
  | 'video'   // 视频
  | 'excel'   // Excel表格
  | 'audio'   // 音频
  | 'zip'     // 压缩包
  | 'unknown' // 未知类型

键盘快捷键

预览模式下支持以下快捷键:

  • 上一个文件
  • 下一个文件
  • Esc 关闭预览

开发指南

  1. 克隆项目
git clone https://github.com/wh131462/ngx-file-preview.git
  1. 安装依赖
npm install
  1. 启动开发服务器
npm run start
  1. 构建库
npm run build

贡献指南

欢迎提交 Issue 和 Pull Request 来帮助改进这个项目!

License

MIT

鸣谢

本项目使用了以下优秀的开源项目:

文档预览

媒体播放

  • hls.js - HLS视频流播放支持

感谢这些项目的贡献者们为开源社区作出的贡献!

依赖说明

{
  "dependencies": {
    "docx-preview": "^0.3.3",
    "hls.js": "^1.4.12",
    "ng2-pdf-viewer": "^10.0.0",
    "pptx-preview": "^1.0.1",
    "xlsx": "^0.18.5"
  }
}

这些依赖项会在安装 ngx-file-preview 时自动安装。如果您的项目中已经包含了某些依赖,可以根据需要手动管理版本。

可选依赖

某些预览功能需要额外的依赖支持:

  • PDF预览:需要 ng2-pdf-viewer
  • Office文档预览:需要 docx-previewpptx-previewxlsx
  • HLS视频流:需要 hls.js

如果您不需要某些预览功能,可以选择不安装相应的依赖包,这样可以减小最终打包体积。