Customise the WebDrawer HTML preview page
Update!
The solution I provide to display the native PDF in the preview page is flawed. A better solution is available here.
The problem
What if the HTML preview of a document is not displaying as you think it should? Depending on the cause this may be out of our hands, however some problems can be avoided even if they cannot be completely resolved.
An Example
This particular post was spurred by one customer who was experiencing strange black boxes overlaying the HTML rendition of some PDFs. It turns our that this was a problem in the rendered HTML being exaggerated by the way the HTML was displayed in WebDrawer.
A Fix
In this video I spend the first half improving the viewing experience by displaying the HTML preview within an iframe, at about the 13 minute mark I look at how you might simply embed the native PDF in the preview page rather than rely on the HTML rendition of the PDF.
Sorry about the audio levels in this, you may have to turn your volume up to full and listen carefully...
Scripts
This is the scripts section as seen in the above video. It sets the iframe:
- height from the window heigh less the top position of the iframe (plus a 5 pixel buffer), and
- width to the window width less the iframe margin (10 pixels) plus the menu width (if the left menu is on the left).
@section scripts { <script> var resizePreview = function () { $('#preview-frame').show(); $('#preview-frame').css("visibility", "visible"); var height = $(window).height() - ($('#preview-frame').offset().top + 5); $('#preview-frame').height(height); var width = $(window).width() - 10; if (width > 630) { width = width - ($('#leftcolumn').width()); } $('#preview-frame').width(width); } $(function () { $(window).on("load resize", function () { resizePreview(); }); }); </script> }
Styles
These styles simply tweak some of the WebDrawer built-in styles to make the iframe fit better into the page.
@section customhead { <style> h2 { white-space: normal; } #contentcolumn { height: auto; padding-bottom: 0; } </style> }
Body
The body embeds the preview either using an iframe or as the actual source PDF.
if (record.Html.Length == 0) { <div class="preview-pane"> <div class="alert"> <strong>@Translations.lang.error</strong> @Translations.lang.no_html </div> </div> } else { if (record.Extension == "PDF") { <object id="preview-frame" data='~/Record/@record.Uri/file/document?inline' type='application/pdf' width='100%' height='100%' style="border:none; margin-left:10px; visibility:hidden;"> <p> It appears your Web browser is not configured to display PDF files. No worries, just <a href='~/Record/@record.Uri/file/document?inline'>click here to download the PDF file.</a> </p> </object> } else { <iframe id="preview-frame" src="~/Record/@record.Uri/file/html" style="border:none; margin-left:10px; display:none;"> </iframe> } }
Record extension
In the code above record.Extension is referred to, depending on your version of WebDrawer Extension may not be available. To verify this:
- open the hptrim.config file,
- find the customPropertySets element,
- within that find the RecordPreview, and
- it should contain RecordExtension.
This code sample demonstrates the RecordPreview customPropertySet:
<add name="RecordPreview" properties="Html,Title,IsElectronic,RecordExtension,enabledcommandids,RecordIsInPartSeries,RecordRelatedRecs,RecordRecordType,RecordPrimaryContact,RecordIsContainer"/>
The complete solution
Get the complete template here, don't forget the other piece in the solution is to edit the routeDefault element in hptrim.config.