Chef:
Pendant le processus de distribution, Java est souvent utilisé pour convertir les documents de la série Office en PDF et utilise généralement OpenOffice + JodConverter fourni par Microsoft pour convertir des documents.
OpenOffice a à la fois la version Windows et la version Linux. Ne vous inquiétez pas que l'environnement de production soit un système Linux.
1. OpenOffice dépend du pot, prenez Maven à titre d'exemple:
<dependency> <proupId> com.artofsolving </rom grouped> <Artifactid> jodConverter </ artifactid> <version> 2.2.1 </ version> </ Dependency> <Dendency> <proupId> org.openoffice </prouprid> <ptefactid> JURT </ artifactid> <version> 3.0.1 </DERNIFRATION> </Dependance> <GroupId> org.OpenOffice </rom grouped> <ArtifActid> ridl </ artifactId> <DERSE> 3.0.1 </ version> </ Dependency> <Dedency> <ProupId> org.OpenOffice </proupId> <ArtefactId> JUH </ Artifactid> <version> 3.0.1 </preendice> </pedency> </sendency> </preentency> <ArtefactId> unOil </etefactive> <version> 3.0.1 </ version> </dependency> <! - JodConverter2.2.1 doit s'appuyer sur SLF4J-JDK14, sinon les journaux rapporteront une erreur dans le code source. C'est un problème très faible -> <dependency> <proupId> org.slf4j </romproudId> <Artifactid> SLF4J-JDK14 </ ArtiFactId> <Dersion> 1.4.3 </DERNIFROITE> </ Dependency>
2. Pour télécharger directement le code, vous devez écouter le port 8100 de l'application OpenOffice.
public void convert (fichier sourcefile, fichier ciblefile) {try {// 1: ouvrez la connexion openofficeConnection connexion = new socketopenofficeConnection (8100); connection.connect (); DocumentConverter Converter = new OpenOfficeDocumentConverter (connexion); // 2: Obtenez Format DocumentFormatRegistry Factory = new BasicDocumentFormatRegistry (); DocumentFormat InputDocumentFormat = Factory .GetFormatByFileExtension (GetExtensionName (sourceFile.getAbsolutePath ())); DocumentFormat OutputDocumentFormat = Factory .GetFormatByFileExtension (GetExtensionName (TargetFile.getAbsolutePath ())); // 3: Exécuter le convertisseur de conversion.Convert (sourcefile, inputDocumentFormat, TargetFile, OutputDocumentFormat); } catch (connectException e) {log.info ("Conversion de document a échoué"); }}3. Remarque: JodConverter rapportera une erreur après la conversion du document xxx.docx après la version 2007. Tout le monde sait que le suffixe 03 est xxx.doc. La version 07 sera xxx.docx.
Vérification du code source JodConverter, il est constaté que DocumentFormat ne prend pas en charge le format xxx.docx. BasicDocumentFormatRegistry. Public DocumentFormat GetFormatByFileExtension (String Extension) est pris en charge par défaut. Le format DOC est utilisé.
Code source de classe BasicDocumentFormatRegistry
//! Vous pouvez le redistribuer et / ou // le modifier en vertu des termes de la licence GNU moins publique // publiée par la Free Software Foundation; soit // version 2.1 de la licence, soit (à votre option) toute version ultérieure. // // Cette bibliothèque est distribuée dans l'espoir qu'elle sera utile, // mais sans aucune garantie; Sans même la garantie implicite de // de qualité marchande ou d'adéquation dans un but particulier. Voir la licence publique GNU // Le moins grand public pour plus de détails. // http://www.gnu.org/copyleft/lesser.html // package com.artofsolving.jodconverter; import java.util.arraylist; Importer java.util.iterator; Importer java.util.list; classe publique BasicDocumentFormatRegistry implémente documentFormatRegistry {private list / * <documentFormat> * / documentFormats = new ArrayList (); public void addDocumentFormat (documentFormat DocumentFormat) {documentFormats.Add (documentFormat); } List protégé / * <Comourumformat> * / getDocumentFormats () {return documentFormats; } / ** * @Param Extension Le fichier Extension * @return le documentFormat pour cette extension, ou null si l'extension n'est pas mappée * / public documentFormat getformatByFileExtension (String Extension) {if (extension == null) {return null; } String LowereXtension = Extension.tolowerCase (); for (iterator it = documentFormats.Itator (); it.hasnext ();) {documentFormat format = (documentFormat) it.next (); if (format.getFileExtension (). equals (LoweRextension)) {return format; }} return null; } public DocumentFormat GetFormatByMiMetype (String mimeType) {for (iterator it = documentFormats.iterator (); it.hasnext ();) {documentFormat format = (documentFormat) it.next (); if (format.getMiMetype (). equals (mimeType)) {return format; }} return null; }} Les formats de fichiers pris en charge dans la classe d'implémentation par défaut par défaut DocumentFormatRegistry sont les suivants
//! Vous pouvez le redistribuer et / ou // le modifier en vertu des termes de la licence GNU moins publique // publiée par la Free Software Foundation; soit // version 2.1 de la licence, soit (à votre option) toute version ultérieure. // // Cette bibliothèque est distribuée dans l'espoir qu'elle sera utile, // mais sans aucune garantie; Sans même la garantie implicite de // de qualité marchande ou d'adéquation dans un but particulier. Voir la licence publique GNU // Le moins grand public pour plus de détails. // http://www.gnu.org/copyleft/lesser.html // package com.artofsolving.jodconverter; classe publique defaultDocumentFormatRegistry étend BasicDocumentFormatRegistry {public defaultDocumentFormatRegistry () {final documentFormat pdf = new DocumentFormat ("Portable Document Format", "Application / PDF", "PDF"); pdf.setExportFilter (documentFamily.Drawing, "Draw_pdf_export"); pdf.setExportFilter (documentFamily.presentation, "impress_pdf_export"); pdf.setExportFilter (documentFamily.spreadsheet, "calc_pdf_export"); pdf.setExportFilter (documentFamily.Text, "writer_pdf_export"); addDocumentFormat (PDF); Final DocumentFormat swf = new DocumentFormat ("Macromedia flash", "application / x-shockwave-flash", "SWF"); swf.setExportFilter (documentFamily.Drawing, "Draw_flash_export"); swf.setExportFilter (documentFamily.presentation, "impression_flash_export"); addDocumentFormat (SWF); Final DocumentFormat xhtml = nouveau documentFormat ("xhtml", "application / xhtml + xml", "xhtml"); xhtml.setExportFilter (documentFamily.presentation, "Xhtml Impress Fichier"); xhtml.setExportFilter (documentFamily.spreadsheet, "fichier xhtml calc"); xhtml.setExportFilter (documentFamily.Text, "Fichier d'écrivain xhtml"); addDocumentFormat (xhtml); // html est traité comme du texte lorsqu'il est fourni comme entrée, mais en tant que sortie, il est également // disponible pour l'exportation de feuille de calcul et de formats de présentation Final DocumentFormat html = nouveau documentFormat ("html", documentFamily.text, "text / html", "html"); html.setExportFilter (documentFamily.presentation, "impress_html_export"); html.setExportFilter (documentFamily.spreadsheet, "html (starcalc)"); html.setExportFilter (documentFamily.Text, "html (starwriter)"); addDocumentFormat (html); Final DocumentFormat ODT = new DocumentFormat ("OpenDocument Text", documentFamily.Text, "Application / Vnd.oasis.OpenDocument.Text", "ODT"); ODT.SetExportFilter (documentFamily.Text, "Writer8"); addDocumentFormat (ODT); Final DocumentFormat sxw = new DocumentFormat ("OpenOffice.org 1.0 Text Document", DocumentFamily.Text, "Application / vnd.sun.xml.writer", "sxw"); sxw.setExportFilter (documentFamily.Text, "StarOffice XML (écrivain)"); addDocumentFormat (sxw); Final DocumentFormat Doc = new DocumentFormat ("Microsoft Word", documentFamily.Text, "Application / Mword", "Doc"); doc.setExportFilter (documentFamily.Text, "MS Word 97"); addDocumentFormat (doc); Final DocumentFormat rtf = new DocumentFormat ("Rich Text Format", documentFamily.Text, "Text / RTF", "RTF"); rtf.setExportFilter (documentFamily.Text, "Rich Text Format"); addDocumentFormat (RTF); Final DocumentFormat WPD = new DocumentFormat ("WordPerfect", documentFamily.Text, "Application / WordPerfect", "WPD"); addDocumentFormat (WPD); Final DocumentFormat txt = new DocumentFormat ("Plain Text", documentFamily.Text, "Text / Plain", "txt"); // Définit Filtername sur "Text" pour empêcher OOO de Tryign d'afficher la boîte de dialogue "ASCII Filter Options" // Alternativement FilterName pourrait être "Text (codé)" et filterOptions utilisés pour définir l'encodage si nécessaire txt.setImportOption ("filterName", "text"); txt.setExportFilter (documentFamily.Text, "texte"); addDocumentFormat (txt); Final DocumentFormat wikitext = new DocumentFormat ("MediaWiki wikitext", "text / x-wiki", "wiki"); wikitext.setExportFilter (documentFamily.Text, "MediaWiki"); addDocumentFormat (wikitext); Final DocumentFormat ODS = nouveau documentFormat ("OpenDocument Spreadsheet", documentFamily.spreadsheet, "Application / vnd.oasis.openDocument.spreadsheet", "ods"); ods.setExportFilter (documentFamily.spreadsheet, "calc8"); addDocumentFormat (OD); Final DocumentFormat sxc = new DocumentFormat ("OpenOffice.org 1.0 Spreadsheet", documentFamily.spreadsheet, "Application / vnd.sun.xml.calc", "sxc"); sxc.setExportFilter (documentFamily.spreadsheet, "StarOffice Xml (calc)"); addDocumentFormat (sxc); Final DocumentFormat xls = new DocumentFormat ("Microsoft Excel", documentFamily.spreadsheet, "application / vnd.ms-excel", "xls"); xls.setExportFilter (documentFamily.spreadsheet, "MS Excel 97"); addDocumentFormat (xls); Final DocumentFormat CSV = new DocumentFormat ("CSV", documentFamily.spreadsheet, "Text / CSV", "CSV"); csv.setImportOption ("filterame", "text - txt - csv (starcalc)"); CSV.SetImportOption ("FilterOptions", "44,34,0"); // séparateur de champ: ','; Text Delimiter: "" 'CSV.SetExportFilter (documentFamily.spreadsheet, "Text - Txt - CSV (Starcalc)"); CSV.SetExportOption (documentFamily.SpreadSheet, "FilterOptions" DocumentFormat ("Valeurs séparées", documentFamily.Spreadsheet, "TAME / TAB-SEPARAD-VALUES", "TSV"); Text Delimiter: '' '' tsv.setExportFilter (documentFamily.spreadsheet, "text - txt - csv (starcalc)"); tsv.setExportOption (documentFamily.spreadsheet, "filterOptions", "9,34,0"); addDocumentFormat (TSV); Final DocumentFormat ODP = new DocumentFormat ("OpenDocument Présentation", documentFamily.presentation, "Application / vnd.oasis.openDocument.presentation", "ODP"); odp.setExportFilter (documentFamily.presentation, "impression8"); addDocumentFormat (ODP); Final DocumentFormat SXI = new DocumentFormat ("OpenOffice.org 1.0 Présentation", documentFamily.presentation, "Application / vnd.sun.xml.impress", "sxi"); sxi.setExportFilter (documentFamily.presentation, "StarOffice XML (impression)"); addDocumentFormat (sxi); Final DocumentFormat PPT = new DocumentFormat ("Microsoft PowerPoint", documentFamily.presentation, "Application / vnd.ms-PowerPoint", "ppt"); ppt.setExportFilter (documentFamily.presentation, "MS PowerPoint 97"); addDocumentFormat (PPT); Final DocumentFormat ODG = new DocumentFormat ("OpenDocument Drawing", documentFamily.Drawing, "Application / Vnd.oasis.OpenDocument.Graphics", "ODG"); odg.setExportFilter (documentFamily.Drawing, "Draw8"); addDocumentFormat (ODG); Final DocumentFormat svg = new DocumentFormat ("Scalable Vector Graphics", "image / svg + xml", "svg"); svg.setExportFilter (documentFamily.Drawing, "Draw_svg_Export"); addDocumentFormat (SVG); }} Solution: réécrivez la méthode publique DocumentFormat GetFormatByFileExtension (Extension de chaîne) dans la classe BasicDocumentFormatRegistry. Tant que le nom du suffixe contient DOC, utilisez le format DocumentFormat de Doc
//! Vous pouvez le redistribuer et / ou // le modifier en vertu des termes de la licence GNU moins publique // publiée par la Free Software Foundation; soit // version 2.1 de la licence, soit (à votre option) toute version ultérieure. // // Cette bibliothèque est distribuée dans l'espoir qu'elle sera utile, // mais sans aucune garantie; Sans même la garantie implicite de // de qualité marchande ou d'adéquation dans un but particulier. Voir la licence publique GNU // Le moins grand public pour plus de détails. // http://www.gnu.org/copyleft/lesser.html // package com.artofsolving.jodconverter; import java.util.arraylist; Importer java.util.iterator; Importer java.util.list; / ** * Réécriture de BasicDocumentFormatRegistry Document Format * @author huguangjun * / public class BasicDocumentFormatRegistry implémente DocumentFormatRegistry {private list / * <documentFormat> * / documentFormats = new ArrayList (); public void addDocumentFormat (documentFormat DocumentFormat) {documentFormats.Add (documentFormat); } List protégé / * <Comourumformat> * / getDocumentFormats () {return documentFormats; } / ** * @Param Extension * L'extension de fichier * @return le documentFormat pour cette extension, ou null si l'extension * n'est pas mappée * / public documentFormat getformatByFileExtension (String Extension) {if (extension == null) {return null; } // Nom de fichier unifié suffixe 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.Itator (); it.hasnext ();) {documentFormat format = (documentFormat) it.next (); if (format.getFileExtension (). equals (LoweRextension)) {return format; }} return null; } public DocumentFormat GetFormatByMiMetype (String mimeType) {for (iterator it = documentFormats.iterator (); it.hasnext ();) {documentFormat format = (documentFormat) it.next (); if (format.getMiMetype (). equals (mimeType)) {return format; }} return null; }}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.