doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Forum for the PDF-XChange Editor - Free and Licensed Versions

Moderators: PDF-XChange Support, Daniel - PDF-XChange, Chris - PDF-XChange, Sean - PDF-XChange, Paul - PDF-XChange, Vasyl - PDF-XChange, Ivan - Tracker Software, Stefan - PDF-XChange

nuflux
User
Posts: 26
Joined: Tue May 24, 2016 11:59 pm

doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by nuflux »

Hi,

I created a simple javascript to flatten and scale an annotated document so that I can send it out to another party. The scaling is key as I usually annotate a resized (scaled up) version of the document and then shrink it back down once the annotations are added. Hence, I am using the doc.addWatermarkFromFile() method to scale down the page content and flatten in one fell swoop.

The script works great except that PDF X-Change seems to ignore the nSourcePage parameter when the doc.addWatermarkFromFile() method is called, so it always pulls only the first page from the source file instead of pulling page 2, page 3, and successive pages. This is true even when I put in a number instead of a variable. Is this perhaps a bug in PDF X-Change's implementation of the method, or am I doing something wrong?

Here is the code:

Code: Select all

var currentDoc = this;
for(var i=0;i<currentDoc.numPages;i++){
	if(!i){
		// Create new document
		var flatDoc = app.newDoc();
	}else
	{
		// Add page if document already created
		flatDoc.newPage(i);
	}
	flatDoc.addWatermarkFromFile({
		cDIPath: currentDoc.path,
		nSourcePage: i,
		nStart: i,
		nScale: -1
	});
}
ETA: I just ran the javascript in Acrobat DC Pro and it worked properly, so this does appear to be an issue with PDF X-Change's implementation of the method.

Thanks,
David
User avatar
Stefan - PDF-XChange
Site Admin
Posts: 19913
Joined: Mon Jan 12, 2009 8:07 am

Re: doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by Stefan - PDF-XChange »

Hello David,

I have passed this to a colleague in the dev team who works on the JS implementation, and they will take a look soon!

Kind regards,
Stefan
User avatar
Ivan - Tracker Software
Site Admin
Posts: 3586
Joined: Thu Jul 08, 2004 10:36 pm

Re: doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by Ivan - Tracker Software »

Yes, for some reason it was ignored. Fixed now. The fix will be included in the next build.
PDF-XChange Co Ltd. (Project Director)

When attaching files to any message - please ensure they are archived and posted as a .ZIP, .RAR or .7z format - or they will not be posted - thanks.
nuflux
User
Posts: 26
Joined: Tue May 24, 2016 11:59 pm

Re: doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by nuflux »

Terrific, thank you both!
User avatar
Daniel - PDF-XChange
Site Admin
Posts: 11263
Joined: Wed Jan 03, 2018 6:52 pm

doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by Daniel - PDF-XChange »

:)
Dan McIntyre - Support Technician
PDF-XChange Co. LTD

+++++++++++++++++++++++++++++++++++
Our Web site domain and email address has changed as of 26/10/2023.
https://www.pdf-xchange.com
Support@pdf-xchange.com
nuflux
User
Posts: 26
Joined: Tue May 24, 2016 11:59 pm

Re: doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by nuflux »

Hi guys,

I have an update and a follow-up question here. The update is that the doc.addWatermarkFromFile() method is now working properly after the implementation bug was fixed. Yay! Thanks again.

Now that I have gotten the script to work, I created a custom toolbar button to run the script in PDF X-Change. Below is the code that I have saved in the .js file in my "JavaScripts" folder. However, a curious thing is happening. The doc.newPage() method does not seem to work when the script is executed by pressing the button, so all the "watermarks" are being stamped on one page. I thought this might be a permissions issue, so I tried calling the function from within app.trustedFunction() and using app.beginPriv() to get around it (see code below). Still no dice. Any idea what I might be doing wrong?

Thanks,
David

Code: Select all

app.addToolButton({
    cName: "Package and Save",
    cLabel: "Package and Save",
    cExec: "flattenAndScale()",
    cTooltext: "Flatten, scale and save the document for distribution to third parties",
    cEnable: true,
    nPos: -1
});

flattenAndScale = app.trustedFunction(function()
{
	app.beginPriv();
	var currentDoc = this;
	for(var i=0;i<currentDoc.numPages;i++){
		if(!i){
			// Create new document
			var flatDoc = app.newDoc();
		}else
		{
			// Add page if document already created
			flatDoc.newPage(i);
		}
		flatDoc.addWatermarkFromFile({
			cDIPath: currentDoc.path,
			nSourcePage: i,
			nStart: i,
			nScale: -1
		});
	}
	app.endPriv();
});
User avatar
Stefan - PDF-XChange
Site Admin
Posts: 19913
Joined: Mon Jan 12, 2009 8:07 am

Re: doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by Stefan - PDF-XChange »

Hello nuflux,

The new document does get created by your script - so the trusted context is working to some extent, but it would seem not fully, as the same script works perfectly fine from the console. However the console is obviously with different privileges.
I will ask our devs to take a look and advise further!

Kind regards,
Stefan
nuflux
User
Posts: 26
Joined: Tue May 24, 2016 11:59 pm

Re: doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by nuflux »

Thanks Stefan, I look forward to your further feedback!
User avatar
Stefan - PDF-XChange
Site Admin
Posts: 19913
Joined: Mon Jan 12, 2009 8:07 am

Re: doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by Stefan - PDF-XChange »

Hello nuflux,

Over the weekend I got some feedback from one of our devs.
They told me that they will investigate the situation, and it might be a bug on our end that the trustedFunction works with newDoc() but does not work with newPage(). As soon as I have more information I will post again here!

Kind regards,
Stefan
nuflux
User
Posts: 26
Joined: Tue May 24, 2016 11:59 pm

Re: doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by nuflux »

Thanks for the update!
User avatar
Stefan - PDF-XChange
Site Admin
Posts: 19913
Joined: Mon Jan 12, 2009 8:07 am

doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by Stefan - PDF-XChange »

:)
nuflux
User
Posts: 26
Joined: Tue May 24, 2016 11:59 pm

Re: doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by nuflux »

Hey Stefan, any update on this from the dev team?

Thanks,
David
User avatar
Ivan - Tracker Software
Site Admin
Posts: 3586
Joined: Thu Jul 08, 2004 10:36 pm

Re: doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by Ivan - Tracker Software »

Fixed in the upcoming build.
PDF-XChange Co Ltd. (Project Director)

When attaching files to any message - please ensure they are archived and posted as a .ZIP, .RAR or .7z format - or they will not be posted - thanks.
nuflux
User
Posts: 26
Joined: Tue May 24, 2016 11:59 pm

Re: doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by nuflux »

Great news, thank you!
User avatar
Stefan - PDF-XChange
Site Admin
Posts: 19913
Joined: Mon Jan 12, 2009 8:07 am

doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by Stefan - PDF-XChange »

:)
User avatar
⚜ Kenny Lemens, P.E. ᵂᴵ
User
Posts: 43
Joined: Thu Jan 23, 2025 4:09 pm

Re: doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by ⚜ Kenny Lemens, P.E. ᵂᴵ »

Greetings,

This is a nice piece of code. Unfortanelty, this.newPage() does not work (from App Level Folder). I did find a work-around using this.insertPages():

Code: Select all

// Title: Workarounds to this.newPage();
// Author: ⚜ Kenny Lemens, P.E. ᵂᴵ  || Date: 2025-01-24
// For "Insert Page" to Work, blank template to be saved to filepath: "/C/Program Files/Tracker Software/PDF Editor/JavaScripts/BlankPDF_Letter.pdf"
// Save this as Javascript to folder "%Appdata%\Tracker Software\PDFXEditor\3.0\Javascripts'
// Image Support: encode 20x20 Pixel PNG Images (ARGB Structure -> 8*digit HEX)
var iconSet = { icoAddPageAfter: "00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFDBD8DFFF949295FF8E8E8CFF8D928BFF8A8F88FF8F908BFF959394FF918C90FF8F8A8EFF9B9B9DFFD6D6D600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBBBAC0FFE8E9EDFFFBFDFCFFFEFFF9FFFFFFFAFFFDFFFCFFF8FCFBFFFBFFFFFFF3F7F8FF969195FF858384FFEEF4F200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFB9BABFFFE3E7EAFFFEFFFFFFFFFFFAFFFBFAF5FFFEFFFDFFFBFFFFFFF8FDFFFFEAEEEFFF7A7677FF646061FFB1B7B5FFEEF7F400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBFC0C4FFE8E9EBFFFFFFFFFFFFFFFBFFFFFFFBFFFDFDFDFFFBFBFDFFFFFEFFFFF7F7F9FFB2B0B1FF656364FF747474FFDFDFE100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFB4B5B9FFEBECEEFFFFFFFFFFFCFAFBFFFFFDFFFFF7FEF7FF8CA892FFD4F0DAFFFFFFFFFFFBFBF9FFD5D5D3FF888888FFB2B0B3FFF3F3F300FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFB8B9BBFFEDF1F2FFFCFFFDFFFEFFFDFFFEFEFEFFF5FFFAFF316242FF95C7A4FFFBFFFFFFFCFFFDFFFAFFF9FFF0F4F3FFBABBBDFFE8E8E800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFB6B7B9FFE5E9EAFFF7FFFBFFF5FFFDFFF2FFF8FFEAFFF6FF1F6438FF88D0A2FFF9FFFDFFF9FFFAFFF9FFFAFFFCFFFFFFBEBFC1FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBABCBBFFE8E9EBFFEEFFFBFFE9FFFBFFE6FFFAFFD7FFF0FF1A6F38FF7AD39BFFF9FFFDFFF9FFFAFFE9FFFBFFFCFFFFFFBEBFC1FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBBBBBBFFE9E9EBFFA9C5B7FF375E4BFF2F5C45FF26643FFF197137FF197336FF1A6338FF306046FF375E4BFFFBFFFFFFBEBFC1FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBBBBB9FFECE7EBFFE1F5E9FF9CB8A9FF95B8A4FF86B797FF1B662DFF4E9C62FF7EB68FFF95C9B2FF95C9B2FFF9FFFFFFBEBFC0FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBCBBB9FFEAE8EBFFF9FFFAFFF4FFF9FFF1FFF7FFE7FFF3FF236736FF8ED29FFFFAFFFDFFF7FFF8FFF8FFF9FFFDFFFEFFBFBFC0FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBBBCB7FFE6EAEBFFFBFFFFFFFBFFFBFFF7FFFAFFFFFEFFFF256543FF95C9B2FFFBFFFDFFF6FFF7FFF7FFF8FFFDFFFDFFC0BFC0FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBABBB6FFE4EAEAFFFBFFFFFFFCFFFBFFF8FFFAFFFFFEFFFF265C45FF95C9B2FFFCFFFDFFF5FFF6FFF7FFF8FFFEFFFDFFC1BFC0FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBABBB6FFE5E9EAFFFCFFFFFFFFFFFBFFFCFFF8FFFFFEFFFFD5F7E7FFEAFFFBFFFDFFFDFFF5FFF6FFFCFFFFFFFEFFFDFFC1BFC0FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBABBB6FFE8E8E8FFFEFFFFFFFFFFFBFFFCFFFAFFFFFEFFFFFFFFFFFFFFFEFFFFFEFFFDFFF5FFF6FFFEFFFFFFFEFFFDFFC1BFC0FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFD5D7D4FF9C9A9BFF888888FF89948EFF869189FF888888FF89948EFF869189FF888888FF89948EFF888888FF9C9A9BFFD5D7D400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFF7FBE86FF7EBE85FF7DBE86FF7EBE86FF7EBE86FF7DBE85FF7EBE85FF7FBE86FF7FBE86FF7FBE86FF7FBE86FF7FBE86FF7FBE86FF7FBE86FF7FBE86FF7FBE86FF7FBE86FF7FBE8600FFFFFF00FFFFFFFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0E00FFFFFF",
 
icoAddPageBefore: "00FFFFFFFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0EFF007F0E00FFFFFF00FFFFFFFF7FBE86FF7FBE86FF7FBE86FF7FBE86FF7FBE86FF7FBE86FF7FBE86FF7FBE86FF7FBE86FF7FBE86FF7FBE86FF7EBE85FF7DBE85FF7EBE86FF7EBE86FF7DBE86FF7EBE85FF7FBE8600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFDBD8DFFF949295FF8E8E8CFF8D928BFF8A8F88FF8F908BFF959394FF918C90FF8F8A8EFF9B9B9DFFD6D6D600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBBBAC0FFE8E9EDFFFBFDFCFFFEFFF9FFFFFFFAFFFDFFFCFFF8FCFBFFFBFFFFFFF3F7F8FF969195FF858384FFEEF4F200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFB9BABFFFE3E7EAFFFEFFFFFFFFFFFAFFFBFAF5FFFEFFFDFFFBFFFFFFF8FDFFFFEAEEEFFF7A7677FF646061FFB1B7B5FFEEF7F400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBFC0C4FFE8E9EBFFFFFFFFFFFFFFFBFFFFFFFBFFFDFDFDFFFBFBFDFFFFFEFFFFF7F7F9FFB2B0B1FF656364FF747474FFDFDFE100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFB4B5B9FFEBECEEFFFFFFFFFFFCFAFBFFFFFDFFFFF7FEF7FF8CA892FFD4F0DAFFFFFFFFFFFBFBF9FFD5D5D3FF888888FFB2B0B3FFF3F3F300FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFB8B9BBFFEDF1F2FFFCFFFDFFFEFFFDFFFEFEFEFFF5FFFAFF316242FF95C7A4FFFBFFFFFFFCFFFDFFFAFFF9FFF0F4F3FFBABBBDFFE8E8E800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFB6B7B9FFE5E9EAFFF7FFFBFFF5FFFDFFF2FFF8FFEAFFF6FF1F6438FF88D0A2FFF9FFFDFFF9FFFAFFF9FFFAFFFCFFFFFFBEBFC1FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBABCBBFFE8E9EBFFEEFFFBFFE9FFFBFFE6FFFAFFD7FFF0FF1A6F38FF7AD39BFFF9FFFDFFF9FFFAFFE9FFFBFFFCFFFFFFBEBFC1FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBBBBBBFFE9E9EBFFA9C5B7FF375E4BFF2F5C45FF26643FFF197137FF197336FF1A6338FF306046FF375E4BFFFBFFFFFFBEBFC1FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBBBBB9FFECE7EBFFE1F5E9FF9CB8A9FF95B8A4FF86B797FF1B662DFF4E9C62FF7EB68FFF95C9B2FF95C9B2FFF9FFFFFFBEBFC0FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBCBBB9FFEAE8EBFFF9FFFAFFF4FFF9FFF1FFF7FFE7FFF3FF236736FF8ED29FFFFAFFFDFFF7FFF8FFF8FFF9FFFDFFFEFFBFBFC0FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBBBCB7FFE6EAEBFFFBFFFFFFFBFFFBFFF7FFFAFFFFFEFFFF256543FF95C9B2FFFBFFFDFFF6FFF7FFF7FFF8FFFDFFFDFFC0BFC0FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBABBB6FFE4EAEAFFFBFFFFFFFCFFFBFFF8FFFAFFFFFEFFFF265C45FF95C9B2FFFCFFFDFFF5FFF6FFF7FFF8FFFEFFFDFFC1BFC0FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBABBB6FFE5E9EAFFFCFFFFFFFFFFFBFFFCFFF8FFFFFEFFFFD5F7E7FFEAFFFBFFFDFFFDFFF5FFF6FFFCFFFFFFFEFFFDFFC1BFC0FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFBABBB6FFE8E8E8FFFEFFFFFFFFFFFBFFFCFFFAFFFFFEFFFFFFFFFFFFFFFEFFFFFEFFFDFFF5FFF6FFFEFFFFFFFEFFFDFFC1BFC0FFE0E0E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFD5D7D4FF9C9A9BFF888888FF89948EFF869189FF888888FF89948EFF869189FF888888FF89948EFF888888FF9C9A9BFFD5D7D400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF",
 
icoFlatten: "00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFF8F7F400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFDDD6C3FFE0D7AFFFDED8C4FFE3DDD1FFEAE6DEFFF0EDE6FFF7F6F300FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFE5DFD4FFD1C582FFEADD31FFE7DA38FFE2D54BFFE0D569FFD5CA98FFE5E0D500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFE0D9CCFFD0C5A0FFD0C375FFD9CC5CFFE1D449FFE1D447FFD5CA89FFECE8E000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFD6CDBCFFC1B49BFFCEC3A9FFE0D9C1FFD6CDAEFFE2DCCB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFE5E0D5FFC5B9A1FFC5B9A0FFF4F2ED00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFEFECE5FFCCC2ADFFC4B8A0FFEBE7DF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFF5F3E6FFEAE4B0FFE2D989FFE7DF92FFEDE6ABFFF0ECC7FFEEEAD6FFD4CBB6FFC3B69DFFDFD9CC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFF5F2E9FFDFD684FFEADD23FFFAED03FFFBEE04FFF5E817FFEBDF31FFE4D74AFFDBCE5CFFD2C680FFDCD5BFFFE5E0D5FFF4F1ED00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFE3DDB5FFD1C62BFFE0D400FFEADD00FFF2E500FFF9EC00FFFDF000FFFAED09FFE6D93CFFC1B66FFFA9A087FFBAAF97FFD2C8B6FFF2F0EB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFD3CB90FFBBB00DFFC5BA00FFCFC400FFD9CE00FFE3D800FFEBDF04FFE0D437FFAAA278FF7C7A72FF71706EFF7A7872FFB2A792FFD7CFBE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFF8F7F4FFCAC28DFFA4990DFFAAA000FFB4A900FFBEB300FFC9BD00FFCFC413FFB2A866FF757370FF636466FF636466FF636466FF858279FFCBC0ABFFF6F4F000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFD7D1B2FF968C26FF908600FF998F00FFA39900FFAEA300FFB6AB1EFF989182FF636466FF636466FF636466FF636466FF696969FFCABFA9FFF5F2EE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFF1EEE8FFB6AE7BFF89801CFF847B06FF8A8000FF938A02FFA49A3AFF908A7FFF636466FF636466FF636466FF636466FF767570FFCABFAAFFF5F3EF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFF3F1ECFFD1CAAFFFA79E5EFF887E1CFF807705FF91882EFF948E80FF656567FF636466FF636466FF656667FF9A9384FFD0C6B300FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFEFECE5FFCBC4A2FFA49C56FF938937FFA29978FF7B7873FF666667FF6D6C6BFF89857AFFC1B59DFFE7E3D900FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFEEEBE3FFCDC6A7FFB9AF8BFFAAA08BFF979183FFA19888FFC0B49DFFDFD8CA00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFECE8E0FFDDD6C8FFD6CDBCFFDBD4C5FFEBE7DF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF",

   iconStream:function(val){var data=this[val];
      return {count:0, width:20, height:20, read:function(nBytes){return data.slice(this.count,this.count+=2*nBytes)}}}
};
   



app.addToolButton({
   cName: "RICE.InsPgAfter",
   cLabel: "Insert After",
   oIcon: iconSet.iconStream("icoAddPageAfter"),
   cTooltext: "Insert blank page after current page",
   cEnable: true,
   cExec: "onClick_AddPageAfter()" }
);

app.addToolButton({
   cName: "RICE.InsPgBefore",
   cLabel: "Insert Before",
   oIcon: iconSet.iconStream("icoAddPageBefore"),
   cTooltext: "Insert blank page before current page",
   cEnable: true,
   cExec: "onClick_AddPageBefore()" }
);


app.addToolButton({
    cName: "RICE.PackageAndSave",
    cLabel: "Package and Save",
    oIcon: iconSet.iconStream("icoFlatten"),
    cTooltext: "Flatten, scale and save the document for distribution to third parties",
    cEnable: true,
    cExec: "onClick_PackageAndSave()"
});


onClick_AddPageAfter = app.trustedFunction(function(){
   app.beginPriv();
   this.insertPages({nPage: this.pageNum, cPath:"/C/Program Files/Tracker Software/PDF Editor/JavaScripts/BlankPDF_Letter.pdf", nStart:0, nEnd:0 });
   app.endPriv();
});


onClick_AddPageBefore = app.trustedFunction(function(){
   app.beginPriv();
   this.insertPages({nPage: this.pageNum - 1, cPath:"/C/Program Files/Tracker Software/PDF Editor/JavaScripts/BlankPDF_Letter.pdf", nStart:0, nEnd:0 });
   app.endPriv();
});



//nuflux - https://forum.pdf-xchange.com/viewtopic.php?t=39385
onClick_PackageAndSave = app.trustedFunction(function(){
   app.beginPriv();

   var currentDoc = this;
   for(var i=0; i<currentDoc.numPages; i++){
      if(!i){
         // === if i=0; Create new document =======================================
         var flatDoc = app.newDoc();
      }else{
         //=== Add page if document already created ===============================
         flatDoc.insertPages({nStartPage:i, cPath:"/C/Program Files/Tracker Software/PDF Editor/JavaScripts/BlankPDF_Letter.pdf", nStart:0, nEnd:0 });
      }
   }

   // === For each page; insert as Watermark into new pdf
   for(var i=0; i<currentDoc.numPages; i++){
      flatDoc.addWatermarkFromFile({
         cDIPath: currentDoc.path,
         nSourcePage: i,
         nStart:i, 
         nScale: -1
      });
   }

   app.endPriv();
});


In addition, I enhanced the custom script by creating a 20x20 pxl icon.

LIMITATION:
- The Package and Save will only flatten the last saved state of the pdf (not what is currently shown on screen, but will reflect what was last saved to disk).

May this be of Good Help;
⚜ Kenny Lemens, P.E. ᵂᴵ
User Plugins: https://is.gd/A9HMPG || PDF-XChange Icons: https://is.gd/Z4GeG8
[Migration] Revu Bluebeam 17 to PDF-XChange Editor: https://is.gd/8Xs1OF
User avatar
Daniel - PDF-XChange
Site Admin
Posts: 11263
Joined: Wed Jan 03, 2018 6:52 pm

Re: doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by Daniel - PDF-XChange »

Hello, ⚜ Kenny Lemens, P.E. ᵂᴵ

Thank you very much for that! I hope this can help the others.

Kind regards,
Dan McIntyre - Support Technician
PDF-XChange Co. LTD

+++++++++++++++++++++++++++++++++++
Our Web site domain and email address has changed as of 26/10/2023.
https://www.pdf-xchange.com
Support@pdf-xchange.com
nuflux
User
Posts: 26
Joined: Tue May 24, 2016 11:59 pm

Re: doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by nuflux »

Thanks Kenny and Daniel.

Just FYI, the newPage() method was working for me after the issue was fixed in 2023. But now it seems that newPage() is being ignored again, and all the watermarks are being printed on one page. Something must have happened in a more recent build such that the fix was dropped.

This is probably why Kenny needed to find a workaround. I'll try his approach (thanks Kenny), but Daniel, you might want to bring this to the attention of the devs.
User avatar
Daniel - PDF-XChange
Site Admin
Posts: 11263
Joined: Wed Jan 03, 2018 6:52 pm

Re: doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by Daniel - PDF-XChange »

Hello, nuflux

I am afraid that I cannot comment on this myself, so I have raised it with the Dev team for review when they get the chance.

Kind regards,
Dan McIntyre - Support Technician
PDF-XChange Co. LTD

+++++++++++++++++++++++++++++++++++
Our Web site domain and email address has changed as of 26/10/2023.
https://www.pdf-xchange.com
Support@pdf-xchange.com
User avatar
Roman - Tracker Supp
Site Admin
Posts: 335
Joined: Sun Nov 21, 2004 3:19 pm

Re: doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by Roman - Tracker Supp »

Hello, nuflux
Yes, this is a recent regression. It will be fixed in the next 10.6 release.
nuflux
User
Posts: 26
Joined: Tue May 24, 2016 11:59 pm

Re: doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by nuflux »

Thank you!
User avatar
Daniel - PDF-XChange
Site Admin
Posts: 11263
Joined: Wed Jan 03, 2018 6:52 pm

doc.addWatermarkFromFile() - Possible bug in Javascript implementation

Post by Daniel - PDF-XChange »

:)
Dan McIntyre - Support Technician
PDF-XChange Co. LTD

+++++++++++++++++++++++++++++++++++
Our Web site domain and email address has changed as of 26/10/2023.
https://www.pdf-xchange.com
Support@pdf-xchange.com