Skip to content

wh131462/ngx-file-preview

Repository files navigation

NGX File Preview 版本 下载量 playground github

中文 · English

NGX File Preview is a powerful Angular file preview component library that supports previewing a wide variety of file formats and offers flexible customization options, providing an efficient and user-friendly solution for developers.

Preview Examples

Default List View

Default List View

Custom Template (Example, fully customizable)

Custom Template

Preview Effects for Different File Types

File Type Preview Effect
Image Image Preview-dark Image Preview-light
Video Video Preview-dark Video Preview-light
Audio Audio Preview-dark Audio Preview-light
PPT PPT Preview-dark PPT Preview-light
Word Word Preview-dark Word Preview-light
Excel Excel Preview-dark Excel Preview-light
Text Text Preview-dark Text Preview-light
Zip Zip Preview-dark Zip Preview-light
Unknown Unknown Preview-dark Unknown Preview-light

Features

  • Support for Multiple File Formats: Fully compatible with image, PDF, PPT, Word, text, video, and many other common file types.
  • Intuitive User Experience: Provides clear indicators for unknown file types and supports user-friendly interactions for different file formats.
  • Dark Mode and Light Mode: Adapts to various use cases with visual preferences for both dark and light modes, including auto mode switching.
  • Flexible Usage: Supports both directive-based and component-based usage, offering flexibility to meet different development requirements.
  • Lightweight Design: Optimized for performance and easy integration into any project, ensuring smooth and efficient operation.
  • Keyboard Shortcut Support: Increases efficiency by allowing easy navigation and closing of the preview with keyboard shortcuts.

Installation

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

Configuration

1. Font Icon Configuration

Add the necessary styles and scripts to your angular.json file:

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

2. Module Imports

Import the required components in your Angular module:

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

@Component({
  imports: [
    PreviewDirective,
    PreviewComponent,
  ]
})

Usage

1. Directive Method

The simplest usage method: Apply the directive directly to an element:

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

@Component({
  imports: [PreviewDirective],
  template: `
    <!-- Use themeMode to specify the display mode (dark/light). By default, it automatically switches based on time, but can also be manually toggled inside the preview page -->
    <div [ngxFilePreview]="file" themeMode="light">Click to preview a single file</div>
    <div [ngxFilePreview]="file" themeMode="dark" (previewEvent)="handlePreviewEvent($event)">Click to preview a single file</div>
    <div [ngxFilePreview]="file" themeMode="auto" [autoConfig]="{dark: {start: 19, end: 7}}">Click to preview a single file</div>
    <div [ngxFilePreview]="files">Click to preview multiple files</div>
  `
})
export class YourComponent {
  file: PreviewFile = {
    name: 'example.jpg',
    type: 'image',
    url: 'path/to/file.jpg'
  };

  files: PreviewFile[] = [
    // ... file array
  ];

  handlePreviewEvent(event: PreviewEvent) {
    const { type, message, event: targetEvent } = event;
    if (type === "error") {
      console.log(message); // Handle error event
    }
    if (type === "select") {
      console.log(targetEvent); // Handle file selection event
    }
  }
}

2. Component Method

Using the Default List Template:

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

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

Using a Custom Template:

@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>
  `
})

File Configuration

PreviewFile Interface

interface PreviewFile {
  url: string;          // File URL
  type: PreviewType;    // File type
  name: string;         // File name
  size?: number;        // File size (optional)
  lastModified?: number;// Last modified time (optional)
  coverUrl?: string;    // Cover image URL (for video/audio, optional)
}

Supported File Types (PreviewType)

type PreviewType = 
  | 'image'   // Image
  | 'pdf'     // PDF Document
  | 'ppt'     // PPT Presentation
  | 'word'    // Word Document
  | 'txt'     // Text File
  | 'video'   // Video
  | 'excel'   // Excel Spreadsheet
  | 'audio'   // Audio
  | 'zip'     // Compressed File
  | 'unknown' // Unknown Type

Keyboard Shortcuts

In preview mode, the following shortcuts are available:

  • Previous file
  • Next file
  • Esc Close preview

Development Guide

  1. Clone the repository:
git clone https://github.com/wh131462/ngx-file-preview.git
  1. Install dependencies:
npm install
  1. Start the development server:
npm run start
  1. Build the library:
npm run build

Contribution Guidelines

Feel free to submit Issues and Pull Requests to help improve this project!

License

MIT

Acknowledgments

This project uses the following excellent open-source libraries:

We appreciate the contributions from these open-source projects to the community!