HTML을 이미지로 변환


22

배경

다양한 구문 강조 소스 파일 (C, SQL, Java, PHP, 배치, bash)을 eBook 및 인쇄 된 책에 적합한 고해상도 이미지 (600dpi)로 일괄 변환합니다.

실패한 솔루션

지금까지 여러 시도 :

  • OpenOffice 또는 LibreOffice- 소스 파일이 변경 될 때마다 소스 코드를 문서로 다시 가져와야합니다. 즉, 수백 또는 수천 개의 소스 파일에 대해 솔루션을 쉽게 자동화 할 수 없습니다.
  • 첨자. 색상을 쉽게 변경할 수 없으며 종합적인 것이 아니라 출력을 불완전하게 렌더링합니다.
  • LyX / LaTeX. 출력을 불완전하게 렌더링합니다.
  • gvim에서 HTML로-HTMLDOC에서 포스트 스크립트로-GhostScript에서 PNG로. HTMLDOC는 font태그를 무시 합니다.
  • gvim에서 HTML로 — html2ps — Ghost에서 PNG로. RGB 색상은로 인식되지 않습니다 html2ps.
  • Firefox에서 PostScript로 — GhostScript에서 PNG로. 명백하게 회로 성.
  • gvim to HTML — 무엇이든 OmniFormat. 일괄 처리에 적합하지 않은 무료 버전. 많은 광고 팝업.
  • 피그먼트. 이미지 해상도를 쉽게 변경할 수 없습니다. gvim의 다양한 색 구성표가 없습니다.

가장 가까운 솔루션

거의 효과가있는 솔루션은 다음과 같습니다.

  • gvim에서 HTML로 — wkhtmltopdf에서 PDF로. ImageMagick을 사용한 후 처리가 필요합니다 ( wkhtmltoimage 는 이미지 해상도를 설정할 수없고 페이지 너비 만 설정).

요구 사항

  • Windows 및 Linux이지만 둘 중 하나만 허용됩니다.
  • 무료 또는 OSS
  • 명령 줄 만 (배치 처리에 적합)
  • 쉽게 색 구성표 변경
  • 지원 : PHP, 배치, bash, Java, JavaScript, R, C 및 SQL

의문

구문 강조 소스 코드를 고해상도 (600dpi) 이미지로 변환하는 다른 방법이 있습니까?

고맙습니다!


@ 데이브 자비스 : 왜 wkhtmltoimage페이지 너비를 설정하는 것이 충분하지 않습니까? 높이는 html 항목의 내용에 따라 결정되므로 지정할 수 없습니다. imho 너비는 실제로 필요한 전부입니다. 원하는 인치당 픽셀 수를 기준으로 필요한 너비를 계산할 수 있습니다.
akira

@ 데이브 자비스 : 글쎄, 당신이 얼마나 뭉치 인치를 덮고 싶은지 말해주고 필요한 픽셀 수를 알려줍니다. 나중에 변환으로 결과를 '트리밍'하는 것은 좋은 생각이지만 'dpi'라는 아이디어를 다소 파괴합니다. 당신은 항상 "나는이 x 인치의 공간을 채울 필요가 있고 그것을 인치당 z 도트로 채우길 원한다"로 시작한다. 그리고 그 공식에 따라 픽셀을 요청한다.
akira

@akira : 너비는 소스 코드가 사용하는 열 수에 따라 다릅니다. 때로는 너비가 75 자입니다. 때로는 40 자입니다. 따라서 75자는 약 5.5 인치를 차지하고 40자는 절반보다 약간 커야합니다. 5.5 값은 책의 여백에 따라 달라지며 한 번 또는 두 번 변경 될 수 있습니다. 그건 그렇고, 자동으로 수행 해야하는 계산입니다. 그렇지 않으면 솔루션을 자동화 할 수 없으므로 전체 목적을 상실합니다.
Dave Jarvis

@ 데이브 자비스 : 네, 당신의 문제를 이해합니다. 귀하의 경우 웹킷의 출력이 실제로 확장 가능하므로 나중에 pdf의 크기를 조정할 수 있습니다. 통합 솔루션을 내가 한 줌 레벨의 일종하고 '브라우저의 폭 필요 의심
아키라

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 자 이상의 줄을 가진 소스 파일은 전체 줄을 유지하는 데 필요한만큼 이미지를 넓 힙니다.

설치

다음 위치에 구성 요소를 설치하십시오.

  • gvim을 -C:\Program Files\Vim
  • 모리아 -C:\Program Files\Vim\vim73\colors
  • wkhtmltoimage -C:\Program Files\wkhtml
  • ImageMagick이 -C:\Program Files\ImageMagick
  • 둔한Sed의 -C:\Program Files\GnuWin32

참고 : ImageMagick에는 convert.exeWindows 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으로 간단한 솔루션을 해킹하는 것은 매우 간단합니다.


불행히도 문서 오류입니다. dpiWindows 버전에서는 이 옵션을 사용할 수 없습니다.
Dave Jarvis

@ 데이브 자비스 : 알겠습니다. 그런 다음 QtWebkit을 사용하십시오. .)
아키라

또는 Linux로 VM (VirtualBox 등)을 설치하고 거기서 변환 할 수 있습니다.
icyrock.com

0

HTML-> PDF 변환 양식 명령 행에 Open Office를 사용할 수도 있습니다.

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


@Dave, OO (OpenOffice)에서 솔루션은 다음과 같습니다. 1. 일부 도구를 사용하여 구문 강조 표시가있는 HTML 파일을 생성합니다. 2. OO를 사용하여 HTML을 PDF로 변환합니다. 이 두 작업 모두 명령 줄에서 수행 할 수 있으므로 N 개의 파일 수에 대한 프로세스를 쉽게 자동화 할 수 있어야합니다.
Shamit Verma

OpenOffice는 실제로 솔루션이 아닙니다. 느리고 버그가 많으며 많은 오버 헤드 (예 : Java)가 있으며 설치보다 시간이 오래 걸립니다 wkhtmltoimage. 또한 귀하의 솔루션은 이론적입니다. 정답 (투명한 배경 이미지)으로 주어진 결과를 정확하게 재현하고 완전 자동 솔루션 인 동안 사용 하는 것보다 짧은 시간에 HTML을 변환 하는 작업 배치 파일을 작성하는 경우 대안으로 결과를 게시하는 것이 좋습니다. . 또한 OpenOffice 로 대체하면 어떤 이점이 있습니까? src2png.batwkhtmltoimagewkhtmltoimage
Dave Jarvis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.