Search code examples
javascriptangulartypescriptangular10

Download pdf from a URL instead of opening in a new tab


Is there any possible way in Angular 10 / Typescript to download a PDF from a URL instead of opening it in a new tab?

Sample URL: http://www.africau.edu/images/default/sample.pdf


Solution

  • If you need to download and save it an anchor tag with the download attribute as @sasa suggests should suffice. Here's some sample code for Angular.

    <a [href]="url" download>Click to download</a>
    

    If you'd like to programatically download the file you need to use the HttpClient from Angular:

    Install this dependency to make your life easier:

    npm install file-saver --save
    npm install -D @types/file-saver
    

    And have a generic service

    import {saveAs} from 'file-saver'
    @Injectable({ providedIn: 'root' })
    export class DownloadService {
    
      constructor(private http: HttpClient) {}
    
      downloadUrl(url: string, filename: string): Observable<Blob> {
        return this.http.get(url, {responseType: 'blob' }).pipe(
          map(res => res.blob()),
          tap(blob => saveAs(blob, filename))
        )
      }
    }
    

    Notice that calling the function won't download the file; you will need to subscribe to the Observable<Blob> returned or transform it into a Promise and await it