PDF-ShellTools > General

Displaying PDF Page Size in Windows Explorer

<< < (6/7) > >>

nightslayer23:
So you have a PDF document with 50 pages, one of those pages is a portrait page but your print software requires everything be Landscape..

So instead of checking page one for orientation, it checks all pages.

If all come out to be landscape then landscape is the output. If all are portrait, portrait the output. If however the PDF has mixed orientation, MIXED could be the term.

RTT:
A modification of a previous script, that fills the PageSize property with the list of paper sizes, that now also calculates the PageOrientation property checking all the pages.

--- Code: ---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++) {
    var PaperSizes = {};
    var File = pdfe.SelectedFiles(i);
    var Pages = File.Pages;
    var PortraitCount = 0;
    var LandscapeCount = 0;
    ProgressBar.position = i + 1;
    pdfe.echo(File.Filename);
    if (Pages.Count > 0) {
        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['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;
                    }
                }

                (Page.Height > Page.Width) ? PortraitCount++ : LandscapeCount++;
            }
        }

        //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;
        });


        var FileMetadata = File.Metadata;
        var Changed = false;

        var sizesStr = '';
        for (var n = 0; n < PaperSizes.length; n++) {
            sizesStr = sizesStr + PaperSizes[n].Size + ',';
        }

        sizesStr = sizesStr.substr(0, sizesStr.length - 1);
        if (FileMetadata.PageSize !== sizesStr) {
            FileMetadata.PageSize = sizesStr;
            Changed = true;
        }

        var PageOrientationStr = 'Portrait';
        if (PortraitCount && LandscapeCount) PageOrientationStr = 'Mixed'
        else if (LandscapeCount) PageOrientationStr = 'Landscape';

        if (FileMetadata.PageOrientation !== PageOrientationStr) {
            FileMetadata.PageOrientation = PageOrientationStr;
            Changed = true;
        }

        if (Changed) {
            if (FileMetadata.CommitChanges()) {
                pdfe.echo('      (Paper sizes: ' + sizesStr + ' - Orientation: ' + PageOrientationStr + ') [OK]');
            } else {
                pdfe.echo('      [commit changes failed]', 0xFF0000);
            }
        } else {
            pdfe.echo('      (Paper sizes: ' + sizesStr + ' - Orientation: ' + PageOrientationStr + ') [properties already set]');
        }

    } else {
        pdfe.echo('      [not a PDF or has no pages]', 0xFF0000);
    }
}

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;
}

--- End code ---

timtak:
Thank you. I got it working. Either because I installed the optional "Filter Handler Metadata Properties Extender" when I installed shell-scripts, or because I used a different script. I used the one downloaded from
https://www.rttsoftware.com/forum/index.php?action=dlattach;topic=507.0;attach=390
this time. It does not display A4 and the like but perhaps that is preferable because I can see the orientation without having to add another custom field.

I got the PDF-Shell script to run, and in the results of the run the sizes are displayed.


--- Code: --- C:\Users\TT\Desktop\Temp\Ninja_English_001.pdf
  Size details:
    297x424 = 1
  Sizes list: 297x424
 C:\Users\TT\Desktop\Temp\Hyouka.pdf
  Size details:
    A4 = 2
  Sizes list: A4
 C:\Users\TT\Desktop\Temp\Yamaguchi_Niho_26.pdf
  Size details:
    A4 = 3
  Sizes list: A4
 C:\Users\TT\Desktop\Temp\calendar.pdf
  Size details:
    A4 = 1
  Sizes list: A4
 C:\Users\TT\Desktop\Temp\Kim_Culture_and_self_expression.pdf
  Size details:
    Letter = 35
  Sizes list: Letter
 Done

--- End code ---

And "Page size" is also being displayed as a column in explorer but the page sizes are empty. and now the page sizes are displayed too.

I did not need to close the run box but perhaps I needed to install the "Filter Handler Metadata Properties Extender," which I did on this computer.

PS This is a great piece of software! I may even buy it! (I had thought that I would just be using it once but I am really liking it). When I rotate using PDF ShellTools it does not change the creator nor producer field of the document which is very good since my printer insists everything is made by Adobe or MS Word. Hopefully they will not notice.

RTT:

--- Quote from: timtak on March 21, 2021, 09:58:40 PM ---I did not need to close the run box but perhaps I needed to install the "Filter Handler Metadata Properties Extender," which I did on this computer.

--- End quote ---
The script saves the calculated sizes to the PDF itself, into the metadata custom field you configured with the manager. You can always use a PDF reader to check if the metadata got indeed saved to the file, e.g. File>Properties (CTRL+D) in Acrobat. The Windows File Explorer will use the PDF-ShellTools PDF Property Handler to access these properties, so these are available immediately after the metadata is saved to the PDF. That's why you didn't needed to close the script output window.

I don't think having the "Filter Handler Metadata Properties Extender" installed, or not, is related to the problem you experienced with the other script.
But, latest Windows 10 versions, e.g. 20H2, seems to have Windows Search issues, with the Search Indexer failing to index the metadata if, under the Windows Advanced Indexing Options, the PDF file type is set to index the properties and file contents, instead of just the properties. The indexer uses the registered PDF filter to gather the file contents and metadata properties (if also exported by the filter) and discard the metadata properties exported by the call to the properties handler, despite still calling it. This result in the Windows Search not finding by searching by any, supposedly, indexed metadata word(s). Having the "Filter Handler Metadata Properties Extender" registered fix this, as this filter also exports the PDFs metadata properties. When this issue is present, the PDF-ShellTools Reader Windows Search Explorer shows all the metadata columns empty.
Let's hope Microsoft fix this issue soon.


--- Quote ---PS This is a great piece of software! I may even buy it! (I had thought that I would just be using it once but I am really liking it). When I rotate using PDF ShellTools it does not change the creator nor producer field of the document which is very good since my printer insists everything is made by Adobe or MS Word. Hopefully they will not notice.

--- End quote ---
Spread the word. :)

timtak:
> The script saves the calculated sizes to the PDF itself.

Perhaps that was my problem. Perhaps I had the PDF files (that did not display page size) open, and that prevented ShellTools from saving the sizes to the PDFs.

Thank you very much indeed.

I will try to spread the word. It is the least I can do.

[Excuses I don't think I will be using this software again for another few years, until I send my textbook off to be printer again. I am using a really cheap printing company that helps very little and is quite strict, requiring each page be a separate PDF and that the page size, creating program, orientation be identical and that number of pages be one. Shell tools made checking these constraints very easy. But until I send my textbook off to a printing company again, in about 5 years time, I am not sure I  need the super functionality. I will have a think. If I need the functionality in my job then I can use my work budget. ]

Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version