gpt4 book ai didi

pdf - OpenOffice PDF 导出库

转载 作者:行者123 更新时间:2023-12-04 21:27:07 27 4
gpt4 key购买 nike

我正在寻找一个可以将文本和图形输出渲染到 PDF 文档的库。 (Cairo 当然是一个选项。)我想知道 OpenOffice 如何编写 PDF 文件,看看我是否可以使用相同的库。 OpenOffice 使用什么库来导出 PDF?

编辑:我正在寻找 C 或 C++ 库。

最佳答案

我到处寻找如何使用 OpenOffice 将任何文档导出为 PDF。我终于在 OpenOffice 论坛中找到了一个隐藏的帖子,它让我在那里达到了 90%。这是我的 100% 解决方案。适用于 OpenOffice 3.1。您必须安装 OpenOffice 才能使用此代码。您必须包括对 cli_basetypes、cli_cppuhelper、cli_oootypes、cli_ure、cli_uretypes 的引用。这些 dll 引用可在 OpenOffice SDK 中找到。抱歉,但这是在 C#.. 中,而不是 C/C++。 HTH某人。

using unoidl.com.sun.star.lang;using unoidl.com.sun.star.uno;using unoidl.com.sun.star.bridge;using unoidl.com.sun.star.frame;using unoidl.com.sun.star.beans;public static void ConvertToPDF(string inputFile, string outputFile)        {            if (ConvertExtensionToFilterType(Path.GetExtension(inputFile)) == null)                throw new InvalidProgramException("Unknown file type for OpenOffice. File = " + inputFile);            StartOpenOffice();            //Get a ComponentContext            unoidl.com.sun.star.uno.XComponentContext xLocalContext =               uno.util.Bootstrap.bootstrap();            //Get MultiServiceFactory            unoidl.com.sun.star.lang.XMultiServiceFactory xRemoteFactory =               (unoidl.com.sun.star.lang.XMultiServiceFactory)               xLocalContext.getServiceManager();            //Get a CompontLoader            XComponentLoader aLoader =               (XComponentLoader)xRemoteFactory.createInstance("com.sun.star.frame.Desktop");            //Load the sourcefile            XComponent xComponent = null;            try            {                xComponent = initDocument(aLoader,                   PathConverter(inputFile), "_blank");                //Wait for loading                while (xComponent == null)                {                    System.Threading.Thread.Sleep(1000);                }                // save/export the document                saveDocument(xComponent, inputFile, PathConverter(outputFile));            }            catch { throw; }            finally { xComponent.dispose(); }        }        private static void StartOpenOffice()        {            Process[] ps = Process.GetProcessesByName("soffice.exe");            if (ps != null)            {                if (ps.Length > 0)                    return;                else                {                    Process p = new Process();                    p.StartInfo.Arguments = "-headless -nofirststartwizard";                    p.StartInfo.FileName = "soffice.exe";                    p.StartInfo.CreateNoWindow = true;                    bool result = p.Start();                    if (result == false)                        throw new InvalidProgramException("OpenOffice failed to start.");                }            }            else            {                throw new InvalidProgramException("OpenOffice not found.  Is OpenOffice installed?");            }        }        private static XComponent initDocument(XComponentLoader aLoader, string file, string target)        {            PropertyValue[] openProps = new PropertyValue[1];            openProps[0] = new PropertyValue();            openProps[0].Name = "Hidden";            openProps[0].Value = new uno.Any(true);            XComponent xComponent = aLoader.loadComponentFromURL(               file, target, 0,               openProps);            return xComponent;        }        private static void saveDocument(XComponent xComponent, string sourceFile, string destinationFile)        {            PropertyValue[] propertyValues = new PropertyValue[2];            propertyValues = new PropertyValue[2];            // Setting the flag for overwriting             propertyValues[1] = new PropertyValue();            propertyValues[1].Name = "Overwrite";            propertyValues[1].Value = new uno.Any(true);            //// Setting the filter name             propertyValues[0] = new PropertyValue();            propertyValues[0].Name = "FilterName";            propertyValues[0].Value = new uno.Any(ConvertExtensionToFilterType(Path.GetExtension(sourceFile)));            ((XStorable)xComponent).storeToURL(destinationFile, propertyValues);        }        private static string PathConverter(string file)        {            if (file == null || file.Length == 0)                throw new NullReferenceException("Null or empty path passed to OpenOffice");            return String.Format("file:///{0}", file.Replace(@"\", "/"));        }        public static string ConvertExtensionToFilterType(string extension)        {            switch (extension)            {                case ".doc":                case ".docx":                case ".txt":                case ".rtf":                case ".html":                case ".htm":                case ".xml":                case ".odt":                case ".wps":                case ".wpd":                    return "writer_pdf_Export";                case ".xls":                case ".xlsb":                case ".ods":                    return "calc_pdf_Export";                case ".ppt":                case ".pptx":                case ".odp":                    return "impress_pdf_Export";                default: return null;            }        }    }

关于pdf - OpenOffice PDF 导出库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1868974/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com