Page Breaks (when printing form)

Forums Dynamic Forms for SharePoint Page Breaks (when printing form)

This topic contains 18 replies, has 2 voices, and was last updated by  Paul Lynch 1 month, 1 week ago.

  • Author
    Posts
  • #22951

    Paul Lynch
    Participant

    Hi Alex,

    I have a form with a few tabs. When you create and edit you fill in these tabs.

    But on the Displayform.aspx. I have all these separate tabs sections laid out in one giant tab. Then I added button to Print the page.

    My problem is that when I print (in Chrome) the page breaks are pretty random. They sometimes cut off text or section titles halfway through.

    I guess I need to manually enter some “page breaks” somewhere but not sure exactly how.

    The CSS or Class name is tabH1

    And I think I need to add something like this

    .tabH1 {page-break-before: always;}

    But I am not sure if this is correct or where to add it.

  • #22953

    Paul Lynch
    Participant

    Btw if I add the “Print Tab” option in DFFS, it will print the whole form, but it drops all the formatting so where you have long questions in the form, the text wraps up so small it is really hard to understand the form.

  • #22954

    Alexander Bautz
    Keymaster

    I’m actually not sure if this will work because it’s all inside a table and I’m not sure you can force a line break in a table.

    Please note that for the CSS to affect the printout (when using the Print active tab setting) you cannot load an external CSS file or use classes from SharePoint in general – all CSS must be in the Custom CSS tab.

    Alexander

  • #22994

    Paul Lynch
    Participant

    Ok thanks that is good knowledge.

    So potentially I can add CSS to the “Print Active Tab” by placing it in the “Custom CSS Tab” and change the format to make it look pretty?

  • #23000

    Alexander Bautz
    Keymaster

    Yes

    Alexander

  • #23006

    Paul Lynch
    Participant

    It seems to drop all formatting though when I click on the DFFS print button. I’m not sure how to grab the CSS classes from the print preview in order to add them into the CSS tab.

    Also I notice the vLookup table disappears/do not render.

    So guess that option is out?

  • #23008

    Alexander Bautz
    Keymaster

    I’m not sure I understand – can you show me some screenshots of the tab you try to print and how the actual printout looks?

    Alexander

  • #23026

    Paul Lynch
    Participant

    Sure I will post

    1) original form in browser (chrome)
    2) Browser standard “print page” button (print preview) – shows up vlookup (but cuts off text due to HTML table).
    3) DFFS print tab button – showing up as generally unformatted text, also does not show up the vlookup table from the form. Does not cut off text though!

  • #23031

    Paul Lynch
    Participant

    Sorry I need to update, actually in IE, the DFFS Print tab is picking up and showing the vLookup table (just Chrome that isn’t).

  • #23033

    Paul Lynch
    Participant

    I think rather than page breaks, I think using the DFFS print tab is the way forward here.

    Main issue now then is that text is cut off when I go to print the form. (see image).

    Is there a way I can use CSS to limit or resize the form/tab to ensure no text is cut off e.g. forcing a max-width of the form?

    Ideally I’d also like to be able to put the headings in bold and increase the width of the left questions columns (but no CSS seems to work when I print).

  • #23048

    Alexander Bautz
    Keymaster

    If the form is wider than ~720 pixels it will not print in a portrait page. You might be better off design a dedicated print tab in DFFS and layout the form in a narrower layout. If not you can try changing to landscape mode when printing. In Chrome you can use some CSS to force landscape like I have show below.

    Here are some examples:

    @media print{
        // Set label column width
        .ms-formlabel{
            width:200px;
            white-space:normal;
        }
        // Set table width to try narrowing the form when printing
        .dffs-print{
            max-width:720px;
        }
        // Chrome - set landscape mode
        @page {
          size: landscape;
        }
    }

    Alexander

  • #23299

    Paul Lynch
    Participant

    Thanks Alex, I’ve been away trying to figure this out. I just want to clarify two things;

    For my Dispform.aspx – I have a single TAB with all the fields listed in sections that I want to print. I guess this is as close to a custom print tab as I will get?

    If I click in browser to print page in this tab/page, it keeps all the formatting fine (in landscape as you say). But each page cuts certain lines of the text. It appears, this is one large table so you say there is no way to add page breaks in between the sections headers via HTML. I cannot have text cut in half when printing.

    If the text breaks cannot be resolved, then I guess it rules out printing via the browser?

    This only leaves the option to print via the “DFFS print tab option” – this shows everything, no page breaks/text cut in half.

    It just doesn’t look great. It’s black and white (when you use browser to print page, you get all the formatting like coloured zones etc..)

    Also if you have a very long question in column 1, then yes/no answer in column 2. The first column is quite small and wraps the text.

    Just to confirm – you cannot format this way of printing.

    If the above two things are confirmed, I think I have exhausted every avenue and will just have to use the DFFS print tab unformatted.

    Thanks and Happy New Year!

  • #23301

    Paul Lynch
    Participant

    Sorry one more question.

    DFFS installer, lets you install it for the
    NewForm.aspx
    EditForm.aspx
    DispForm.aspx

    I created a new/custom editform.aspx (form) in SharePoint Designer. The idea is to use DFFS to make all the editable fields READ only, so I can print it. Seems to fix most formatting options.

    If I manually dump the loader and overlay on my new editform2.aspx page, into CEWPs it doesn’t seem to work. I’m basically copying everything that’s on the real Editform.aspx page and hoping it wil load.

    Perhaps because it is not actually called “EditForm.aspx or the default edit page?

    Is this even possible?

  • #23303

    Alexander Bautz
    Keymaster

    Thanks for the beer! – I’m away until January 2 but will get back to you as soon as I get back.

    Best regards,
    Alexander

  • #23315

    Alexander Bautz
    Keymaster

    Sorry for the late reply.

    Unfortunately DFFS will not run in a custom form created in SPD.

    I have looked at another method of printing the form and have created this snippet that I need you to try out for me.

    Please note that I have commented out a few lines because it relies on functionality not yet released, but you should be able to test it anyways. Just drop it in Custom JS in your DispForm and hit the print button to the right of the last tab. If you are not running SP 2013 / 2016 / online you must change the path variable in the function to point to your default SP style sheet location.

    I have updated the code snippet in a new comment below.

    PS: If you are NOT running Google Chrome you need to enable “print backbrounds and images” in the print dialog for the background color and images to print correctly. This is a one time setting, but it cannot be forced with JS.

    Let me know how this works out.

    Alexander

    • This reply was modified 2 months, 2 weeks ago by  Alexander Bautz. Reason: removed code snippet
  • #23323

    Alexander Bautz
    Keymaster

    It looks like this doesn’t behave properly in Internet Explorer – I’ll do some testing and post an updated version of the snippet.

    Alexander

  • #23332

    Alexander Bautz
    Keymaster

    I have updated the code snippet to work in Firefox and Internet Explorer / Edge (please note that Edge does NOT support printing background colors and images). Add this snippet to the Custom JS of your DispForm:

    spjs.dffs.printCurrentTab = function () {
        jQuery("body").append("<iframe id='dffs_print_form'></iframe>");
        var iframe = jQuery('#dffs_print_form'), path = _spPageContextInfo.webAbsoluteUrl + "/_layouts/15/" + _spPageContextInfo.currentLanguage + "/styles/themable/", b = [];
        // Add default SP style sheets
        b.push("<link rel='stylesheet' type='text/css' href='" + path + "forms.css' />");
        b.push("<link rel='stylesheet' type='text/css' href='" + path + "corev15.css' />");
        // Add default DFFS style sheet
        b.push("<link rel='stylesheet' type='text/css' href='" + spjs_path + "/css/dffs_frontend.css' />");
        // Add DFFS Custom CSS
        b.push("<style type='text/css'>" + unescape(spjs.dffs.data.dffsDataObj.customCSS) + "</style>");
        // Load files included above Custom CSS - this requires DFFS v4.4.3.59 (not released yet so it has been commented out)
        jQuery.each(spjs.dffs.data.requireCSSArr, function (i, cssfile) {
            b.push("<link rel='stylesheet' type='text/css' href='" + cssfile + "' />");
        });
        // The below line will try to force Chrome so include backgrounds and colors to you don't have to turn it on in the print dialog
        b.push("<style type='text/css'>body{-webkit-print-color-adjust:exact!important;color-adjust:exact!important;}</style>");
        // Add formtable HTML
        b.push("<table class='ms-formtable'>" + jQuery(".ms-formtable").html() + "</table>");
        iframe.ready(function () {
            var contentWindow = document.getElementById("dffs_print_form").contentWindow;
            contentWindow.document.write(b.join(""));
            contentWindow.document.close();
            setTimeout(function () {
                var printOK = contentWindow.document.execCommand('print', false, null);
                if (!printOK) {
                    contentWindow.focus();
                    contentWindow.print();
                }
                setTimeout(function () {
                    jQuery("#dffs_print_form").remove();
                }, 500);
            }, 500);
        });
    };

    Please let me know how this works out.

    Alexander

  • #23448

    Alexander Bautz
    Keymaster

    Here is an updated snippet:

    spjs.dffs.printCurrentTab = function () {
        if (spjs.dffs.data.selectedTab === "") {
            return;
        }
        jQuery("body").append("<iframe id='dffs_print_form'></iframe>");
        var iframe = jQuery('#dffs_print_form'), path, b = [];
        // Add default SP style sheet
        if (_spPageContextInfo.webUIVersion >= 15) {
            path = _spPageContextInfo.webAbsoluteUrl + "/_layouts/15/" + _spPageContextInfo.currentLanguage + "/styles/themable/";
            b.push("<link rel='stylesheet' type='text/css' href='" + path + "corev" + _spPageContextInfo.webUIVersion + ".css' />");
        } else {
            path = _spPageContextInfo.webAbsoluteUrl + "/_layouts/" + _spPageContextInfo.currentLanguage + "/styles/";
            b.push("<link rel='stylesheet' type='text/css' href='" + path + "corev4.css' />");
        }
        // Add default DFFS style sheet
        b.push("<link rel='stylesheet' type='text/css' href='" + spjs_path + "css/dffs_frontend.css' />");
        // Add DFFS Custom CSS
        b.push("<style type='text/css'>" + unescape(spjs.dffs.data.dffsDataObj.customCSS) + "</style>");
        // Load files included above Custom CSS
        jQuery.each(spjs.dffs.data.requireCSSArr, function (i, cssfile) {
            b.push("<link rel='stylesheet' type='text/css' href='" + cssfile + "' />");
        });
        // vLookup CSS
        b.push("<style type='text/css'>" + unescape(spjs.vLookup.data.css) + "</style>");
        // The below line will try to force Chrome so include backgrounds and colors to you don't have to turn it on in the print dialog
        b.push("<style type='text/css'>body{-webkit-print-color-adjust:exact!important;color-adjust:exact!important;}</style>");
        // Header
        if (spjs.dffs.data.dffsDataObj.tabs.printHeader !== "") {
            pHead = spjs.dffs.buildValStr(unescape(spjs.dffs.data.dffsDataObj.tabs.printHeader));
            pHead = spjs.dffs.translateStringWithJSON(pHead);
            b.push(pHead);
        }
        // Add formtable HTML
        b.push("<table class='ms-formtable dffs-print'>" + jQuery(".ms-formtable").html() + "</table>");
        // Footer
        if (spjs.dffs.data.dffsDataObj.tabs.printFooter !== "") {
            pFoot = spjs.dffs.buildValStr(unescape(spjs.dffs.data.dffsDataObj.tabs.printFooter));
            pFoot = spjs.dffs.translateStringWithJSON(pFoot);
            b.push(pFoot);
        }
        iframe.ready(function () {
            var contentWindow = document.getElementById("dffs_print_form").contentWindow;
            contentWindow.document.write(b.join(""));
            contentWindow.document.close();
            setTimeout(function () {
                var printOK = contentWindow.document.execCommand('print', false, null);
                if (!printOK) {
                    contentWindow.focus();
                    contentWindow.print();
                }
                setTimeout(function () {
                    jQuery("#dffs_print_form").remove();
                }, 500);
            }, 1000);
        });
    };

    Alexander

  • #23790

    Paul Lynch
    Participant

    Just wanted to say a big thanks Alex this code did the trick!

You must be logged in to reply to this topic.