您需要在服务器上将HTML页面渲染为JPG图像 — 用于缩略图、归档、邮件预览或电子商务流水线中的产品截图。为每次转换启动一个无头浏览器既笨重又缓慢,而且容易因浏览器更新而失效。Total HTML Converter X可通过命令行批量将HTML文件和实时URL渲染为JPG,无需安装浏览器。将其安装在Windows服务器上,通过脚本或ActiveX调用,让其无人值守运行。
*.html),转换器即可在一次运行中将每个匹配文件渲染为JPG
Windows 7/8/10/11 • Server 2008/2012/2016/2019/2022
HTML是一种为浏览器设计的标记语言。HTML页面由文本、CSS规则、嵌入图像和外部资源构成。渲染效果取决于浏览器引擎、已安装字体和屏幕大小。同一HTML在Chrome、Firefox和Edge中可能看起来不同,并且当外部资源不可用时可能完全损坏。
JPG是一种固定光栅图像格式。它精确捕捉转换时渲染的页面外观,不嵌入任何外部内容,可在每个图像查看器、浏览器和社交媒体平台中打开。JPG文件小巧、易于嵌入,是缩略图、预览和归档快照的理想选择。
| HTML | JPG | |
|---|---|---|
| 格式 | 带外部依赖的标记 | 自包含光栅图像 |
| 渲染 | 因浏览器、字体、屏幕尺寸而异 | 固定像素 — 在任何地方都相同 |
| 文件大小 | 可变;取决于链接资源 | 小巧,可通过质量设置控制 |
| 使用场景 | 实时网页展示 | 缩略图、预览、归档、邮件 |
| 可编辑性 | 源代码可编辑 | 只读图像 |
| 嵌入邮件 | 经常被屏蔽或损坏 | 通用支持 |
从上方链接下载安装程序,在Windows服务器或工作站上运行。安装不到一分钟即可完成。无需浏览器,无需Microsoft Office,无需.NET先决条件 — 转换器自带渲染引擎,可处理HTML标签、CSS 1/2样式和嵌入式图像。
打开cmd.exe或PowerShell。转换器可执行文件为HTMLConverter.exe,位于安装文件夹中(通常为C:\Program Files\CoolUtils\TotalHTMLConverterX\)。将其添加到系统PATH,或在命令中使用完整路径。
最简单的命令是将文件夹中所有HTML文件转换为JPG:
HTMLConverter.exe C:\Pages\*.html C:\Output\ -c JPEG
此命令处理C:\Pages\中的每个.html文件,并将同名的.jpg保存到C:\Output\。一个HTML文件输入,一个JPG输出。
使用附加标志控制JPG输出:
HTMLConverter.exe C:\Pages\*.html C:\Output\ -c JPEG -ImgQuality 90 -ImgWidth 1024
-ImgQuality 90 — JPEG质量从1(最小,块状)到100(最高保真度,文件最大)。85–92通常是最佳平衡点。-ImgWidth 1024 — 输出宽度(像素);转换器会缩放渲染以适应-ImgHeight 768 — 输出高度(像素);可与宽度结合使用,或单独使用其中之一-combine — 将整个HTML文档渲染为一张高JPG,而非分页-log C:\Logs\html2jpg.log — 写入转换日志以便验证传入URL而非文件路径:
HTMLConverter.exe https://example.com/report C:\Output\report.jpg -c JPEG -ImgQuality 90
转换器获取页面(包括远程样式表和图像)并将结果渲染为JPG。这对于归档实时网页、自动截图以及按需生成预览图像非常有用。
将您的命令保存到.bat文件中,并使用Windows任务计划程序进行调度:
@echo off "C:\Program Files\CoolUtils\TotalHTMLConverterX\HTMLConverter.exe" C:\Incoming\*.html C:\Archive\JPG\ -c JPEG -ImgQuality 90 -ImgWidth 1280 -log C:\Logs\html2jpg.log
此脚本按您设定的任意间隔运行(每小时、每晚或在文件到达时通过监视器触发),并写入日志文件,使您无需观察控制台即可验证结果。
Total HTML Converter X包含完整的ActiveX接口。您可以从任何兼容COM的环境调用转换器 — .NET、VBScript、PHP、Python、Ruby或ASP。这使您能够将HTML到JPG的渲染功能嵌入自己的Web应用、内部网门户或文档工作流中,无需通过命令行进程调用。
示例(C#/.NET):
HTMLConverterX Cnv = new HTMLConverterX();
Cnv.Convert("C:\\Pages\\report.html", "C:\\Output\\report.jpg", "-c JPEG -ImgQuality 90 -ImgWidth 1024");
示例(PHP):
$c = new COM("HTMLConverter.HTMLConverterX");
$c->convert("C:\\Pages\\report.html", "C:\\Output\\report.jpg", "-c JPEG -ImgQuality 90");
同样的调用方式适用于ASP.NET、VBScript、Python、Ruby、Perl和JavaScript(Windows Script Host)。您的Web应用可以接受上传的HTML或URL,并实时向用户返回渲染后的JPG。
如果只是处理单个页面,我们的免费在线convert HTML to JPG工具可在浏览器中运行,无需安装。对于服务器流水线和批量处理,Total HTML Converter X才是正确的选择。
| 功能 | 在线转换器 | Total HTML Converter X |
|---|---|---|
| 批量处理 | 一次一个文件 | 每批次无限文件 |
| 文件隐私 | 文件上传至第三方服务器 | 文件不会离开您的机器 |
| JPEG质量控制 | 固定或受限 | 完整1–100质量范围 |
| 输出尺寸 | 固定或受服务限制 | 任意宽度和高度 |
| CSS渲染 | 基本,不一致 | 完整CSS 1/2支持 |
| 实时URL输入 | 有限;速率受限 | 无限URL,您自己的带宽 |
| 自动化 | 仅手动操作 | 命令行、.bat、任务计划程序、ActiveX |
| 服务器部署 | 不可能 | 专为服务器设计,无GUI |
| 需要互联网 | 是 | 否(除获取远程URL外) |
转换器使用自有渲染引擎来解析HTML和CSS。服务器上无需安装Chrome、Firefox或任何浏览器。这消除了浏览器更新问题,减少了服务器资源占用,并避免了无头浏览器自动化的不稳定性。
Total HTML Converter X专为无人值守使用而设计。没有GUI窗口,没有对话框,没有确认提示。它从命令行静默运行,或作为服务的一部分运行 — 正是生产服务器所需要的。
设置质量、设置尺寸、设置是否合并多页输出。每次调用对相同输入产生相同结果。无版本漂移,Chrome更新后不会有渲染意外。
同一命令行工具可将HTML转换为PDF、DOC、XLS、TIFF、JPG、RTF、TXT等格式。一次安装即可满足所有HTML转换需求。将-c JPEG改为-c PDF或-c TIFF,即可获得具有相同批处理和自动化功能的备用输出。
Windows 7/8/10/11 • Server 2008/2012/2016/2019/2022
"大约一年前,我们用Total HTML Converter X替换了基于Puppeteer的截图流水线。Puppeteer配置在Chrome更新后需要不断照看,每个工作进程消耗约400 MB的RAM。CoolUtils命令行只占用一小部分资源,从不因更新而损坏,并产生一致的JPG输出。我们每晚渲染约40,000个产品页面,没有一次失败。"
Marek Dvorak Senior Backend Engineer
"我们的监管机构要求我们将网页归档为带时间戳的图像快照。我编写了一个小型.bat脚本,从CSV中提取URL列表,并对每个URL运行HTMLConverter.exe,输出的JPG以日期命名。它在Windows Server 2019机器上运行,使用百分之几的CPU,无论脚本何时运行,都能产生干净、外观一致的截图。"
Janelle Foster Compliance Manager
"我将ActiveX接口集成到我们的PHP内部网中,将HTML报表页面渲染为JPG预览。COM调用大约花了十行代码。90% JPEG质量下的输出非常出色,尺寸标志让我能精确匹配缩略图网格。我唯一希望的是有Linux版本,但在Windows后端,它完全满足了我们的需求。"
Rohan Mehta Full-Stack Developer
HTMLConverter.exe C:\Pages\*.html C:\Output\ -c JPEG。此命令将源文件夹中的每个HTML文件渲染为同名的JPG。添加-ImgQuality、-ImgWidth或-combine来控制输出。-ImgQuality标志接受1(最小,块状)到100(最高保真度,文件最大)之间的任意值。85到92之间的值通常是网页使用的最佳平衡点。-ImgWidth和/或-ImgHeight以像素为单位设置输出尺寸。转换器会缩放渲染后的页面以适应目标大小,同时保留布局。HTMLConverter.exe https://example.com/page C:\Output\page.jpg -c JPEG。转换器会获取页面(以及任何远程样式表和图像)并将结果渲染为JPG。HTMLConverter.HTMLConverterX)。您可以从.NET、PHP、Python、VBScript、ASP、Ruby、Perl以及任何其他兼容COM的环境中调用它。-combine标志,转换器会将整个HTML文档渲染为一张高JPG,而非分页为多张图像。
string src = @"C:\test\Source.html";
string dest = @"C:\test\Dest.pdf";
var cnv = new HTMLConverterX();
cnv.Convert(src, dest, "-cPDF -log c:\\test\\HTML.log");
if (!string.IsNullOrEmpty(cnv.ErrorMessage))
throw new Exception(cnv.ErrorMessage);
public static class Function1
{
[FunctionName("Function1")]
public static async Task Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
StringBuilder sbLogs = new StringBuilder();
sbLogs.AppendLine("started...");
try
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
var assemblyDirectoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
assemblyDirectoryPath = assemblyDirectoryPath.Substring(0, assemblyDirectoryPath.Length - 4);
var executablePath = $@"{assemblyDirectoryPath}\Converter\HTMLConverterX.exe";
sbLogs.AppendLine(executablePath + "...");
var srcPath = $@"{assemblyDirectoryPath}\src\sample.html";
var outPath = Path.GetTempFileName() + ".pdf";
startInfo.FileName = executablePath;
if (File.Exists(outPath))
{
File.Delete(outPath);
}
if (File.Exists(executablePath) && File.Exists(srcPath))
{
sbLogs.AppendLine("files exists...");
}
else
sbLogs.AppendLine("EXE & source files NOT exists...");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = $"\"{srcPath}\" \"{outPath}\" -cPDF";
using (Process exeProcess = Process.Start(startInfo))
{
sbLogs.AppendLine($"wait...{DateTime.Now.ToString()}");
exeProcess.WaitForExit();
sbLogs.AppendLine($"complete...{DateTime.Now.ToString()}");
}
sbLogs.AppendLine("Conversion complete.");
}
catch (Exception ex)
{
sbLogs.AppendLine(ex.ToString());
}
return new OkObjectResult(sbLogs);
}
}
dim C
Set C=CreateObject("HTMLConverter.HTMLConverterX")
C.Convert "c:\source.html", "c:\dest.jpg", "-cJPG -log c:\html.log"
C.Convert "https://www.coolutils.com/", "c:\URL Page.pdf", "-cPDF -log c:\html.log"
Response.Write C.ErrorMessage
set C = nothing
dim C
Set C=CreateObject("HTMLConverter.HTMLConverterX")
Response.Clear
Response.AddHeader "Content-Type", "binary/octet-stream"
Response.AddHeader "Content-Disposition", "attachment; filename=test.pdf"
Response.BinaryWrite C.ConvertToStream("C:\www\ASP\Source.html", "C:\www\ASP", "-cpdf -log c:\html.log")
set C = nothing
$src="C:\\test\\test.html";
$dest="C:\\test\\test.pdf";
if (file_exists($dest)) unlink($dest);
$c= new COM("HTMLConverter.HTMLConverterX");
$c->convert($src,$dest, "-cPDF -log c:\\HTML.log");
if (file_exists($dest)) echo "OK"; else echo "fail:".$c->ErrorMessage;
require 'win32ole'
c = WIN32OLE.new('HTMLConverter.HTMLConverterX')
src = "C:\\test\\test.html"
dest = "C:\\test\\test.pdf"
c.convert(src, dest, "-cPDF -log c:\\test\\HTML.log")
if not File.exist?(dest)
puts c.ErrorMessage
end
import win32com.client
import os.path
c = win32com.client.Dispatch("HTMLConverter.HTMLConverterX")
src = "C:\\test\\test.html"
dest = "C:\\test\\test.pdf"
c.convert(src, dest, "-cPDF -log c:\\test\\HTML.log")
if not os.path.exists(dest):
print(c.ErrorMessage)
uses Dialogs, Vcl.OleAuto;
var
c: OleVariant;
begin
c := CreateOleObject('HTMLConverter.HTMLConverterX');
c.Convert('c:\test\source.html', 'c:\test\dest.pdf', '-cPDF -log c:\test\HTML.log');
if c.ErrorMessage <> '' then
ShowMessage(c.ErrorMessage);
end;
var c = new ActiveXObject("HTMLConverter.HTMLConverterX");
c.Convert("C:\\test\\source.html", "C:\\test\\dest.pdf", "-cPDF");
if (c.ErrorMessage != "")
alert(c.ErrorMessage)
use Win32::OLE; my $src = "C:\\test\\test.html"; my $dest = "C:\\test\\test.pdf"; my $c = CreateObject Win32::OLE 'HTMLConverter.HTMLConverterX'; $c->convert($src, $dest, "-cPDF -log c:\\test\\HTML.log"); print $c->ErrorMessage if -e $dest;