Líder:
Durante o processo de distribuição, o Java é frequentemente usado para converter documentos da série Office em PDFs e geralmente usa o OpenOffice+JodConverter fornecido pela Microsoft para converter documentos.
O OpenOffice possui versão do Windows e Linux. Não se preocupe com o ambiente de produção ser um sistema Linux.
1. OpenOffice depende do frasco, tome o Maven como exemplo:
<Depencency> <voundid> com.artofSolving </frupiD> <TRAFACTID> jodconverter </artifactId> <versão> 2.2.1 </versão> </dependency> <pendency> </groupid> org.openOffice </frupId> <stifactId> </ArtifactId> <sipers>.0.1.10 </fipeNOFFICE> </groupid> <stifactid> </ArtifactId> <versão> 3.0.1.10 </groupid> <stifactId> </ArtifactId> <versão> 3.0.1 <groupId>org.openoffice</groupId> <artifactId>ridl</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.openoffice</groupId> <artifactId>juh</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.openoffice</groupId> <TarfactId> Unoil </stifactId> <versão> 3.0.1 </version> </dependency> <!-jodconverter2.2.1 deve contar com Slf4j-jdk14, caso contrário, os logs relatarão um erro no código-fonte. É um problema muito baixo-> <Ependency> <PuerpId> org.slf4j </groupiD> <TRAFACTID> SLF4J-JDK14 </STIFACTID> <Versão> 1.4.3 </versão </pendence>
2. Para fazer o upload diretamente do código, você precisa ouvir a porta 8100 do aplicativo OpenOffice.
public void convert (arquivo fonte do arquivo, arquivo de arquivo de arquivo) {try {// 1: abra a conexão OpenOfficeConnection Connection = new SocketOpeNOfficeConnection (8100); Connection.Connect (); DocumentConverter Converter = new OpenOffordocumentConverter (conexão); // 2: obtenha formato documentformatregistry factory = new BasicDocumentFormatRegistry (); DocumentFormat inputDocumentFormat = Factory .GetFormatByFileExtension (getExtensionName (Sourcefile.getabsolutepath ())); DocumentFormat outputDocumentFormat = Factory .GetFormatByFileExtension (getExtensionName (TargetFile.getAbsolutePath ())); // 3: Execute o conversor de conversão.Convert (Fontefile, InputDocumentFormat, TargetFile, O outputDocumentFormat); } catch (ConnectException e) {log.info ("Falha na conversão do documento"); }}3. NOTA: O JodConverter reportará um erro após a conversão do documento xxx.docx após a versão de 2007. Todo mundo sabe que o sufixo 03 é xxx.doc. A versão 07 será xxx.docx.
Verificando o código -fonte JodConverter, verifica -se que o DocumentFormat não suporta o formato xxx.docx. BasicDocumentFormatRegistry. Public DocumentFormat GetFormatByFileExtension (Extensão da String) é suportada por padrão. O formato do documento é usado.
BasicDocumentFormatRegistry Class Código Fonte
// // jodconverter - java opendocument converter // copyright (c) 2004-2007 - mirko nasato <[email protected]> // // Esta biblioteca é software livre; Você pode redistribuí -lo e/ou // modificá -lo nos termos da licença GNU Lesser em geral //, conforme publicado pela Free Software Foundation; ou // versão 2.1 da licença ou (por sua opção) qualquer versão posterior. // // Esta biblioteca é distribuída na esperança de que seja útil, mas sem qualquer garantia; sem a garantia implícita de // comercialização ou aptidão para uma finalidade específica. Consulte a licença pública geral GNU // menor para obter mais detalhes. // http://www.gnu.org/copyleft/lessher.html // package com.artofsolving.jodconverter; importar java.util.arraylist; importar java.util.iterator; importar java.util.list; classe pública BasicDocumentFormatRegistry implementa DocumentFormatRegistry {Private List/*<DocumentFormat>*/ DocumentFormats = new ArrayList (); public void addDocumentFormat (DocumentFormatFormat) {DocumentFormats.add (DocumentFormat); } Lista protegida/*<DocumentFormat>*/ getDocumentFormats () {return documentFormats; } / ** * Extensão @param A extensão do arquivo * @return the DocumentFormat para esta extensão, ou nulo se a extensão não for mapeada * / public documentFormat getFormatbyfileExtension (extensão da string) {if (extension == null) {return null; } String lowerextension = extension.tolowercase (); for (iterator it = documentFormats.iterator (); it.hasnext ();) {documentFormat format = (documentFormat) it.next (); if (format.getFileExtension (). Iguals (lowerextension)) {Return Format; }} retornar nulo; } public DocumentFormat GetFormatByMimetype (String Mimetype) {for (iterator it = documentformats.iterator (); it.hasnext ();) {documentFormat format = (documentFormat) it.next (); if (format.getMimetype (). igual (Mimetype)) {Return Format; }} retornar nulo; }}
Os formatos de arquivo suportados na classe de implementação padrão DefaultDocumentFormatRegistry são os seguintes
// // jodconverter - java opendocument converter // copyright (c) 2004-2007 - mirko nasato <[email protected]> // // Esta biblioteca é software livre; Você pode redistribuí -lo e/ou // modificá -lo nos termos da licença GNU Lesser em geral //, conforme publicado pela Free Software Foundation; ou // versão 2.1 da licença ou (por sua opção) qualquer versão posterior. // // Esta biblioteca é distribuída na esperança de que seja útil, mas sem qualquer garantia; sem a garantia implícita de // comercialização ou aptidão para uma finalidade específica. Consulte a licença pública geral GNU // menor para obter mais detalhes. // http://www.gnu.org/copyleft/lessher.html // package com.artofsolving.jodconverter; classe pública DefaultDocumentFormatRegistry estende o 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, "impression_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, "impressione_flash_export"); addDocumentFormat (SWF); Final DocumentFormat Xhtml = new DocumentFormat ("xhtml", "Application/xhtml+xml", "xhtml"); xhtml.setexportfilter (documentfamily.presentation, "xhtml impressione arquivo"); xhtml.setexportfilter (documentfamily.spreadsheet, "arquivo calc xhtml"); xhtml.setexportfilter (documentfamily.text, "XHTML Writer File"); addDocumentFormat (xhtml); // html é tratado como texto quando fornecido como entrada, mas como uma saída, ele também está // disponível para exportar planilha e formatos de apresentação Final DocumentFormat html = new DocumentFormat ("html", documentfamily.text, "text/html", "html"); html.setexportfilter (documentfamily.presentation, "impression_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 (escritor)"); AddDocumentFormat (SXW); DocumentFormat Doc = new DocumentFormat ("Microsoft Word", DocumentFamily.Text, "Application/Msword", "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 ("Texto simples", documentfamily.text, "text/plana", "txt"); // Defina o FilterName como "Texto" para impedir que o OOO tente exibir a caixa de diálogo "Opções de filtro ASCII" // Alternativamente, o Filtername pode ser "Texto (codificado)" e as correções de filtro usadas para definir a codificação, se necessário, txt.setImportOption ("filterame", "texto"); txt.setexportFilter (documentfamily.text, "text"); addDocumentFormat (txt); Final DocumentFormat Wikitext = new DocumentFormat ("MediaWiki Wikitext", "Text/X-Wiki", "Wiki"); wikitext.setexportfilter (documentfamily.text, "mediawiki"); addDocumentFormat (Wikitext); Final DocumentFormat ODS = new DocumentFormat ("Spreadsheet Opendocument", DocumentFamily.SpreadSheet, "Application/vnd.oasis.opendocument.spreadsheet", "ODS"); ODS.SETEXPORTFILTER (DocumentFamily.SpreadSheet, "Calc8"); addDocumentFormat (ODS); 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"); // separador de campo: ','; Delimitador de texto: '"' csv.setexportfilter (documentfamily.spreadheet," text - txt - csv (starcalc) "); csv.setexportOption (documentFamily.spreadSheet," filtroOpions ", 44,34,0"); DocumentFormat (Valores separados por TAB ", DocumentFamily.Spreadsheet," Valores de Texto/Tab-Separado "," TSV "); Delimiter: '"' tsv.setexportfilter (documentfamily.spreadheet," text - txt - csv (starcalc) "); tsv.setexportOption (documentfamily.spreadsheet, "FilterOptions", "9,34,0"); addDocumentFormat (TSV); Final DocumentFormat ODP = new DocumentFormat ("Apresentação Opendocument", DocumentFamily.presentation, "Application/vnd.oasis.opendocument.presentation", "ODP"); odp.setexportFilter (documentfamily.presentation, "impression8"); addDocumentFormat (ODP); Final DocumentFormat SXI = new DocumentFormat ("OpenOffice.org 1.0 Apresentação", DocumentFamily.presentation, "Application/vnd.sun.xml.impress", "sxi"); sxi.setexportfilter (documentfamily.presentation, "staroffice xml (impressionante)"); 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 ("Graphics de vetor escalável", "Image/SVG+XML", "SVG"); svg.setexportfilter (documentfamily.drawing, "draw_svg_export"); addDocumentFormat (SVG); }}
Solução: Reescreva o Método Public DocumentFormat GetFormatByFileExtension (Extensão da String) na classe BasicDocumentFormatRegistry. Desde que o nome do sufixo conte
// // jodconverter - java opendocument converter // copyright (c) 2004-2007 - mirko nasato <[email protected]> // // Esta biblioteca é software livre; Você pode redistribuí -lo e/ou // modificá -lo nos termos da licença GNU Lesser em geral //, conforme publicado pela Free Software Foundation; ou // versão 2.1 da licença ou (por sua opção) qualquer versão posterior. // // Esta biblioteca é distribuída na esperança de que seja útil, mas sem qualquer garantia; sem a garantia implícita de // comercialização ou aptidão para uma finalidade específica. Consulte a licença pública geral GNU // menor para obter mais detalhes. // http://www.gnu.org/copyleft/lessher.html // package com.artofsolving.jodconverter; importar java.util.arraylist; importar java.util.iterator; importar java.util.list; / *** Reescreva o formato do documento BasicDocumentFormatRegistry* @author huguangjun*/ public class BasicDocumentFormatRegistry implementa documentFormatRegistry {private list/* <documberFormat>*/ documentFormats = new ArrayList (); public void addDocumentFormat (DocumentFormatFormat) {DocumentFormats.add (DocumentFormat); } Lista protegida/ * <DocumentFormat> */ getDocumentFormats () {return documentFormats; } / ** * Extensão @param * A extensão do arquivo * @return the DocumentFormat para esta extensão, ou nulo se a extensão * não for mapeada * / public documentFormat getFormatbyfileExtension (extensão de string) {if (extension == null) {return null; } // Nome do arquivo unificado sufixo 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 (). Iguals (lowerextension)) {Return Format; }} retornar nulo; } public DocumentFormat GetFormatByMimetype (String Mimetype) {for (iterator it = documentformats.iterator (); it.hasnext ();) {documentFormat format = (documentFormat) it.next (); if (format.getMimetype (). igual (Mimetype)) {Return Format; }} retornar nulo; }}
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.