RTTSoftware Support Forum

PDF-ShellTools => General => Topic started by: conrad.drake on March 23, 2017, 03:11:10 AM

Title: Refering to the last page
Post by: conrad.drake on March 23, 2017, 03:11:10 AM
I want to stamp the last page of a document and can't seem to figure out a syntax for this within the template.  Any clues or do I need to write a script?

This is going to be a command line stamp, to allow me to say "Section X continued in Volume Y" on the last page.  I can get the last page on the command line and could pass it in there through StampRules=%NumberOfPages%. 

Is there a better way than this?

Code: [Select]
for /F tokens^=3^ delims^=^" %i in ('pdfshelltools ExportMetaData "ExportFields=PDFNPages" "%output%") do set last_page=%i
PDFShellTools stamp -s StampRules=%last_page% "DynCustomText='%section%','%next_volume%'" Template=SectionContinued.stp "%output%"

The first line is better understood as follows
Code: [Select]
PDFShellTools ExportMetaData ExportFields=PDFNPages "%output%" > %pages_file%
for /F tokens^=3^ delims^=^" %i in (%pages_file%) do set last_page=%i
Title: Re: Refering to the last page
Post by: RTT on March 23, 2017, 08:43:35 PM
Indeed there is no way to specify a reference to the last page, without explicitly specify its value for each PDF. I've now fixed this by adding a "last" named keyword to the page specifications rules, so in the next release it will be possible to write e.g. 3,5-7,last, or just last in your case, to refer the last page.

Meanwhile your solution is perfectly viable. Or you can use the new dynamic text script functionality (http://www.rttsoftware.com/Manuals/STIndex.htm?pageURL=ST/English/Stamp.htm#DynText) to stamp only the last page. You just need to add a text stamp object to the stamp template, set it to dynamic and its text to refer the script name to call using the [<ScriptName>](params) format. The script can be something like this:
Code: [Select]
function StampLastPage(text) {
    return CurrentTask.PageNumber == BatchFile.NumPages ? text : '';
The script is created from the dynamic object settings configure dialog.

For a script named "StampLastPage", and having the "section" and "next_volume" values passed from the command line in the "DynCustomText" parameter, as in your example, the dynamic text object text would be:
[<StampLastPage>](Section [C1] continued in Volume [C2]).

And the command line simplified to:
PDFShellTools stamp -s "DynCustomText='%section%','%next_volume%'" Template=SectionContinued.stp "%output%"

Obviously the dynamic text script can be much more complex, and probably even integrate all the logic of your external script and calculate by itself these "section" and "next_volume" values.
Title: Re: Refering to the last page
Post by: conrad.drake on June 08, 2017, 04:54:29 AM
Thanks - there's a bunch of options there.