听起来您需要一个库来支持通过 Windows 服务或控制台应用程序进行光栅化和渲染您感兴趣的各种文件格式。您可以查看Leadtools.Document.sdk nuget 包(请注意我是该供应商的员工)。
我继续组织了一个项目来测试它,它对我有用。我可以打印 sdk 支持的 150 多种文件格式中的任何一种。有关支持的文件格式的完整列表,请参阅here。
这里是示例代码:
using (var document = DocumentFactory.LoadFromFile(@"filename.docx", new LoadDocumentOptions()))
PrintDocument(document);
static void PrintDocument(LEADDocument document)
{
using (var printDocument = new PrintDocument())
{
printDocument.PrinterSettings.MinimumPage = 1;
printDocument.PrinterSettings.MaximumPage = document.Pages.Count;
printDocument.PrinterSettings.FromPage = 1;
printDocument.PrinterSettings.ToPage = document.Pages.Count;
printDocument.PrinterSettings.PrinterName = "Adobe PDF";
printDocument.DefaultPageSettings = new PageSettings();
var pageNumber = printDocument.PrinterSettings.FromPage;
printDocument.PrintPage += (object sender, PrintPageEventArgs e) => PrintPageHandler(e, document, printDocument, ref pageNumber);
printDocument.Print();
}
}
private static void PrintPageHandler(PrintPageEventArgs e, LEADDocument document, PrintDocument printDocument, ref int pageNumber)
{
PrintPage(document, pageNumber, e);
pageNumber++;
e.HasMorePages = (pageNumber <= printDocument.PrinterSettings.ToPage);
if (!e.HasMorePages)
pageNumber = 1;
}
static void PrintPage(LEADDocument document, int pageNumber, PrintPageEventArgs e)
{
var page = document.Pages[pageNumber - 1];
// Get page size in pixels
var pixelSize = page.SizeToPixels(page.Size);
// Convert to DPI
var size = LeadSizeD.Create(pixelSize.Width * 96.0 / page.Resolution, pixelSize.Height * 96.0 / page.Resolution).ToLeadSize();
// Fit in the margin bounds
var destRect = LeadRect.Create(e.MarginBounds.X, e.MarginBounds.Y, e.MarginBounds.Width, e.MarginBounds.Height);
destRect = RasterImage.CalculatePaintModeRectangle(size.Width, size.Height, destRect, RasterPaintSizeMode.Fit, RasterPaintAlignMode.Center, RasterPaintAlignMode.Center);
// Get the page image
using (var rasterImage = page.GetImage())
using (var bitmap = RasterImageConverter.ConvertToImage(rasterImage, ConvertToImageOptions.None))
e.Graphics.DrawImage(bitmap, destRect.X, destRect.Y, destRect.Width, destRect.Height);
}