Líder:
Durante el proceso de distribución, Java a menudo se usa para convertir los documentos de la serie de oficinas en PDF, y generalmente usa OpenOffice+JodConverter proporcionado por Microsoft para convertir documentos.
OpenOffice tiene la versión de Windows y la versión Linux. No se preocupe por que el entorno de producción sea un sistema Linux.
1. OpenOffice depende de JAR, tome Maven como ejemplo:
<Spendency> <MoupRid> COM.ARTOFSOLVING </Groupid> <StarifactId> JodConverter </artifactId> <PROPELLACIÓN> 2.2.1 </Versión> </pendency> <Spendency> <MoupRupid> Org.openofice </GroupId> <AriFactId> Jurt </ArtifactId> <PROPESIDAD> 3.0.1 </Version> </spendency> <MoupRid> org.openOffice </groupid> <artifactid> ridl </artifactid> <versión> 3.0.1 </versión> </pendency> <pendency> <proupid> org.openoffice </groupid> <artifactid> juh </artifactid> <version> 3.0.1 </preion> </pendency> <pendency> <proupid> <artifactID> unil </arfactId> <versión> 3.0.1 </versión> </pendency> <!-JodConverter2.2.1 debe confiar en SLF4J-JDK14, de lo contrario, los registros informarán un error en el código fuente. Es un problema muy bajo-> <pendency> <MoupRId> org.slf4j </groupid> <artifactid> slf4j-jdk14 </arfactid> <versions> 1.4.3 </versión> </pendency>
2. Para cargar directamente el código, debe escuchar el puerto 8100 de la aplicación OpenOffice.
public void Convert (File SourceFile, File TargetFile) {try {// 1: Abra la conexión OpenOfFiCeConnection Connection = new SocketOpenOfficeConnection (8100); Connection.Connect (); DocumentConverter Converter = new OpenOffateCumentConverter (conexión); // 2: Get Format DocumentFormAtRegistry Factory = new BasicDocumentFormAtRegistry (); DocumentFormat inputDocumentFormat = factory .getFormAtByFileExtension (getExtensionName (SourceFile.GetAbSolutePath ())); DocumentFormat outputDocumentFormat = factory .getFormatByFileExtension (getExtensionName (TargetFile.GetAbSOlUtePath ())); // 3: Ejecute el conversión convertidor.convert (fuenteFile, InputDocumentFormat, TargetFile, OutputDocumentFormat); } Catch (ConnectException e) {log.info ("Falló de conversión de documentos"); }}3. Nota: JodConverter informará un error después de convertir el documento xxx.docx después de la versión 2007. Todos saben que el sufijo 03 es xxx.doc. La versión 07 será xxx.docx.
Al ver el código fuente de JodConverter, se encuentra que DocumentFormat no admite el formato XXX.DOCX. BasicDocumentFormAtRegistry. Public DocumentFormat getFormatByFileExtension (String Extension) es compatible de forma predeterminada. Se utiliza el formato DOC.
BasicDocumentFormAtRegistry Class Code Fuente
// // Jodconverter - Java OpenDocument Converter // Copyright (c) 2004-2007 - Mirko nasato <[email protected]> // // Esta biblioteca es software gratuito; Puede redistribuirlo y/o // modificarlo bajo los términos de la licencia GNU Lesser General Public // según lo publicado por Free Software Foundation; ya sea // versión 2.1 de la licencia, o (a su opción) cualquier versión posterior. // // Esta biblioteca se distribuye con la esperanza de que sea útil, // pero sin ninguna garantía; sin siquiera la garantía implícita de // comerciabilidad o aptitud para un propósito particular. Vea la GNU // Licencia pública general menor para obtener más detalles. // http://www.gnu.org/copyleft/lesser.html // paquete com.artofsolving.jodconverter; import java.util.arrayList; import java.util.iterator; import java.util.list; public class BasicDocumentFormAtRegistry implementa documentFormAtRegistry {private list/*<ocumentFormat>*/ documentFormats = new ArrayList (); public void AddDocumentFormat (documentformat documentformat) {documentformats.add (documentformat); } Lista protegida/*<documentformat>*/ getDocumentFormats () {return documentFormats; } / ** * @param Extensión La extensión del archivo * @return el documentformat para esta extensión, o nulo si la extensión no está asignada * / public focumformat getFormatByFileExtension (String Extension) {if (Extension == NULL) {return null; } String lowerextension = extension.tOlowerCase (); for (iterator it = documentFormats.Iterator (); it.hasnext ();) {documentFormat format = (documentformat) it.next (); if (format.getFileExtension (). Equals (Lowerextension)) {Format de retorno; }} return null; } public documentformat getFormatByMiMeType (String mImetype) {for (iterator it = documentFormats.Iterator (); it.hasNext ();) {documentFormat format = (documentFormat) it.next (); if (format.getMimeType (). Equals (mImetype)) {Format de retorno; }} return null; }}
Los formatos de archivo admitidos en la clase de implementación predeterminada DefaultDocumentFormAtregistry son los siguientes
// // Jodconverter - Java OpenDocument Converter // Copyright (c) 2004-2007 - Mirko nasato <[email protected]> // // Esta biblioteca es software gratuito; Puede redistribuirlo y/o // modificarlo bajo los términos de la licencia GNU Lesser General Public // según lo publicado por Free Software Foundation; ya sea // versión 2.1 de la licencia, o (a su opción) cualquier versión posterior. // // Esta biblioteca se distribuye con la esperanza de que sea útil, // pero sin ninguna garantía; sin siquiera la garantía implícita de // comerciabilidad o aptitud para un propósito particular. Vea la GNU // Licencia pública general menor para obtener más detalles. // http://www.gnu.org/copyleft/lesser.html // paquete com.artofsolving.jodconverter; clase pública DefaultDocumentFormAtRegistry extiende BasicDocumentFormAtRegistry {public DefaultDocumentFormAtRegistry () {final documentFormat pdf = new DocumentFormat ("formato de documento portátil", "Application/PDF", "PDF"); pdf.setExportFilter (documentfamily.drawing, "draw_pdf_export"); pdf.setExportFilter (documentFamily.Presentation, "Impres_pdf_export"); pdf.setExportFilter (documentfamily.speadsheet, "calc_pdf_export"); pdf.setExportFilter (documentFamily.Text, "Writer_pdf_export"); addDocumentFormat (PDF); DocumentFormat final SWF = new DocumentFormat ("Macromedia Flash", "Application/X-Shockwave-Flash", "SWF"); swf.setExportFilter (documentfamily.drawing, "draw_flash_export"); swf.setExportFilter (documentfamily.presentation, "imprescle_flash_export"); addDocumentFormat (SWF); DocumentFormat final xhtml = nuevo documentformat ("xhtml", "aplicación/xhtml+xml", "xhtml"); xhtml.setExportFilter (documentfamily.presentation, "xhtml impresión archivo"); xhtml.setExportFilter (documentfamily.spreadsheet, "archivo xhtml calt"); xhtml.setExportFilter (documentfamily.text, "archivo de escritor xhtml"); addDocumentFormat (xhtml); // html se trata como texto cuando se suministra como entrada, pero como salida también está // disponible para exportar hojas de cálculo y formatos de presentación finales documentformat html = new Documentformat ("html", documentfamily.text, "text/html", "html"); html.setExportFilter (documentFamily.Presentation, "Impres_html_export"); html.setExportFilter (documentfamily.speadsheet, "html (starCalc)"); html.setExportFilter (documentfamily.text, "html (starwriter)"); addDocumentFormat (html); DocumentFormat final ODT = new Documeformat ("OpenDocument Text", DocumentFamily.Text, "Aplicación/vnd.oasis.openDocument.text", "ODT"); Odt.setExportFilter (documentFamily.Text, "Writer8"); addDocumentFormat (ODT); DocumentFormat final sxw = new Documeformat ("OpenOffice.org 1.0 Documento de texto", documentFamily.Text, "Aplicación/vnd.sun.xml.writer", "sxw"); sxw.setExportFilter (documentFamily.Text, "StarOffice XML (escritor)"); addDocumentFormat (SXW); DocumentFormat final doc = new DocumentFormat ("Microsoft Word", DocumentFamily.Text, "Application/MSword", "Doc"); doc.setExportFilter (documentFamily.Text, "MS Word 97"); addDocumentFormat (DOC); DocumentFormat final rtf = new DocumentFormat ("Formato de texto rico", documentFamily.Text, "Text/RTF", "RTF"); rtf.setExportFilter (documentfamily.text, "formato de texto rico"); addDocumentFormat (RTF); DocumentFormat final wpd = new DocumentFormat ("WordPerfect", DocumentFamily.Text, "Application/WordPerfect", "WPD"); addDocumentFormat (WPD); DocumentFormat final txt = new DocumentFormat ("Text sin formato", documentFamily.Text, "Text/Plain", "txt"); // Configure el nombre de Filterne en "Texto" para evitar que OOO se tryign para mostrar el cuadro de diálogo "Opciones de filtro ASCII" // Alternativamente, el nombre de Filtername podría ser "Texto (codificado)" y FilterOptions utilizados para establecer la codificación si es necesario txt.setImportOption ("filtername", "text"); txt.setExportFilter (documentFamily.Text, "texto"); addDocumentFormat (txt); DocumentFormat final wikitext = new DocumentFormat ("MediaWiki Wikitext", "Text/X-Wiki", "Wiki"); wikitext.setExportFilter (documentFamily.Text, "MediaWiki"); addDocumentFormat (wikitext); DocumentFormat final ODS = new Documeformat ("Hoja de cálculo de OpenDocument", DocumentFamily.Spreadsheet, "Aplicación/vnd.oasis.openDocument.spreadsheet", "ODS"); ODS.SetExportFilter (documentfamily.spreadsheet, "calc8"); addDocumentFormat (ODS); DocumentFormat final sxc = new DocumentFormat ("OpenOffice.org 1.0 Hoja de cálculo", documentFamily.sPreadsheet, "Application/vnd.sun.xml.calc", "sxc"); sxc.SetExportFilter (documentfamily.speadsheet, "StarOffice XML (Calc)"); addDocumentFormat (SXC); DocumentFormat final XLS = nuevo documentformat ("Microsoft Excel", DocumentFamily.SpreadSheet, "Aplicación/VND.MS-Excel", "XLS"); xls.setExportFilter (documentfamily.speadsheet, "MS Excel 97"); addDocumentFormat (XLS); DocumentFormat final csv = new DocumentFormat ("CSV", DocumentFamily.SpreadSheet, "Text/CSV", "CSV"); csv.setImportOption ("filtername", "texto - txt - csv (starCalc)"); csv.setImportOption ("FilterOptions", "44,34,0"); // Separador de campo: ','; Text Delimiter: '"' csv.setExportFilter (documentfamily.speadsheet," text - txt - csv (starCalc) "); csv.setExportOption (documentfamily.spreadsheet," filterOptions "," 44,34,0 "); addocumentformat (csv); final de documentformat tsv = nuevo document Valores ", documentfamily.sPreadsheet," text/tab -separated -values "," tsv "); tsv.setImportOption (" filtername "," text - txt - csv (starCalc) "); tsv.setImportOption (" FilterOptions "," 9,34,0 "); // Separador de campo: '/t; tsv.setExportFilter (documentfamily.speadsheet, "Text - txt - csv (starCalc)"); tsv.setExportOption (documentfamily.speadsheet, "filterOptions", "9,34,0"); addDocumentFormat (TSV); DocumentFormat final ODP = nuevo documentFormat ("Presentación de OpenDocument", DocumentFamily.Presentation, "Aplicación/VND.OASIS.OPENDOCUMENT.Presentation", "ODP"); ODP.setExportFilter (documentfamily.presentation, "impresor8"); addDocumentFormat (ODP); DocumentFormat final sxi = new DocumentFormat ("OpenOffice.org 1.0 Presentación", DocumentFamily.Presentation, "Aplicación/vnd.sun.xml.impress", "sxi"); sxi.setExportFilter (DocumentFamily.Presentation, "StarOffice XML (impresión)"); addDocumentFormat (SXI); DocumentFormat final ppt = new DocumentFormat ("Microsoft PowerPoint", DocumentFamily.Presentation, "Aplicación/VND.MS-PowerPoint", "PPT"); ppt.setExportFilter (DocumentFamily.Presentation, "MS PowerPoint 97"); addDocumentFormat (PPT); DocumentFormat final ODG = new Documeformat ("OpenDocument Drawing", DocumentFamily.Drawing, "Application/VND.Oasis.OpenDocument.Graphics", "ODG"); odg.setExportFilter (documentfamily.drawing, "draw8"); addDocumentFormat (ODG); DocumentFormat final svg = new DocumentFormat ("Scalable Vector Graphics", "Image/SVG+XML", "SVG"); svg.setExportFilter (documentfamily.drawing, "draw_svg_export"); addDocumentFormat (SVG); }}
SOLUCIÓN: Reescribe el método público de documentformat getFormatByFileExtension (extensión de cadena) en la clase BasicDocumentFormAtRegistry. Mientras el nombre del sufijo contenga DOC, use el formato de formato de documento de DOC
// // Jodconverter - Java OpenDocument Converter // Copyright (c) 2004-2007 - Mirko nasato <[email protected]> // // Esta biblioteca es software gratuito; Puede redistribuirlo y/o // modificarlo bajo los términos de la licencia GNU Lesser General Public // según lo publicado por Free Software Foundation; ya sea // versión 2.1 de la licencia, o (a su opción) cualquier versión posterior. // // Esta biblioteca se distribuye con la esperanza de que sea útil, // pero sin ninguna garantía; sin siquiera la garantía implícita de // comerciabilidad o aptitud para un propósito particular. Vea la GNU // Licencia pública general menor para obtener más detalles. // http://www.gnu.org/copyleft/lesser.html // paquete com.artofsolving.jodconverter; import java.util.arrayList; import java.util.iterator; import java.util.list; / *** Reescribir el formato de documento BasicDocumentFormAtRegistry* @author huguangjun*/ public class BasicDocumentFormAtRegistry implementa documentFormAtRegistry {private list/* <documentformat>*/ documentFormats = new ArrayList (); public void AddDocumentFormat (documentformat documentformat) {documentformats.add (documentformat); } Lista protegida/ * <documentformat> */ getDocumentFormats () {return documentFormats; } / ** * @param extensión * La extensión del archivo * @return el documentformat para esta extensión, o nulo si la extensión * no está asignada * / public documentformat getFormatByFileExtension (String Extension) {if (Extension == NULL) {return null; } // sufijo de nombre de archivo unificado if (extension.indexof ("doc")> = 0) {extension = "doc"; } if (extension.IndexOf ("ppt")> = 0) {extension = "ppt"; } if (extension.IndexOf ("xls")> = 0) {extension = "xls"; } String lowerextension = extension.tOlowerCase (); for (iterator it = documentFormats.Iterator (); it.hasnext ();) {documentFormat format = (documentformat) it.next (); if (format.getFileExtension (). Equals (Lowerextension)) {Format de retorno; }} return null; } public documentformat getFormatByMiMeType (String mImetype) {for (iterator it = documentFormats.Iterator (); it.hasNext ();) {documentFormat format = (documentFormat) it.next (); if (format.getMimeType (). Equals (mImetype)) {Format de retorno; }} return null; }}
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.