19

I tried opening a PDF file using the window.open(), but the window opens and closes automatically and the file is downloaded like any other file. How to make the pdf file open in new tab? There are no ad blockers installed.

Willi Mentzel
  • 27,862
  • 20
  • 113
  • 121
Harish Krishnan
  • 1,693
  • 4
  • 17
  • 25

6 Answers6

52

From @barbsan idea, I changed the http headers and received a blob and used that to display the blob as pdf using window.open(). It worked.

Here is my sample code.

In service file

downloadPDF(url): any {
    const options = { responseType: ResponseContentType.Blob  };
    return this.http.get(url, options).map(
    (res) => {
        return new Blob([res.blob()], { type: 'application/pdf' });
    });
  }

In component file

this.dataService.downloadPDF(url).subscribe(res => {
  const fileURL = URL.createObjectURL(res);
  window.open(fileURL, '_blank');
});
Willi Mentzel
  • 27,862
  • 20
  • 113
  • 121
Harish Krishnan
  • 1,693
  • 4
  • 17
  • 25
  • 14
    Be careful if you're using an ad-blocker extension. Ad-blockers block blob URLs by default. As a result, e.g. in Chrome and Firefox, with the uBlock Origin extension, it would try to open the new window and close it automatically. You can read more about here: https://stackoverflow.com/questions/51272781/why-do-ad-blockers-block-blobs – AsGoodAsItGets Sep 11 '18 at 15:15
  • Also, if you care about this working in IE too, read this: https://stackoverflow.com/questions/24007073/open-links-made-by-createobjecturl-in-ie11 – AsGoodAsItGets Sep 11 '18 at 15:59
  • 3
    How to set file name while opening file in new tab with above approach? – Nagaraja JB Jun 10 '19 at 11:24
  • 1
    any idea how to set name of new tab when opening the PDF? – Pathik Vejani Sep 11 '19 at 10:59
  • 1
    can any one provide make a file name opening file in new tab with above approach –  May 12 '20 at 12:29
  • Does this require the PDF to be publicly available? E.g. without authorization? – Jeppe May 21 '20 at 21:27
12

One liner solution to open a pdf file in new tab. You just need to have file url and use this function on button click.

window.open(url, '_blank');

Willi Mentzel
  • 27,862
  • 20
  • 113
  • 121
Waleed Shahzaib
  • 1,526
  • 2
  • 18
  • 34
1

you can display pdf fle in new tab by the line:

window.open(fileUrl, '_blank');

The fileUrl is a variable that contains the file path.

lea
  • 11
  • 2
1

For the Angular 13 version

downloadPDF(url: string): Observable<Blob> {
   const options = { responseType: 'blob' as 'json' };
   return this.httpClient
  .get<Blob>(url, options)
  .pipe(map(res => new Blob([res], { type: 'application/pdf' })));
}
Pavlo Kozachuk
  • 244
  • 3
  • 7
0

you need user the "target="_blank" in the tag ;

exemple: <a target="_blank" href="https://www.google.com/"> </a>

  • 3
    Hi Hoiama, welcome to StackOverflow! Unfortunately, your answer doesn't address the original question, which was to use explicitly `window.open()`. Please make sure to read the question and any answers thoroughly, because it's easy to miss something like this! – Ruben Helsloot Mar 15 '20 at 17:19
0

How to make it work in Angular 10, changes just a little bit, this in the service file from @K Harish answer

import { map } from 'rxjs/operators';


    return this.http.get(url, options).pipe(map(
    (res) => {
        return new Blob([res], { type: 'application/pdf' });
    }));