Adding dynamic header/footer to Docs - google-apps-script

I'm wondering if there is a way to add dynamic headers or footers to a document, i.e. putting a "Page Title" in the footer that is different for every page.
I understand that editing the built-in header or footer would be reflected on every page. I'm wondering if anyone has thought of a workaround to either "force" it by accessing the first/last line on a page and inserting text there, or if there is another way to dynamically update the page.

AFAIK, this is not yet available. There is an open issue on can't reliably access first page vs other pages header / footer info.
I've used the codes here, to list the document's children.
DocumentBodySection: Index 0
HeaderSection: Index 1
FooterSection: Index 2
HeaderSection: Index 3
FooterSection: Index 4
This function change the text of the selected child.
function myFunction() {
var copyDoc = DocumentApp.getActiveDocument();
var footer = copyDoc.getFooter();
Logger.log(footer.getParent().getChild(2).asText().setText("Test"))
}
Second Page
Third Page
Changing a footer section will apply to all footer section, according to this blog you can only set a different header/footer in the first page. The provided open issue link also states that it can only be checked manually as it is not available.

Related

Move last two or one row data if another section of data goes to next page in print format

I have a html page for a print view. This page contain some data from back-end. There are a header section, item table section and signature section. Item table data comes dynamically that may have any number of items like 2,4,10,....50 possibly.
The problem is when signature section goes next page only then I should pass at least one Item of data (table row) to the next page.
Note: I am using only html css because it's a print format of ERPNext framework. I can't use Js or others.
How to do this.
Solution can be like this you need to add more padding-top or margin-top Or combine both in single parent div and you can try below css :
{page-break-inside: avoid;page-break-before:auto}
Please let me know if you find any issues

SSRS rdl Header and Footer Removal from specific pages

I want remove header and footer from specific pages e.g from 2nd 3rd page out of 5 pages because when we export it to excel sheet it will merge cells and the sorting of excel will not work on sheet 2nd and 3rd.
I don't believe there is a way to remove the header/footer region from certain pages of the report. The only options SSRS gives is Print on First Page/ Print on Last Page options in the Header properties, so you can only control the first or last page of the report with those options.
You can hide the elements inside of the header/footer regions through their visibility property. For example, you could hide the header/footer contents on pages 2 & 3 by setting the visibility function to the following for the items inside the header/footer regions:
=Switch(Globals!PageNumber < 2,false,Globals!PageNumber < 4, true, Globals!PageNumber >=4, false)
By hiding the contents in those regions, excel will have a very narrow empty row at the top of the page, but at least it won't create the funky merged cells.
If you want to completely eliminate headers when exporting to excel, you can do so by following the instructions in this article I wrote:
http://jaysonseaverbi.blogspot.com/2013/11/ssrs-exporting-options-for-excel.html
Jaysonseaver gives a good option. But, similarly, you could also do this by the Page Name. If you name your pages (such as for excel export the page name becomes the worksheet name), then the Page Name built in could also be quite useful.
Something like:
=IIF(Globals!PageName = "MyPageName", true, false)

fix vertical scrollbar position to 2nd row in div(cshtml)?

I have a div with a scroll bar which displays 15 months with 3 of the min each row, When the page loads I want to fix the scroll bar position to 2nd row as shown in my screenshot.As in the scroll bar should to be fixed to the position shown in my screenshot as opposed to top of the div.The reason for this requirement is we are displaying previous 3 months, but the user should see the current month when the page loads. I hope I have made it clear
I am using
<div id="key_dates" style ="overflow:scroll;width:960px;height:500px">
Can you guys please help?
Thanks,
Adarsh
You need to use JavaScript for this:
<!--
Place this script before closing </body> tag so that
DOM (HTML elements tree) is already built when the script is running
-->
<script>
// create a closure to not pollute global scope
!function () {
// cache reference to keyDates element
var keyDates = document.getElementById('key_dates');
// set scroll to the height of one row
keyDates.scrollTop = 150; // substitute `150` with height of one row
} ();
<script>
Here is the documentation of element.scrollTop
If you are using jQuery, you do it like this (and here are the docs);
<script>
$('#key_dates').scrollTop( 150 );
</script>
An example with jQuery: http://jsfiddle.net/gryzzly/CjdwX/
It seems I can't demonstrate this properly with jsfiddle, but here is a sample of code which works if you test it in a browser. Using anchors on each row, we can anchor the window to a specified location either using href or the url.
For example, if you implemented this code at www.address.tld/calendar, to show row two, you'd enter www.address.tld/calendar#row2.
You can use only an anchor on row two, and you could place it either statically or programmatically depending on your needs. It's a pretty straight forward solution, but some people don't like the hash and anchor name being in the url. It doesn't bother me.

css: display none. Is it expensive?

I decide to make read more... function by having two divs, and setting one of them display: none
but in this case i store all the data twice.
now the question -
If I have one div element, with style="display:none", which contains many big size images in it, is it have an influence on page opening time?
display:none does not prevent the hidden content from being loaded with the rest of the page.
If you want to make the page "lighter" at load time you can load the "read more.." content via Ajax on-demand.
The images would get fetched immediately even when the parent div is set to display: none.
If this is not your intention, and you do not want to go with the AJAX route, you may want to insert the images into the DOM only when the read more... button is clicked, as in the following example:
var hiddenDiv = document.getElementById("your-hidden-div-id");
var imageToLoad = document.createElement("img");
imageToLoad.setAttribute("src", "image1.png");
hiddenDiv.appendChild(imageToLoad);

How to keep List contents on the first page? (SSRS 2005 - PDF Export)

I've got the following report setup:
1. Letterhead (not in the header, since i only want it on the first page)
2. List control with some data
when i export the report to PDF, and the contents of the List are less that one full page - my letterhead is displayed on the first page (the rest of the page is empty) and the List content gets moved to the second page.
if the List grows over 1 page - reports is showing up just fine (Letterhead and portion of the list on the first page - the rest on the second page)
It looks like it tries to keep the list on 1 page as long as its contents fit on the page - but when you add the letterhead to the contents it overflows the page, and the list gets bumped down to the next page.
Is there any way to keep the list on the first page regardless of its size.
Putting the letterhead in the list is my last resort, I'd like to hear some other solutions.
uploaded a sample .rdl to illustrate the problem
got rid of the list for simplicity, the problem seems to be with a textbox wanting to show up on 1 page
p.s. see this question for more details
What is the source of your text? Is it coming from a dataset? If so, Add a paragraph id in it, set your table to group on the paragraph id and show only the group header. In the group, add a bottom padding value of say 5. The table will handle the paragraph breaks for you, and if it grows more the a page it will handle it for you. Make sure that keep together is set to false. The paragraph id will be used to sort the dataset by id ascending.
sorry I didn't notice your comment at the end. The only other thing that i can think of is to shift your list up closer to the header and eliminate all empty space at the end. Also, make sure the KeepTogether option in the list is set to false. This way it will break up your list rather than move it to the next page.
you can put both the letterhead and the list inside a rectangle so they are always grouped together.
Reporting services also tries to keep the relative spaces you have in the designer, so if you list is aligned to the bottom of the page and there is a space form the header; it will keep the space on top and align everything to the bottom of the page.