Использование Phantom JS для преобразования всех файлов HTML в папке в формат PNG - PullRequest
10 голосов
/ 23 сентября 2011

Я начал использовать Phantom JS в Windows, но у меня возникли трудности с поиском документации по его возможностям (возможно, в корне моей проблемы).

Используя Phantom JS, я бы хотел сделать следующее:

  1. Укажите расположение папки на локальном компьютере,
  2. Перейдите к этому месту и определите список файлов HTML,
  3. Как только этот список будет идентифицирован для зацикливания списка файлов HTML и преобразования их всех в PNG (аналогично тому, как работает пример rasterize.js), где имя файла gsubs "HTML" с "PNG".

Я уверен, что это возможно, но я не смог найти вызов функции Phantom JS для:

  1. получение списка файлов в папке и
  2. формат для gsub и grep в Phantom JS.

1 Ответ

18 голосов
/ 26 сентября 2011
var page = require('webpage').create(), loadInProgress = false, fs = require('fs');
var htmlFiles = new Array();
console.log(fs.workingDirectory);
var curdir = fs.list(fs.workingDirectory);

// loop through files and folders
for(var i = 0; i< curdir.length; i++)
{
    var fullpath = fs.workingDirectory + fs.separator + curdir[i];
    // check if item is a file
    if(fs.isFile(fullpath))
    {
        // check that file is html
        if(fullpath.indexOf('.html') != -1)
        {
            // show full path of file
            console.log('File path: ' + fullpath);
            htmlFiles.push(fullpath);
        }
    }
}

console.log('Number of Html Files: ' + htmlFiles.length);

// output pages as PNG
var pageindex = 0;

var interval = setInterval(function() {
    if (!loadInProgress && pageindex < htmlFiles.length) {
        console.log("image " + (pageindex + 1));
        page.open(htmlFiles[pageindex]);
    }
    if (pageindex == htmlFiles.length) {
        console.log("image render complete!");
        phantom.exit();
    }
}, 250);

page.onLoadStarted = function() {
    loadInProgress = true;
    console.log('page ' + (pageindex + 1) + ' load started');
};

page.onLoadFinished = function() {
    loadInProgress = false;
    page.render("images/output" + (pageindex + 1) + ".png");
    console.log('page ' + (pageindex + 1) + ' load finished');
    pageindex++;
}

Надеюсь, это поможет .Для получения дополнительной информации о вызовах FileSystem, проверьте эту страницу: http://phantomjs.org/api/fs/

Также я хотел бы добавить, что я считаю, что функции FileSystem доступны только в PhantomJS 1.3 или более поздней версии.Обязательно запустите последнюю версию .Я использовал PyPhantomJS для Windows, но я уверен, что это будет работать без проблем и на других системах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...