C# 使用 LibreOffice 将 PDF 转换为图片
要使用 C# 将 PDF 转换为图像,需要使用 LibreOffice 的 UNO API。以下是一个简单的示例代码,它将 PDF 转换为 PNG 图像。
首先,需要安装 LibreOffice 并启用 UNO API。然后,需要添加对 LibreOffice 的 COM 引用。可以在 Visual Studio 中右键单击项目,选择'添加引用',然后在'COM'选项卡中选择'LibreOffice 7.1 Type Library'。
接下来,需要编写以下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using uno.util;
using unoidl.com.sun.star.beans;
using unoidl.com.sun.star.frame;
using unoidl.com.sun.star.lang;
using unoidl.com.sun.star.style;
using unoidl.com.sun.star.text;
using unoidl.com.sun.star.uno;
using unoidl.com.sun.star.view;
namespace PdfToImage
{
class Program
{
static void Main(string[] args)
{
const string pdfFile = 'input.pdf';
const string imageFile = 'output.png';
// Create a new LibreOffice instance
var xLocalContext = uno.util.Bootstrap.bootstrap();
var xFactory = (XMultiServiceFactory)xLocalContext.getServiceManager();
var xDesktop = (XComponentLoader)xFactory.createInstance('com.sun.star.frame.Desktop');
// Load the PDF file
var xProperties = new PropertyValue[1];
xProperties[0] = new PropertyValue();
xProperties[0].Name = 'Hidden';
xProperties[0].Value = new uno.Any(true);
var xComponent = xDesktop.loadComponentFromURL('file:///' + Path.GetFullPath(pdfFile).Replace('\', '/'), '_blank', 0, xProperties);
// Export the first page of the PDF as an image
var xPageCursor = (XPageCursor)xComponent.getCurrentController();
xPageCursor.jumpToPage(0);
var xGraphicProvider = (XGraphicProvider)xComponent.getGraphicProvider();
var xGraphic = (XGraphic)xGraphicProvider.queryGraphic(new PropertyValue[0], 0, xPageCursor);
var xExportFilter = (XFilter) xFactory.createInstance('com.sun.star.graphic.GraphicExportFilter');
var xExportProperties = new PropertyValue[1];
xExportProperties[0] = new PropertyValue();
xExportProperties[0].Name = 'MimeType';
xExportProperties[0].Value = new uno.Any('image/png');
xExportFilter.setSourceGraphic(xGraphic);
xExportFilter.filter(xExportProperties, new uno.XOutputStreamWrapper(new FileStream(imageFile, FileMode.Create)));
// Close the LibreOffice instance
((XCloseable)xComponent).close(true);
}
}
}
代码加载 PDF 文件并将第一页导出为 PNG 图像。输出图像的文件名和路径可以在代码中进行更改。
原文地址: https://www.cveoy.top/t/topic/osWA 著作权归作者所有。请勿转载和采集!