OpenOffice PDF Export Library

匿名 (未验证) 提交于 2019-12-03 02:06:01

问题:

I am looking for a library which will allow me to render text and graphics output onto a PDF document. (Cairo is certainly an option.) I would like to know how OpenOffice writes PDF files to see if I could use the same library. What library is being used by OpenOffice for PDF export?

Edit: I am looking for a C or C++ library.

回答1:

I looked everywhere to find out how to export any document to PDF using OpenOffice. I finally found a buried post in the OpenOffice forums that got me 90% there. Here is my 100% solution. Works with OpenOffice 3.1. You must install OpenOffice to use this code. You must include references to cli_basetypes, cli_cppuhelper, cli_oootypes, cli_ure, cli_uretypes. These dll references are found in the OpenOffice SDK. Sorry, but this is in C#.. not C/C++. HTH someone.

 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;             }         }       } 


回答2:

What language are you working in? There are many PDF libraries out there. Search Stack Overflow for "pdf library [programming language]". There's tons of recommendations already.

OpenOffice uses the Sun PDF library as an extension to import PDFs, but I'm not sure what it uses to export them.



回答3:

PDFCreator has an API that can help you.

http://www.pdfforge.org/forum/open-discussion/3063-api-sdk-pdfcreator



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!