下载Total Excel Converter X,立即开始在服务器上自动化XLSX转PDF转换。
XLSX是可编辑的电子表格格式。布局取决于安装的字体、Excel版本和打印机驱动程序 — 同一文件在不同机器上显示不同。收件人可以更改单元格值、破坏公式或查看您不打算共享的数据。
PDF冻结页面布局。字体被嵌入,结构被锁定,每个阅读器都呈现相同的结果。PDF加密可以控制谁可以查看、打印或复制内容。
在服务器上,这个区别更加重要。没有显示器,没有鼠标,也没有安装Excel。命令行转换器使用自己的解析器读取XLSX文件,应用您的格式化规则,输出完成的PDF — 无需人工干预,不依赖Microsoft Office。
| 功能 | XLSX | |
|---|---|---|
| 可编辑性 | 完全可编辑 | 仅查看和打印 |
| 布局一致性 | 因系统而异 | 处处相同 |
| 字体嵌入 | 否 | 是 |
| 密码保护 | 有限 | 完整(查看、打印、复制控制) |
| 所需阅读器 | Excel或兼容应用 | 任何PDF阅读器(免费) |
| 服务器友好性 | 需要Office或解析器 | 静态文件,无需特殊软件 |
ExcelConverterX.exe C:\Data\report.xlsx C:\Output\report.pdf -cPDFExcelConverterX.exe C:\Data\*.xlsx C:\Output\ -cPDF -PageSize:A4 -LandscapeExcelConverterX.exe C:\Data\*.xlsx C:\Output\ -cPDF -OwnerPassword:secret -UserPassword:open123 -log C:\Logs\excel.log
所有错误消息都会记录到日志文件中。转换器静默退出,因此您的脚本和计划任务可以不间断地运行。
Total Excel Converter X注册了一个COM对象(ExcelConverter.ExcelConverterX),可以从任何支持COM/ActiveX的语言中调用。这样您可以在Web应用程序、ERP系统或数据管道中直接将XLSX转换为PDF,无需启动外部进程。
.NET (C#):
ExcelConverterX cnv = new ExcelConverterX();
cnv.Convert(@"C:\Data\report.xlsx", @"C:\Output\report.pdf",
"-cPDF -PageSize:A4 -log C:\Logs\excel.log");PHP:
$c = new COM("ExcelConverter.ExcelConverterX");
$c->convert("C:\\Data\\report.xlsx", "C:\\Data\\report.pdf",
"-cPDF -log C:\\Logs\\excel.log");Python:
import win32com.client
c = win32com.client.Dispatch("ExcelConverter.ExcelConverterX")
c.convert(r"C:\Data\report.xlsx", r"C:\Data\report.pdf",
"-cPDF -log C:\Logs\excel.log")还支持ASP、Ruby、Pascal、Perl和JavaScript (WSH)。更多示例请参阅产品页面。
转换器使用自己的解析器读取XLSX、XLS、XLSM、ODS、XML及其他电子表格格式。不需要Microsoft Excel。没有图形界面,程序作为控制台进程或COM对象运行,在禁用交互式服务的Windows Server环境中可安全使用。
传递通配符(*.xlsx)即可用一条命令转换文件夹中的所有电子表格。可以将多个XLSX文件合并为一个PDF,或将每个工作表拆分为单独的文件。内置重命名器自动为输出文件名添加计数器或工作表名称。
直接从命令行设置用户密码(打开PDF时需要)和所有者密码(控制打印、复制和编辑权限)。无需手动步骤即可保护财务报告、工资表和合规文档。
通过标志指定纸张大小(A4、Letter、Legal、自定义)、方向和页边距。添加包含页码、日期、文件名或自定义文本的页眉和页脚。自动将宽表格适配页面宽度。
每次转换都将状态和错误写入日志文件。没有消息框,没有弹出窗口,没有用户提示。从您的应用程序监控日志或将其发送到集中式日志系统。
除PDF外,还可将XLSX转换为DOC、DOCX、HTML、CSV、TIFF、JPEG、XML、TXT、ODS、SQL、LaTeX等 — 全部使用相同的命令行语法。一个工具即可覆盖您管道中所需的每种格式。
| 功能 | 在线工具 | Total Excel Converter X |
|---|---|---|
| 文件大小限制 | 10–100 MB | 无限制 |
| 批量转换 | 有限或付费API | 无限制(通配符) |
| 隐私 | 文件上传至云端 | 100%本地处理 |
| PDF加密 | 很少提供 | 内置(用户+所有者密码) |
| 页面布局控制 | 最少 | 完整(大小、页边距、页眉) |
| 服务器集成 | REST API(付费) | COM/ActiveX + 命令行 |
| Office依赖 | 无(云端) | 无(独立解析器) |
| 自动化 | 手动或API调用 | .bat文件 + 任务计划程序 |
| 定价 | 按月订阅 | 一次性服务器许可证 |
"我们每晚处理400多份财务报告。Total Excel Converter X在任务计划程序后台运行,将所有传入的XLSX文件转换为加密PDF并记录所有日志。自从两年前设置以来,完全无需人工干预。"
Daniel Krause DevOps Engineer
"ActiveX集成为我们节省了数周的开发时间。三行PHP代码,我们的内网应用就能即时将上传的电子表格转换为PDF。不依赖Office,没有临时文件清理问题。"
Mariana Costa Senior PHP Developer
"可靠的命令行工具。在我们的Windows Server 2019环境中,批量将XLS和XLSX转换为PDF毫无问题。日志输出清晰,易于与我们的监控系统集成。"
James Whitfield IT Infrastructure Manager
string src="C:\\test\\Source.xlsx";
string dest="C:\\test\\Dest.PDF";
ExcelConverterX Cnv = new ExcelConverterX();
Cnv.Convert(src, dest, "-c PDF -log c:\\test\\Excel.log");
MessageBox.Show("转换完成!");
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\ExcelConverterX.exe";
sbLogs.AppendLine(executablePath + "...");
var msgPath = $@"{assemblyDirectoryPath}\MSG\MSG-1.xlsx";
var outPath = Path.GetTempFileName() + ".pdf";
startInfo.FileName = executablePath;
if (File.Exists(outPath))
{
File.Delete(outPath);
}
if (File.Exists(executablePath) && File.Exists(msgPath))
{
sbLogs.AppendLine("files exists...");
}
else
sbLogs.AppendLine("EXE & MSG files NOT exists...");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = $"{msgPath} {outPath}";
using (Process exeProcess = Process.Start(startInfo))
{
sbLogs.AppendLine($"wait...{DateTime.Now.ToString()}");
exeProcess.WaitForExit();
sbLogs.AppendLine($"complete...{DateTime.Now.ToString()}");
}
int sleepCounter = 10;
while(!File.Exists(outPath) && sleepCounter > 0)
{
System.Threading.Thread.Sleep(1000);
sbLogs.AppendLine("sleep...");
sleepCounter--;
}
if (File.Exists(outPath))
sbLogs.AppendLine("Conversion complete successfully.");
}
catch (Exception ex)
{
sbLogs.AppendLine(ex.ToString());
}
return new OkObjectResult(sbLogs);
}
}
dim C
Set C=CreateObject("ExcelConverter.ExcelConverterX")
C.Convert "c:\test\source.xlsx", "c:\test\dest.pdf", "-cPDF -log c:\test\Excel.log"
Response.Write C.ErrorMessage
set C = nothing
dim C
Set C=CreateObject("ExcelConverter.ExcelConverterX")
Response.Clear
Response.AddHeader "Content-Type", "binary/octet-stream"
Rresponse.AddHeader "Content-Disposition", "attachment; filename=test.pdf"
Response.BinaryWrite c.ConvertToStream("C:\www\ASP\Source.xlsx", "C:\www\ASP", "-cpdf -log c:\html.log")
set C = nothing
$src="C:\\test\\test.XLS";
$dest="C:\\test\\test.CSV";
if (file_exists($dest)) unlink($dest);
$c= new COM("ExcelConverter.ExcelConverterX");
$c->convert($src,$dest, "-c csv -log c:\\test\\xls.log");
if (file_exists($dest)) echo "OK"; else echo "fail:".$c->ErrorMessage;
require 'win32ole'
c = WIN32OLE.new('ExcelConverter.ExcelConverterX')
src="C:\\test\\test.xlsx";
dest="C:\\test\\test.pdf";
c.convert(src,dest, "-c PDF -log c:\\test\\Excel.log");
if not File.exist?(dest)
puts c.ErrorMessage
end
import win32com.client
import os.path
c = win32com.client.Dispatch("ExcelConverter.ExcelConverterX")
src="C:\\test\\test.xlsx";
dest="C:\\test\\test.pdf";
c.convert(src, dest, "-c PDF -log c:\\test\\Excel.log");
if not os.path.exists(file_path):
print(c.ErrorMessage)
uses Dialogs, Vcl.OleAuto;
var
c: OleVariant;
begin
c:=CreateOleObject('ExcelConverter.ExcelConverterX');
C.Convert('c:\test\source.xlsx', 'c:\test\dest.pdf', '-cPDF -log c:\test\Excel.log');
IF c.ErrorMessage<> Then
ShowMessage(c.ErrorMessage);
end;
var c = new ActiveXObject("ExcelConverter.ExcelConverterX");
c.Convert("C:\\test\\source.xlsx", "C:\\test\\dest.pdf", "-c PDF");
if (c.ErrorMessage!="")
alert(c.ErrorMessage)
use Win32::OLE; my $src="C:\\test\\test.XLS"; my $dest="C:\\test\\test.CSV"; my $c = CreateObject Win32::OLE 'ExcelConverter.ExcelConverterX'; $c->convert($src,$dest, "-c csv -log c:\\test\\xls.log"); print $c->ErrorMessage if -e $dest;