
Company News
Socket Named Top Sales Organization by RepVue
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.
ngx-doc-viewer
Advanced tools
This component can be used to show several different document types in an Angular app.
Documents that are publicly available can be shown in an iframe using the google or office document viewer.
Pdf files and word document that are not publicly available can be shown using the mammoth viewer or pdf viewer by passing an objectUrl.
npm install ngx-doc-viewer --save
NgxDocViewerModule@NgModule({
imports: [NgxDocViewerModule],
})
export class AppModule {}
<ngx-doc-viewer
[url]="doc"
viewer="google"
style="width:100%;height:50vh;"
></ngx-doc-viewer>
The component now shows an internal loading overlay while external viewers such as Google Docs Viewer and Office Online are initializing, so viewer switches do not appear as a blank panel.
To
Input:
Loading document...Retry0officeRetryDelay. Defaults to false3000↻Reload documentOpen source or Downloadopen or download. Defaults to openFor custom loading markup in Angular, project an ng-template named loadingContent.
The template receives $implicit and state with:
viewerurlphaseerrorTextretry()actionUrl<ngx-doc-viewer [url]="doc" viewer="office">
<ng-template #loadingContent let-state>
<div style="display:flex;gap:8px;align-items:center;">
<span class="spinner"></span>
<span>Preparing {{ state.viewer }} preview...</span>
</div>
</ng-template>
</ngx-doc-viewer>
To replace the persistent Office reload control, project an ng-template named officeReloadContent:
<ngx-doc-viewer [url]="doc" viewer="office">
<ng-template #officeReloadContent let-state>
<span>Reload</span>
</ng-template>
</ngx-doc-viewer>
For custom error markup in Angular, project an ng-template named errorContent.
It receives the same context and can call retry() directly:
<ngx-doc-viewer [url]="doc" viewer="office">
<ng-template #errorContent let-state>
<div style="text-align:center;">
<div>Preview unavailable for {{ state.viewer }}.</div>
<div>{{ state.actionUrl }}</div>
<button type="button" (click)="state.retry()">Retry</button>
<a [href]="state.actionUrl" target="_blank" rel="noreferrer">Open source</a>
</div>
</ng-template>
</ngx-doc-viewer>
If you want to keep the default error layout but replace just the actions area, project an ng-template named errorActions:
<ngx-doc-viewer [url]="doc" viewer="office" retryButtonText="Try again">
<ng-template #errorActions let-state>
<div style="margin-top: 14px; display: flex; gap: 8px; justify-content: center;">
<button type="button" (click)="state.retry()">Try again</button>
<a [href]="state.actionUrl" target="_blank" rel="noreferrer">Open source</a>
</div>
</ng-template>
</ngx-doc-viewer>
There are some issues loading document in the google viewer. See: https://stackoverflow.com/questions/40414039/google-docs-viewer-returning-204-responses-no-longer-working-alternatives. If loading pdf's and Word documents, seems to work now with this hack let me know via a Github issue.
googleCheckContentLoaded = true | If true it will check by interval if the content is loaded.
googleCheckInterval = 3000 | The interval in milliseconds that is checked whether the iframe is loaded.
googleMaxChecks = 5 | max number of retries Output:
loaded: emitted when the current iframe is ready. Can be used to hook into custom loading or telemetry flows.
loading: emitted when the viewer enters the loading phase. Payload includes viewer, url, phase, errorText, retry(), and actionUrl.
error: emitted when the viewer enters the error phase. Payload includes viewer, url, phase, errorText, retry(), and actionUrl.
phaseChange: emitted whenever the internal phase changes to idle, loading, ready, or error.
.ppt, .pptx, .doc, .docx, .xls and .xlsx
Only files under 25 MB can be previewed with the Google Drive viewer.
Google Drive viewer helps you preview over 15 different file types, listed below:
Note: Archive files (.ZIP, .RAR) are not supported by the Google Docs embedded viewer despite some community sources claiming otherwise. For the current official list of supported formats, see the Google Drive Help Center.
For another external document viewers that should be loaded in an iframe.
For Google Drive
<ngx-doc-viewer
[url]="'https://drive.google.com/file/d/0B5ImRpiNhCfGZDVhMGEyYmUtZTdmMy00YWEyLWEyMTQtN2E2YzM3MDg3MTZh/preview'"
viewer="url"
style="width:100%;height:50vh;"
>
</ngx-doc-viewer>
For the Google Viewer or any other viewer where there is a base url and a parameter for the documentUrl:
<ngx-doc-viewer
[viewerUrl]="https://docs.google.com/gview?url=%URL%&embedded=true"
[url]="https://file-examples.com/wp-content/uploads/2017/02/file-sample_100kB.doc"
viewer="url"
style="width:100%;height:50vh;"
>
</ngx-doc-viewer>
NOTE: PDF's are shown in the embed tag. Browser support is not guaranteed. If you need to be sure the pdf renders on all browsers you better use PDF.js
.docx
To use mammoth, also add:
npm install mammoth --save
and make sure mammoth.browser.min.js is loaded. For the angular/cli you would add the following in angular.json:
"scripts": [
"node_modules/mammoth/mammoth.browser.min.js"
]
FAQs
Angular document viewer.
The npm package ngx-doc-viewer receives a total of 34,776 weekly downloads. As such, ngx-doc-viewer popularity was classified as popular.
We found that ngx-doc-viewer demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.

Company News
/Security News
Socket is an initial recipient of OpenAI's Cybersecurity Grant Program, which commits $10M in API credits to defenders securing open source software.