Post reply

Name:
Email:
Subject:
Message icon:

Verification:

shortcuts: hit alt+s to submit/post or alt+p to preview


Topic Summary

Posted by: RTT
« on: June 05, 2019, 01:13:03 AM »

Check if the attached script, a modification of the first script to also fill a PageOrientation named property, does the job.
Don't forget to configure a metadata property named "PageOrientation", before testing.
The script code, for easy reference.
Code: [Select]
var ProgressBar = pdfe.ProgressBar;
ProgressBar.max = pdfe.SelectedFiles.Count;

for (var i = 0; i < pdfe.SelectedFiles.Count; i++) {
    ProgressBar.position = i + 1;
    var file = pdfe.SelectedFiles(i);
    var Page = file.Pages(0);
    if (Page) {
        var w = Math.min(Page.Width, Page.Height);
        var h = Math.max(Page.Width, Page.Height);
        var PSizeStr = w.toFixed() + 'x' + h.toFixed();
        var FileMetadata = file.Metadata;
        var Changed = false;
        if (FileMetadata.PageSize !== PSizeStr) {
            FileMetadata.PageSize = PSizeStr;
            Changed = true;
        }
        var PageOrientationStr;
        (Page.Height > Page.Width) ? PageOrientationStr = 'Portrait' : PageOrientationStr = 'Landscape';
        if (FileMetadata.PageOrientation !== PageOrientationStr) {
            FileMetadata.PageOrientation = PageOrientationStr;
            Changed = true;
        }
        if (Changed) {
            if (FileMetadata.CommitChanges()) {
                pdfe.echo(file.Filename + ' : (' + PSizeStr + ' - ' + PageOrientationStr + ') [OK]');

            } else {
                pdfe.echo(file.Filename + ' [commit changes failed]', 0xFF0000);
            }
        } else {
            pdfe.echo(file.Filename + ' : (' + PSizeStr + ' - ' + PageOrientationStr + ') [properties already set]');
        }
    }
}
pdfe.echo("Done");
Posted by: nightslayer23
« on: June 04, 2019, 05:04:03 AM »

Hi again, could I request an add on to this script? Say keep everything as it is, but make another metadata entry for a Property Handle called "orientation" whereby, if the height > width of PDF size, then add metadata 'orientation' called "Portrait". Likewise, for if width > height then 'orientation' = "Landscape"
Posted by: RTT
« on: May 31, 2017, 12:55:53 AM »

Would I make this a new script? And a new Metadata field?
This is just a code snippet, not a complete script, for you to use in the script you told was not working correctly when the pages where rotated.
A new script, or metadata field, depends if you also need the info from the original script. If not, you may just adapt the original script to your needs and store the info in the same field.
But the first script only gets the size of the first page, so if you need to know all the different sizes of the document, the code needs to be changed.
The newest script, that returns the list of sizes using the names for the standard paper sizes, is not useful for this as and A4 sheet is still A4 size even if landscape.
Posted by: nightslayer23
« on: May 30, 2017, 04:13:25 AM »

Sometimes it works, sometimes not. Must be some glitch where if a pdf has been rotated to landscape, it takes on the original length and width and not the update rotation. I wanted to be able to differentiate Landscape and Portrait files from one another but it doesn't seem possible for some reason.
Indeed, the page width/height properties are not taking into account the page rotation! I will have this fixed in the next release.
Meanwhile, you can also check the page rotation:

        if (Page.Rotation == 90 || Page.Rotation == 270) {
            var w = Page.Height;
            var h = Page.Width;
        } else {
            var w = Page.Width;
            var h = Page.Height;
        }


Would I make this a new script? And a new Metadata field?
Posted by: RTT
« on: May 30, 2017, 02:27:16 AM »

Little mistake in these new code lines (I didn't tested it previously). I've edited my post with the correct code now.
Posted by: nightslayer23
« on: May 30, 2017, 01:44:54 AM »

I get the following error:

Object doesn't support this property or method 144 8
Posted by: RTT
« on: May 29, 2017, 11:52:33 PM »

At what point do I modify this sorry to add the information to the metadata? I am trying but struggling  :S

You may replace the line
  pdfe.echo(' Sizes list: ' + sizesStr.substr(0,sizesStr.length-1));
by:
Code: [Select]
    sizesStr = sizesStr.substr(0, sizesStr.length - 1);
    var FileMetadata = pdfe.SelectedFiles(i).Metadata;
    if (FileMetadata.PageSize !== sizesStr) {
        FileMetadata.PageSize = sizesStr;
        if (FileMetadata.CommitChanges()) {
            pdfe.echo('(' + sizesStr + ') [OK]');
        } else {
            pdfe.echo('Set metadata property failed', 0xFF0000);
        }
    } else {
        pdfe.echo('(' + sizesStr + ') [already set]');
    }

Posted by: nightslayer23
« on: May 29, 2017, 03:42:27 AM »

Quote
And show this info in a Windows Explorer column? How to format such data?
Commas?
A1,A4,A3 etc.
A quick modification of the included "List paper sizes used" sample script for you to play.
Code: [Select]
STDSizes=[
{'Size': 'A0','width':841,'height':1189},
{'Size': 'A1','width':594,'height':841},
{'Size': 'A2','width':420,'height':594},
{'Size': 'A3','width':297,'height':420},
{'Size': 'A4','width':210,'height':297},
{'Size': 'A5','width':148,'height':210},
{'Size': 'A6','width':105,'height':148},
{'Size': 'A7','width':74,'height':105},
{'Size': 'A8','width':52,'height':74},
{'Size': 'A9','width':37,'height':52},
{'Size': 'A10','width':26,'height':37},

{'Size': 'B0','width':1000,'height':1414},
{'Size': 'B1','width':707,'height':1000},
{'Size': 'B2','width':500,'height':707},
{'Size': 'B3','width':353,'height':500},
{'Size': 'B4','width':250,'height':353},
{'Size': 'B5','width':176,'height':250},
{'Size': 'B6','width':125,'height':176},
{'Size': 'B7','width':88,'height':125},
{'Size': 'B8','width':62,'height':88},
{'Size': 'B9','width':44,'height':62},
{'Size': 'B10','width':31,'height':44},

{'Size': 'C0','width':917,'height':1297},
{'Size': 'C1','width':648,'height':917},
{'Size': 'C2','width':458,'height':648},
{'Size': 'C3','width':324,'height':458},
{'Size': 'C4','width':229,'height':324},
{'Size': 'C5','width':162,'height':229},
{'Size': 'C6','width':114,'height':162},
{'Size': 'C7','width':81,'height':114},
{'Size': 'C8','width':57,'height':81},
{'Size': 'C9','width':40,'height':57},
{'Size': 'C10','width':28,'height':40},

{'Size': '4A0','width':1682,'height':2378},
{'Size': '2A0','width':1189,'height':1682},

{'Size': 'Letter','width':215.9,'height':279.4},
{'Size': 'Legal','width':215.9,'height':355.6},
{'Size': 'Junior Legal','width':203.2,'height':127},
//{'Size': 'Ledger','width':432,'height':279},
{'Size': 'Tabloid','width':279,'height':432},

{'Size': 'PA4','width':210,'height':280},

{'Size': 'Arch A','width':229,'height':305},
{'Size': 'Arch B','width':305,'height':457},
{'Size': 'Arch C','width':457,'height':610},                           
{'Size': 'Arch D','width':610,'height':914},
{'Size': 'Arch E','width':914,'height':1219},
{'Size': 'Arch E1','width':762,'height':1067},
{'Size': 'Arch E2','width':660,'height':965},
{'Size': 'Arch E3','width':686,'height':991},

{'Size': '2R','width':64,'height':89},
{'Size': 'LD,DSC','width':89,'height':119},
{'Size': '3R,L','width':89,'height':127},
{'Size': 'LW','width':89,'height':133},
{'Size': 'KGD','width':102,'height':136},
{'Size': '4R,KG','width':102,'height':152},
{'Size': '2LD,DSCW','width':127,'height':169},
{'Size': '5R,2L','width':127,'height':178},
{'Size': '2LW','width':127,'height':190},
{'Size': '6R','width':152,'height':203},
{'Size': '8R,6P','width':203,'height':254},
{'Size': 'S8R,6PW','width':203,'height':305},
{'Size': '11R','width':279,'height':356},
{'Size': 'A3+,Super B','width':330,'height':483}
];

STDSizes.sort(function(a, b) {
    return (a.height > b.height) ? -1 : ((b.height > a.height) ? 1 : 0);
});

var ProgressBar = pdfe.ProgressBar;
ProgressBar.max = pdfe.SelectedFiles.Count;

var eps = 1; //size compare tolerance [mm]
for (var i = 0; i < pdfe.SelectedFiles.Count; i++) {
    ProgressBar.position = i + 1;
    pdfe.echo('Processing ' + pdfe.SelectedFiles(i).Filename);
    var PaperSizes = {};
    var Pages = pdfe.SelectedFiles(i).Pages;
    for (var ii = 0; ii < Pages.Count; ii++) {
        var Page = Pages(ii);
        if (Page) {
            var w = Math.min(Page.Width, Page.Height);
            var h = Math.max(Page.Width, Page.Height);
            for (var n = 0; n < STDSizes.length; n++) {
                hdif = h - STDSizes[n].height;
                if (Math.abs(hdif) < eps && Math.abs(w - STDSizes[n].width) < eps) {
                    SizeID = STDSizes[n].Size;
                    if (!PaperSizes[SizeID]) {
                        var PaperSize = clone(STDSizes[n]);
//                        PaperSize.Size += ' (' + PaperSize.width + 'x' + PaperSize.height + ')';
                        PaperSize['count'] = 1;
                        PaperSizes[SizeID] = PaperSize;
                    } else {
                        PaperSizes[SizeID].count += 1;
                    }
                    break;
                } else if (hdif > 0) { //stop search if page height>current stdSize height
                    var SizeID = w.toFixed() + 'x' + h.toFixed();
                    var PaperSize = {
                        'Size': SizeID,
                        'width': Math.floor(w * 10) / 10,
                        'height': Math.floor(h * 10) / 10,
                        'notStd': true
                    }

                    STDSizes.splice(n, 0, PaperSize);
                    PaperSize['count'] = 1;
                    PaperSizes[SizeID] = PaperSize;
                    break;
                }
            }
        }
    }

    //sort descending by page size count. Standard sizes and higher heights first
    PaperSizes = sortObj(PaperSizes, function(a, b) {
        if (a['notStd'] == b['notStd']) {
            return (a.count > b.count) ? -1 : ((b.count > a.count) ? 1 : (a.height > b.height) ? -1 : ((b.height > a.height) ? 1 : 0));
        } else if (!a['notStd']) return -1;
        return 1;
    });

    //output results
    pdfe.echo(pdfe.SelectedFiles(i).Filename, 0, 2);
    pdfe.echo(' Size details:');
    for (var n = 0; n < PaperSizes.length; n++) {
        pdfe.echo('   ' + PaperSizes[n].Size + ' = ' + PaperSizes[n].count);
    }

    var sizesStr='';
    for (var n = 0; n < PaperSizes.length; n++) {
    sizesStr=sizesStr+PaperSizes[n].Size+',';   
    }
    pdfe.echo(' Sizes list: ' + sizesStr.substr(0,sizesStr.length-1));   
   
}

pdfe.echo("Done");

//======================================================================
function clone(obj) {
    if (obj == null || typeof(obj) != 'object') return obj;
    var temp = new obj.constructor();
    for (var key in obj)
    temp[key] = clone(obj[key]);
    return temp;
}

function sortObj(object, sortFunc) {
    var rv = [];
    for (var k in object) {
        if (object.hasOwnProperty(k)) {
            rv.push(object[k]);
        }
    }
    rv.sort(sortFunc);
    return rv;
}

At what point do I modify this sorry to add the information to the metadata? I am trying but struggling  :S
Posted by: RTT
« on: May 26, 2017, 01:00:25 AM »

Sometimes it works, sometimes not. Must be some glitch where if a pdf has been rotated to landscape, it takes on the original length and width and not the update rotation. I wanted to be able to differentiate Landscape and Portrait files from one another but it doesn't seem possible for some reason.
Indeed, the page width/height properties are not taking into account the page rotation! I will have this fixed in the next release.
Meanwhile, you can also check the page rotation:

        if (Page.Rotation == 90 || Page.Rotation == 270) {
            var w = Page.Height;
            var h = Page.Width;
        } else {
            var w = Page.Width;
            var h = Page.Height;
        }
Posted by: RTT
« on: May 26, 2017, 12:46:26 AM »

Quote
And show this info in a Windows Explorer column? How to format such data?
Commas?
A1,A4,A3 etc.
A quick modification of the included "List paper sizes used" sample script for you to play.
Code: [Select]
STDSizes=[
{'Size': 'A0','width':841,'height':1189},
{'Size': 'A1','width':594,'height':841},
{'Size': 'A2','width':420,'height':594},
{'Size': 'A3','width':297,'height':420},
{'Size': 'A4','width':210,'height':297},
{'Size': 'A5','width':148,'height':210},
{'Size': 'A6','width':105,'height':148},
{'Size': 'A7','width':74,'height':105},
{'Size': 'A8','width':52,'height':74},
{'Size': 'A9','width':37,'height':52},
{'Size': 'A10','width':26,'height':37},

{'Size': 'B0','width':1000,'height':1414},
{'Size': 'B1','width':707,'height':1000},
{'Size': 'B2','width':500,'height':707},
{'Size': 'B3','width':353,'height':500},
{'Size': 'B4','width':250,'height':353},
{'Size': 'B5','width':176,'height':250},
{'Size': 'B6','width':125,'height':176},
{'Size': 'B7','width':88,'height':125},
{'Size': 'B8','width':62,'height':88},
{'Size': 'B9','width':44,'height':62},
{'Size': 'B10','width':31,'height':44},

{'Size': 'C0','width':917,'height':1297},
{'Size': 'C1','width':648,'height':917},
{'Size': 'C2','width':458,'height':648},
{'Size': 'C3','width':324,'height':458},
{'Size': 'C4','width':229,'height':324},
{'Size': 'C5','width':162,'height':229},
{'Size': 'C6','width':114,'height':162},
{'Size': 'C7','width':81,'height':114},
{'Size': 'C8','width':57,'height':81},
{'Size': 'C9','width':40,'height':57},
{'Size': 'C10','width':28,'height':40},

{'Size': '4A0','width':1682,'height':2378},
{'Size': '2A0','width':1189,'height':1682},

{'Size': 'Letter','width':215.9,'height':279.4},
{'Size': 'Legal','width':215.9,'height':355.6},
{'Size': 'Junior Legal','width':203.2,'height':127},
//{'Size': 'Ledger','width':432,'height':279},
{'Size': 'Tabloid','width':279,'height':432},

{'Size': 'PA4','width':210,'height':280},

{'Size': 'Arch A','width':229,'height':305},
{'Size': 'Arch B','width':305,'height':457},
{'Size': 'Arch C','width':457,'height':610},                           
{'Size': 'Arch D','width':610,'height':914},
{'Size': 'Arch E','width':914,'height':1219},
{'Size': 'Arch E1','width':762,'height':1067},
{'Size': 'Arch E2','width':660,'height':965},
{'Size': 'Arch E3','width':686,'height':991},

{'Size': '2R','width':64,'height':89},
{'Size': 'LD,DSC','width':89,'height':119},
{'Size': '3R,L','width':89,'height':127},
{'Size': 'LW','width':89,'height':133},
{'Size': 'KGD','width':102,'height':136},
{'Size': '4R,KG','width':102,'height':152},
{'Size': '2LD,DSCW','width':127,'height':169},
{'Size': '5R,2L','width':127,'height':178},
{'Size': '2LW','width':127,'height':190},
{'Size': '6R','width':152,'height':203},
{'Size': '8R,6P','width':203,'height':254},
{'Size': 'S8R,6PW','width':203,'height':305},
{'Size': '11R','width':279,'height':356},
{'Size': 'A3+,Super B','width':330,'height':483}
];

STDSizes.sort(function(a, b) {
    return (a.height > b.height) ? -1 : ((b.height > a.height) ? 1 : 0);
});

var ProgressBar = pdfe.ProgressBar;
ProgressBar.max = pdfe.SelectedFiles.Count;

var eps = 1; //size compare tolerance [mm]
for (var i = 0; i < pdfe.SelectedFiles.Count; i++) {
    ProgressBar.position = i + 1;
    pdfe.echo('Processing ' + pdfe.SelectedFiles(i).Filename);
    var PaperSizes = {};
    var Pages = pdfe.SelectedFiles(i).Pages;
    for (var ii = 0; ii < Pages.Count; ii++) {
        var Page = Pages(ii);
        if (Page) {
            var w = Math.min(Page.Width, Page.Height);
            var h = Math.max(Page.Width, Page.Height);
            for (var n = 0; n < STDSizes.length; n++) {
                hdif = h - STDSizes[n].height;
                if (Math.abs(hdif) < eps && Math.abs(w - STDSizes[n].width) < eps) {
                    SizeID = STDSizes[n].Size;
                    if (!PaperSizes[SizeID]) {
                        var PaperSize = clone(STDSizes[n]);
//                        PaperSize.Size += ' (' + PaperSize.width + 'x' + PaperSize.height + ')';
                        PaperSize['count'] = 1;
                        PaperSizes[SizeID] = PaperSize;
                    } else {
                        PaperSizes[SizeID].count += 1;
                    }
                    break;
                } else if (hdif > 0) { //stop search if page height>current stdSize height
                    var SizeID = w.toFixed() + 'x' + h.toFixed();
                    var PaperSize = {
                        'Size': SizeID,
                        'width': Math.floor(w * 10) / 10,
                        'height': Math.floor(h * 10) / 10,
                        'notStd': true
                    }

                    STDSizes.splice(n, 0, PaperSize);
                    PaperSize['count'] = 1;
                    PaperSizes[SizeID] = PaperSize;
                    break;
                }
            }
        }
    }

    //sort descending by page size count. Standard sizes and higher heights first
    PaperSizes = sortObj(PaperSizes, function(a, b) {
        if (a['notStd'] == b['notStd']) {
            return (a.count > b.count) ? -1 : ((b.count > a.count) ? 1 : (a.height > b.height) ? -1 : ((b.height > a.height) ? 1 : 0));
        } else if (!a['notStd']) return -1;
        return 1;
    });

    //output results
    pdfe.echo(pdfe.SelectedFiles(i).Filename, 0, 2);
    pdfe.echo(' Size details:');
    for (var n = 0; n < PaperSizes.length; n++) {
        pdfe.echo('   ' + PaperSizes[n].Size + ' = ' + PaperSizes[n].count);
    }

    var sizesStr='';
    for (var n = 0; n < PaperSizes.length; n++) {
    sizesStr=sizesStr+PaperSizes[n].Size+',';   
    }
    pdfe.echo(' Sizes list: ' + sizesStr.substr(0,sizesStr.length-1));   
   
}

pdfe.echo("Done");

//======================================================================
function clone(obj) {
    if (obj == null || typeof(obj) != 'object') return obj;
    var temp = new obj.constructor();
    for (var key in obj)
    temp[key] = clone(obj[key]);
    return temp;
}

function sortObj(object, sortFunc) {
    var rv = [];
    for (var k in object) {
        if (object.hasOwnProperty(k)) {
            rv.push(object[k]);
        }
    }
    rv.sort(sortFunc);
    return rv;
}
Posted by: nightslayer23
« on: May 25, 2017, 06:17:51 AM »

How do we get it to display the dimensions in the correct orientation..?

I want say, A1's that are Portrait to display as: 594 x 841 and A1's that are Landscape to display as 841 x 594..
In the above script, change the lines
var w = Math.min(Page.Width, Page.Height);
var h = Math.max(Page.Width, Page.Height);

to
var w = Page.Width;
var h = Page.Height;


thank you. I did do this already, kind of worked. Sometimes it works, sometimes not. Must be some glitch where if a pdf has been rotated to landscape, it takes on the original length and width and not the update rotation. I wanted to be able to differentiate Landscape and Portrait files from one another but it doesn't seem possible for some reason.
Posted by: nightslayer23
« on: May 25, 2017, 06:08:04 AM »

Quote
And show this info in a Windows Explorer column? How to format such data?
Commas?
A1,A4,A3 etc.
Posted by: RTT
« on: May 24, 2017, 11:40:40 PM »

How do we get it to display the dimensions in the correct orientation..?

I want say, A1's that are Portrait to display as: 594 x 841 and A1's that are Landscape to display as 841 x 594..
In the above script, change the lines
var w = Math.min(Page.Width, Page.Height);
var h = Math.max(Page.Width, Page.Height);

to
var w = Page.Width;
var h = Page.Height;

Posted by: RTT
« on: May 24, 2017, 11:38:24 PM »

Sometimes the PDFs I'm needing to look at are actually mixed sizes..

Is there a way to look at each page and then list the page sizes it finds?

I've managed to get the output to display as their A1,A2,A4 etc.. but it doesn't alert or display a multi-sized file.

This would be ultra handy if possible..
And show this info in a Windows Explorer column? How to format such data?
Posted by: nightslayer23
« on: May 24, 2017, 03:38:32 AM »

How do we get it to display the dimensions in the correct orientation..?

I want say, A1's that are Portrait to display as: 594 x 841 and A1's that are Landscape to display as 841 x 594..