LINUX.ORG.RU

Снимок веб-страницы в PDF из консоли?


0

0

HTML-движок, если таковой будет использоваться, не важен. Разбивка на страницы не важна. Важно, чтобы в PDF попадали стили страницы.

Если бы существовал способ без участия пользователя распечатать страницу в PDF через браузер, задав, скажем, опции командной строки, делал бы так.

anonymous

Попробуй html2ps. Ещё тут неоднократно поднималась тема про рендеринг HTML-страниц в картинки, но я не смог найти поиском. Есть ещё какая-то утилита, которая рендерит с помощью qt4/webkit.

Deleted
()

знаю mozilla2ps

нужны Х-ы (достаточно Xvfb)

sdio ★★★★★
()

convert, что из imagemagick умеет конвертировать html в pdf, само собой, не без участия html2ps и ps2pdf.

Laz ★★★★★
()

html2ps не понял кодировку HTML-файла, хотя
* она совпадала с системной (UTF-8)
* и даже была прописана в теге meta
К тому же, html2ps не умеет брать веб-страницу по URL. Впрочем, это
* понятно
* легко обходится с помощью wget -p -k -nc -H

mozilla2ps (http://michele.pupazzo.org/mozilla2ps/) ругнулся на что-то, связанное с Python, когда я попытался выполнить
xulrunner --install-app mozilla2ps-0.7.xulapp /tmp

Погуглил ещё и нашёл программу CutyCapt (http://cutycapt.sourceforge.net/), которая рендерит веб-страницы, используя WebKit. Эту программу сейчас и использую.

По пути нашёл похожий топик: "Рендеринг HTML в графику" (http://www.linux.org.ru/view-message.jsp?msgid=2707157). Ничего нового в нём не нашёл.

Всем спасибо за ответы.

anonymous
()
Ответ на: комментарий от anonymous

>Не понятно только, чем wkhtmltopdf  лучше CutyCapt.

У второй параметров больше :)

void WKHtmlToPdf::usage(FILE * fd) {
        fprintf(fd,
"Usage: wkhtmltopdf [OPTION]... [<input file> [<output file>]]\n"
"converts a html page to pdf, if no <output file> is specified\n"
"/dev/stdout is used, simular for <input file>.\n"
"\n"
"Options:\n"
"  -h, --help                      print this help.\n"
"  -q, --quiet                     be less verbose.\n"
"  -i, --input <url>               use url as input.\n"
"  -o, --output <url>              use url as output.\n"
"  -p, --proxy <proxy>             use a proxy.\n"
"  -O, --orientation <orientation> Set orientation to\n"
"                                  Landscape or Portrait\n"
"  -s, --pagesize <size>           Set pape size to: A4, Letter, ect.\n"
"\n"
"Proxy:\n"
"  By default proxyinformation will be read from the environment\n"
"  variables: proxy, all_proxy and http_proxy, proxy options can\n"
"  also by specified with the -p switch\n"
"  <type> := \"http://\" | \"socks5://\"\n" 
"  <userinfo> := <username> (\":\" <password>)? \"@\"\n"
"  <proxy> := \"None\" | <type>? <userinfo>? <host> (\":\" <port>)?\n"
"\n"
"Mail bug reports and suggestions to <antialze@gmail.com>.\n"
                );
}

void WKHtmlToPdf::setOrientation(const char * o) {

и:

CaptHelp(void) {
  238   printf("%s",
  239     " -----------------------------------------------------------------------------\n
"
  240     " Usage: CutyCapt --url=http://www.example.org/ --out=localfile.png            \n"
  241     " -----------------------------------------------------------------------------\n
"
  242     "  --help                         Print this help page and exit                \n"
  243     "  --url=<url>                    The URL to capture (http:...|file:...|...)   \n"
  244     "  --out=<path>                   The target file (.png|pdf|ps|svg|jpeg|...)   \n"
  245     "  --out-format=<f>               Like extension in --out, overrides heuristic \n"
  246 //  "  --out-quality=<int>            Output format quality from 1 to 100          \n"
  247     "  --min-width=<int>              Minimal width for the image (default: 800)   \n"
  248     "  --max-wait=<ms>                Don't wait more than (default: 90000, inf: 0)\n"
  249     "  --delay=<ms>                   After successful load, wait (default: 0)     \n"
  250     "  --user-styles=<url>            Location of user style sheet, if any         \n"
  251     "  --header=<name>:<value>        request header; repeatable; some can't be set\n"
  252     "  --method=<get|post|put>        Specifies the request method (default: get)  \n"
  253     "  --body-string=<string>         Unencoded request body (default: none)       \n"
  254     "  --body-base64=<base64>         Base64-encoded request body (default: none)  \n"
  255     "  --app-name=<name>              appName used in User-Agent; default is none  \n"
  256     "  --app-version=<version>        appVers used in User-Agent; default is none  \n"
  257     "  --user-agent=<string>          Override the User-Agent header Qt would set  \n"
  258 // The --wait-for-alert functionality could also be offered by passing a QObject to js
  259 //  "  --wait-for-alert=<string>      Capture and exit on script alert('string')   \n"
  260     "  --javascript=<on|off>          JavaScript execution (default: on)           \n"
  261     "  --java=<on|off>                Java execution (default: unknown)            \n"
  262     "  --plugins=<on|off>             Plugin execution (default: unknown)          \n"
  263     "  --private-browsing=<on|off>    Private browsing (default: unknown)          \n"
  264     "  --auto-load-images=<on|off>    Automatic image loading (default: on)        \n"
  265     "  --js-can-open-windows=<on|off> Script can open windows? (default: unknown)  \n"
  266     "  --js-can-access-clipboard=<on|off> Script clipboard privs (default: unknown)\n"
  267     " -----------------------------------------------------------------------------\n
"
  268     "  <f> is svg,ps,pdf,itext,html,rtree,png,jpeg,mng,tiff,gif,bmp,ppm,xbm,xpm    \n"
  269     " -----------------------------------------------------------------------------\n
"
  270     " http://cutycapt.sf.net - (c) 2003-2008 Bjoern Hoehrmann - bjoern@hoehrmann.de\n"
  271     "");
  272 }

Вообще, см. сорцы:

http://code.google.com/p/wkhtmltopdf/source/browse/trunk/wkhtmltopdf.cc

http://cutycapt.svn.sourceforge.net/viewvc/cutycapt/CutyCapt/CutyCapt.cpp?view=
markup

KRoN73 ★★★★★
()
Ответ на: комментарий от anonymous

А, вообще, я протормозил :) Там разница фундаментальная есть. Первый сохраняет в PDF, второй - в графическом виде :)

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.