Перетворити HTML у зображення


22

Фон

Пакетне перетворення різних виділених синтаксисом вихідних файлів (C, SQL, Java, PHP, пакет, bash) у зображення високої роздільної здатності (600dpi), що підходять для електронної книги та друкованої книги.

Невдалі рішення

Досі кілька спроб:

  • OpenOffice або LibreOffice - доведеться повторно імпортувати вихідний код у документ щоразу, коли вихідний файл змінюється. (Тобто рішення не може бути легко автоматизовано для сотень чи тисяч вихідних файлів.)
  • власноруч. Не можна легко змінювати кольори, недосконало виводить вихід, а не всеосяжний.
  • LyX / LaTeX. Недосконало виводить вихід.
  • gvim до HTML - HTMLDOC до PostScript - GhostScript до PNG. HTMLDOC ігнорує fontтеги.
  • gvim до HTML - html2ps - GhostScript до PNG. Кольори RGB не розпізнаються html2ps.
  • Firefox до PostScript - GhostScript до PNG. Відверто ланцюговий.
  • gvim до HTML - OmniFormat до чого-небудь. Безкоштовна версія, непридатна для пакетної обробки; багато рекламних спливаючих вікон.
  • пігменти. Неможливо легко змінити роздільну здатність зображення; не має колірної гами gvim.

Найближче рішення

Рішення, яке майже працює:

  • gvim - HTML - wkhtmltopdf у PDF. Буде потрібна післяобробка з ImageMagick ( wkhtmltoimage не може встановити роздільну здатність зображення, лише ширина сторінки).

Вимоги

  • Windows та Linux, але це прийнятно.
  • Безкоштовно або OSS
  • Тільки командний рядок (підходить для пакетної обробки)
  • Легко змінюйте колірну гаму
  • Підтримка: PHP, batch, bash, Java, JavaScript, R, C та SQL

Питання

Будь-які інші способи перетворення вихідного коду, виділеного синтаксисом, у зображення високої роздільної здатності (600 dpi)?

Дякую!


@Dave Jarvis: чому wkhtmltoimageнедостатньо встановити ширину сторінки? висоту не можна вказати, оскільки вона визначається вмістом html-матеріалу. Ширина imho - це все, що вам потрібно, ви можете обчислити необхідну ширину, виходячи з того, скільки пікселів на дюйм ви хочете.
акіра

@Dave Jarvis: ну просто скажи мені, скільки дюймів ти хочеш покрити, і я скажу, скільки пікселів тобі знадобиться. 'обрізання' результату з конвертуванням згодом є приємною ідеєю, але дещо руйнує ідею 'dpi'. ви завжди починаєте з "мені потрібно заповнити цей х дюйм простору, і я хочу, щоб він був заповнений z точками на дюйм" .. і на основі цієї формули ви вимагаєте пікселів.
akira

@akira: Ширина залежить від кількості стовпців, які використовує вихідний код. Іноді ширина буде 75 символів. Іноді це буде 40 символів. Отже 75 символів повинні займати близько 5,5 дюймів, а 40 символів - трохи більше, ніж удвічі більше. Значення 5,5 залежить від поля книги, які можуть змінюватися (один або два рази). Це підрахунок, який до речі потрібно робити автоматично, інакше рішення не може бути автоматизованим, що перемагає всю мету.
Дейв Джарвіс

@Dave Jarvis: Так, я розумію вашу проблему. вам пощастило перетворити, що вихід веб-файлів у вашому випадку справді масштабований, і, таким чином, ви зможете згодом "змінити" pdf. Для інтегрованого рішення я підозрюю, що потрібен буде якийсь рівень масштабування І ширина "браузера"
akira

btw, який формат документа ви використовуєте для створення електронної книги чи друкованої книги (латекс, xsl-fo .. тощо?)
akira

Відповіді:


9

Вимоги до програмного забезпечення

Наступні програмні пакети доступні як для систем Windows, так і для Linux та потрібні для повноцінного робочого рішення:

  • gvim - використовується для експорту виділеного синтаксису вихідного коду до HTML.
  • moria - Кольорова схема для виділення синтаксису.
  • wkhtmltoimage - використовується для перетворення документів HTML у файли PNG.
  • gawk and sed - Інструменти для обробки тексту.
  • ImageMagick - використовується для обрізки PNG та додавання рамки.

Загальні кроки

Ось як працює рішення:

  1. Завантажте вихідний код у редактор, який може додавати вкраплення кольору.
  2. Експортуйте вихідний код у вигляді документа HTML (із вбудованими FONTтегами).
  3. Стрійте фоновий атрибут з документа HTML (щоб забезпечити прозорість).
  4. Перетворіть документ HTML у файл PNG.
  5. Обріжте рамку PNG.
  6. Додайте невелику рамку на 25 пікселів навколо зображення.
  7. Видалення тимчасових файлів.

Сценарій створює зображення однакової ширини для вихідних файлів, що містять рядки довжиною менше 80 символів. Вихідні файли з рядками довжиною понад 80 символів призводять до того, що зображення будуть настільки широкими, скільки потрібно для збереження всього рядка.

Установка

Встановіть компоненти в такі місця:

  • гвім -C:\Program Files\Vim
  • морія -C:\Program Files\Vim\vim73\colors
  • wkhtmltoimage -C:\Program Files\wkhtml
  • ImageMagick -C:\Program Files\ImageMagick
  • Гаук і Сед -C:\Program Files\GnuWin32

Примітка. ImageMagick має програму convert.exe, яка називається , яка не може замінити команду Windows convert. Через це повний шлях до convert.exeжорсткого кодування у пакетному файлі (на відміну від додавання ImageMagick до PATH).

Змінні середовища

Встановіть змінну середовища PATH на:

"C:\Program Files\Vim\vim73";"C:\Program Files\wkhtml";"C:\Program Files\GnuWin32\bin"

Пакетний файл

Запустити його за допомогою:

src2png.bat src2png.bat

Створіть пакетний файл, викликаний src2png.bat, скопіювавши наступний вміст:

@ECHO OFF

SET NUMBERS=-c "set number"
IF "%2" == "" SET NUMBERS=

ECHO Converting %1 to %1.html...
gvim -e %1 -c "set nobackup" %NUMBERS% -c ":colorscheme moria" ^
  -c :TOhtml -c wq -c :q

REM Remove all background-color occurrences (without being self-referential)
sed -i "s/background-color: #......; \(.*\)}$/\1 }/g" %1.html

ECHO Converting %1.html to %1.png...
wkhtmltoimage --format png --transparent --minimum-font-size 80 ^
  --quality 100 --width 3600 ^
  %1.html %1.png

move %1.png %1.orig.png

REM If the text file has lines that exceed 80 characters, don't crop the
REM resulting image. (The book automatically shrinks large images to fit.)
REM The 3950 is the 80 point font at 80 characters with padding for line
REM numbers.
SET LENGTH=0
FOR /F %%l IN ('gawk ^
  "BEGIN {x=0} {if( length($0)>x ) x=length()} END {print x;}" %1') ^
DO (
  SET LENGTH=%%l
)
SET EXTENT=-extent 3950x
IF %LENGTH% GTR 80 SET EXTENT=

REM Trim the image height, then extend the width for 80 columns, if needed.
REM The result is that all images will be resized the same amount, thus
REM making the font size the same maximum for all source listings. Source
REM files beyond the 80 character limit will be scaled as necessary.
ECHO Trimming %1.png...
"C:\programs\ImageMagick\convert.exe" -format png %1.orig.png ^
  -density 150x150 ^
  -background none -antialias -trim +repage ^
  %EXTENT% ^
  -bordercolor none -border 25 ^
  %1.png

ECHO Removing old files...
IF EXIST %1.orig.png DEL /q %1.orig.png
IF EXIST %1.html DEL /q %1.html
IF EXIST sed*. DEL /q sed*.

Вдосконалення та оптимізація вітаються.

Примітка: Остання версія wkhtmltoimage належним чином обробляє перекриття кольору фону. Таким чином, теоретично лінія для видалення CSS для кольорів тла вже не потрібна.


3

читаючи сторінку сторінки wkhtmltoimage:

 -d,    --dpi   <dpi>   Change the dpi explicitly

якщо це не допомагає: зламати разом просте рішення з Qt та (включно) Webkit досить просто.


На жаль, це помилка в документації. Ця dpiверсія недоступна для версії Windows.
Дейв Джарвіс

@Dave Jarvis: гаразд. потім ... продовжуйте і використовуйте QtWebkit. .)
акіра

Або ви можете встановити Linux як VM (VirtualBox або подібний) і здійснити перетворення там ...
icyrock.com

0

Ви також можете скористатись командним рядком Open Office для Html-> PDF форма перетворення:

http://www.oooninja.com/2008/02/batch-command-line-file-conversion-with.html


@Dave, With OO (OpenOffice) рішенням було б: 1. Використовуйте якийсь інструмент для створення HTML-файлів, у яких є підсвітка синтаксису. 2. Перетворити HTML в PDF з ОО. Оскільки обидві ці операції можна виконати з командного рядка, автоматизація процесу для N кількості файлів повинна бути легко.
Шаміт Верма

OpenOffice насправді не є рішенням. Він повільний, баггі, має величезну кількість накладних витрат (тобто, Java), і для встановлення потрібно більше часу wkhtmltoimage. Також ваше рішення є теоретичним. Якщо ви створюєте робочий пакетний файл, який точно відтворює результати src2png.bat, наведені у правильній відповіді (з прозорими фоновими зображеннями) та перетворює HTML за менший час, ніж використовуючи wkhtmltoimage, будучи повністю автоматичним рішенням, рекомендую розмістити результати як альтернативу . Крім того, яка була б перевага заміни wkhtmltoimageOpenOffice?
Дейв Джарвіс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.