diff --git a/src/components/BootstrapBlazor.PdfViewer/BootstrapBlazor.PdfViewer.csproj b/src/components/BootstrapBlazor.PdfViewer/BootstrapBlazor.PdfViewer.csproj index 7e568d3d..6d79ea60 100644 --- a/src/components/BootstrapBlazor.PdfViewer/BootstrapBlazor.PdfViewer.csproj +++ b/src/components/BootstrapBlazor.PdfViewer/BootstrapBlazor.PdfViewer.csproj @@ -1,7 +1,7 @@ - 9.0.0 + 9.0.1 diff --git a/src/components/BootstrapBlazor.PdfViewer/PdfViewer.razor b/src/components/BootstrapBlazor.PdfViewer/PdfViewer.razor index 050c4968..45f48573 100644 --- a/src/components/BootstrapBlazor.PdfViewer/PdfViewer.razor +++ b/src/components/BootstrapBlazor.PdfViewer/PdfViewer.razor @@ -2,4 +2,4 @@ @inherits BootstrapModuleComponentBase @attribute [JSModuleAutoLoader("./_content/BootstrapBlazor.PdfViewer/PdfViewer.razor.js", JSObjectReference = true, AutoInvokeDispose = false)] -
+
diff --git a/src/components/BootstrapBlazor.PdfViewer/PdfViewer.razor.cs b/src/components/BootstrapBlazor.PdfViewer/PdfViewer.razor.cs index febcb9f1..5ff5cd98 100644 --- a/src/components/BootstrapBlazor.PdfViewer/PdfViewer.razor.cs +++ b/src/components/BootstrapBlazor.PdfViewer/PdfViewer.razor.cs @@ -35,6 +35,12 @@ public partial class PdfViewer [Parameter] public Func? NotSupportCallback { get; set; } + /// + /// Gets or sets whether to use Google Docs for PDF rendering. Default is false. + /// + [Parameter] + public bool UseGoogleDocs { get; set; } = false; + private string? ClassString => CssBuilder.Default("bb-pdf-viewer-container") .AddClassFromAttributes(AdditionalAttributes) .Build(); @@ -44,6 +50,9 @@ public partial class PdfViewer .Build(); private string? _url; + private bool _useGoogleDocs; + + private string? UseGoogleDocsString => UseGoogleDocs ? "true" : null; /// /// @@ -57,11 +66,25 @@ protected override async Task OnAfterRenderAsync(bool firstRender) if (firstRender) { _url = Url; + _useGoogleDocs = UseGoogleDocs; + return; } + var rerender = false; if (_url != Url) { _url = Url; + rerender = true; + } + + if (_useGoogleDocs != UseGoogleDocs) + { + _useGoogleDocs = UseGoogleDocs; + rerender = true; + } + + if (rerender) + { await InvokeVoidAsync("loadPdf", Id, _url); } } @@ -73,7 +96,8 @@ protected override async Task OnAfterRenderAsync(bool firstRender) protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, new { LoadedCallaback = nameof(TriggerOnLoaded), - NotSupportCallback = nameof(TriggerNotSupportCallback) + NotSupportCallback = nameof(TriggerNotSupportCallback), + Url }); /// diff --git a/src/components/BootstrapBlazor.PdfViewer/PdfViewer.razor.js b/src/components/BootstrapBlazor.PdfViewer/PdfViewer.razor.js index f29350f7..3ce1cbe5 100644 --- a/src/components/BootstrapBlazor.PdfViewer/PdfViewer.razor.js +++ b/src/components/BootstrapBlazor.PdfViewer/PdfViewer.razor.js @@ -8,8 +8,7 @@ export async function init(id, invoke, options) { const pdfViewer = { el, invoke, options }; Data.set(id, pdfViewer); - const url = el.getAttribute('data-bb-url'); - await loadPdf(id, url); + await loadPdf(id, options.url); } export async function loadPdf(id, url) { @@ -21,6 +20,9 @@ export async function loadPdf(id, url) { return; } + delete pdfViewer.frame; + el.innerHTML = ''; + if (url) { const { frame } = pdfViewer; const viewer = frame || createFrame(el); @@ -29,12 +31,13 @@ export async function loadPdf(id, url) { invoke.invokeMethodAsync(options.loadedCallaback); }; } + + const useGoogleDocs = el.getAttribute('data-bb-google-docs') === 'true'; + if (useGoogleDocs) { + url = `http://docs.google.com/viewer?url=${url}` + } viewer.src = url; } - else { - delete pdfViewer.frame; - el.innerHTML = ''; - } } const createFrame = el => {