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.
Asked
Active
Viewed 8.9k times
19

Willi Mentzel
- 27,862
- 20
- 113
- 121

Harish Krishnan
- 1,693
- 4
- 17
- 25
-
3have you tried using `window.open('filename','_blank');` – Pardeep Jain Jul 06 '18 at 06:33
-
Yes, that's the function I am using now. Only thing is I am getting the data directly from backend and not local file – Harish Krishnan Jul 06 '18 at 06:33
-
yes, NP, have you tried this method? with `_blank`? – Pardeep Jain Jul 06 '18 at 06:34
-
Yes, the window just opens and closes immediately in chrome – Harish Krishnan Jul 06 '18 at 06:34
-
Check value of `Content-Disposition` header. https://stackoverflow.com/questions/6293893/how-do-i-force-files-to-open-in-the-browser-instead-of-downloading-pdf – barbsan Jul 06 '18 at 06:42
-
1Can you provide a minimal working example, please? Otherwise it's difficult to find issues. – FranzHuber23 Jul 06 '18 at 06:59
-
I am using window.open(fileURL, '_blank'); – Harish Krishnan Jul 06 '18 at 07:00
6 Answers
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
-
14Be 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
-
3How to set file name while opening file in new tab with above approach? – Nagaraja JB Jun 10 '19 at 11:24
-
1
-
1can 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>

Hoiama Rodrigues
- 318
- 4
- 4
-
3Hi 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' });
}));

Ulises Moreno
- 47
- 4