java가 오픈오피스를 호출하여 오피스 시리즈 문서를 PDF로 변환하는 예시 방법

17318 단어 javaopenoffice
선도:
보내는 과정에서 자바를 사용하여 오피스 시리즈 문서를 PDF로 변환합니다. 일반적으로 마이크로소프트가 제공하는 오픈오피스+jodconverter를 사용하여 문서를 변환합니다.
오픈오피스는 윈도우즈 버전도 있고 linux 버전도 있습니다.생산 환경은 linux 시스템이라고 걱정하지 마세요.
1. Openoffice는 maven을 예로 들면jar에 의존한다.

<dependency> 
      <groupId>com.artofsolving</groupId> 
      <artifactId>jodconverter</artifactId> 
      <version>2.2.1</version> 
    </dependency> 
    <dependency> 
      <groupId>org.openoffice</groupId> 
      <artifactId>jurt</artifactId> 
      <version>3.0.1</version> 
    </dependency> 
    <dependency> 
      <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> 
      <artifactId>unoil</artifactId> 
      <version>3.0.1</version> 
    </dependency> 
 
    <!--jodconverter2.2.1 slf4j-jdk14 , , low --> 
    <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-jdk14</artifactId> 
      <version>1.4.3</version> 
    </dependency> 
2. 코드를 직접 변환하려면 오픈오피스 응용 프로그램 8100 포트를 감청하면 된다.

public void convert(File sourceFile, File targetFile) { 
 
  try { 
    // 1:   
    OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100); 
    connection.connect(); 
 
    DocumentConverter converter = new OpenOfficeDocumentConverter(connection); 
    // 2: Format 
    DocumentFormatRegistry factory = new BasicDocumentFormatRegistry(); 
    DocumentFormat inputDocumentFormat = factory 
        .getFormatByFileExtension(getExtensionName(sourceFile.getAbsolutePath())); 
    DocumentFormat outputDocumentFormat = factory 
        .getFormatByFileExtension(getExtensionName(targetFile.getAbsolutePath())); 
    // 3:  
    converter.convert(sourceFile, inputDocumentFormat, targetFile, outputDocumentFormat); 
  } catch (ConnectException e) { 
    log.info(" PDF "); 
  } 
} 
3. 주의: jodconverter는 2007 버전 이후의 xxx를 변환합니다.docx 문서가 오류를 보고할 수 있습니다. 원인은 모두 03 접두사 xxx입니다.doc 07 이후 버전 xxx.docx
jodconverter 원본 코드를 보면 documentFormat이 xxx를 지원하지 않습니다.docx 형식 BasicDocumentFormatRegistry의 public DocumentFormat getFormatByFileExtension(String extension) 기본 지원은 doc 형식을 사용합니다
BasicDocumentFormatRegistry 클래스 소스

// 
// JODConverter - Java OpenDocument Converter 
// Copyright (C) 2004-2007 - Mirko Nasato <[email protected]> 
// 
// This library is free software; you can redistribute it and/or 
// modify it under the terms of the GNU Lesser General Public 
// License as published by the Free Software Foundation; either 
// version 2.1 of the License, or (at your option) any later version. 
// 
// This library is distributed in the hope that it will be useful, 
// but WITHOUT ANY WARRANTY; without even the implied warranty of 
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
// Lesser General Public License for more details. 
// http://www.gnu.org/copyleft/lesser.html 
// 
package com.artofsolving.jodconverter; 
 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 
 
public class BasicDocumentFormatRegistry implements DocumentFormatRegistry { 
 
  private List/*<DocumentFormat>*/ documentFormats = new ArrayList(); 
 
  public void addDocumentFormat(DocumentFormat documentFormat) { 
    documentFormats.add(documentFormat); 
  } 
 
  protected List/*<DocumentFormat>*/ getDocumentFormats() { 
    return documentFormats; 
  } 
 
  /** 
   * @param extension the file extension 
   * @return the DocumentFormat for this extension, or null if the extension is not mapped 
   */ 
  public DocumentFormat 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)) { 
        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; 
  } 
} 
BasicDocumentFormatRegistry의 기본 구현 클래스DefaultDocumentFormatRegistry에서 지원하는 파일 형식은 다음과 같습니다.

// 
// JODConverter - Java OpenDocument Converter 
// Copyright (C) 2004-2007 - Mirko Nasato <[email protected]> 
// 
// This library is free software; you can redistribute it and/or 
// modify it under the terms of the GNU Lesser General Public 
// License as published by the Free Software Foundation; either 
// version 2.1 of the License, or (at your option) any later version. 
// 
// This library is distributed in the hope that it will be useful, 
// but WITHOUT ANY WARRANTY; without even the implied warranty of 
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
// Lesser General Public License for more details. 
// http://www.gnu.org/copyleft/lesser.html 
// 
package com.artofsolving.jodconverter; 
 
public class DefaultDocumentFormatRegistry extends 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, "impress_flash_Export"); 
    addDocumentFormat(swf); 
     
    final DocumentFormat xhtml = new DocumentFormat("XHTML", "application/xhtml+xml", "xhtml"); 
    xhtml.setExportFilter(DocumentFamily.PRESENTATION, "XHTML Impress File"); 
    xhtml.setExportFilter(DocumentFamily.SPREADSHEET, "XHTML Calc File"); 
    xhtml.setExportFilter(DocumentFamily.TEXT, "XHTML Writer File"); 
    addDocumentFormat(xhtml); 
 
    // HTML is treated as Text when supplied as input, but as an output it is also 
    // available for exporting Spreadsheet and Presentation formats 
    final DocumentFormat html = new 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 (Writer)"); 
    addDocumentFormat(sxw); 
 
    final 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("Plain Text", DocumentFamily.TEXT, "text/plain", "txt"); 
    // set FilterName to "Text" to prevent OOo from tryign to display the "ASCII Filter Options" dialog 
    // alternatively FilterName could be "Text (encoded)" and FilterOptions used to set encoding if needed 
    txt.setImportOption("FilterName", "Text"); 
    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("OpenDocument Spreadsheet", 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("FilterName", "Text - txt - csv (StarCalc)"); 
    csv.setImportOption("FilterOptions", "44,34,0"); // Field Separator: ','; Text Delimiter: '"'  
    csv.setExportFilter(DocumentFamily.SPREADSHEET, "Text - txt - csv (StarCalc)"); 
    csv.setExportOption(DocumentFamily.SPREADSHEET, "FilterOptions", "44,34,0"); 
    addDocumentFormat(csv); 
 
    final DocumentFormat tsv = new DocumentFormat("Tab-separated Values", DocumentFamily.SPREADSHEET, "text/tab-separated-values", "tsv"); 
    tsv.setImportOption("FilterName", "Text - txt - csv (StarCalc)"); 
    tsv.setImportOption("FilterOptions", "9,34,0"); // Field Separator: '\t'; 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 Presentation", DocumentFamily.PRESENTATION, "application/vnd.oasis.opendocument.presentation", "odp"); 
    odp.setExportFilter(DocumentFamily.PRESENTATION, "impress8"); 
    addDocumentFormat(odp); 
 
    final DocumentFormat sxi = new DocumentFormat("OpenOffice.org 1.0 Presentation", DocumentFamily.PRESENTATION, "application/vnd.sun.xml.impress", "sxi"); 
    sxi.setExportFilter(DocumentFamily.PRESENTATION, "StarOffice XML (Impress)"); 
    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); 
  } 
} 
해결 방법: BasicDocumentFormatRegistry 클래스의public DocumentFormat getFormatByFileExtension(String extension) 방법을 다시 작성합니다. 접두사 이름이doc를 포함하면 doc의 documentFormat 문서 형식을 사용합니다.

// 
// JODConverter - Java OpenDocument Converter 
// Copyright (C) 2004-2007 - Mirko Nasato <[email protected]> 
// 
// This library is free software; you can redistribute it and/or 
// modify it under the terms of the GNU Lesser General Public 
// License as published by the Free Software Foundation; either 
// version 2.1 of the License, or (at your option) any later version. 
// 
// This library is distributed in the hope that it will be useful, 
// but WITHOUT ANY WARRANTY; without even the implied warranty of 
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
// Lesser General Public License for more details. 
// http://www.gnu.org/copyleft/lesser.html 
// 
package com.artofsolving.jodconverter; 
 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 
 
/** 
 *   BasicDocumentFormatRegistry   
 * @author HuGuangJun 
 */ 
public class BasicDocumentFormatRegistry implements DocumentFormatRegistry { 
 
  private List/* <DocumentFormat> */ documentFormats = new ArrayList(); 
 
  public void addDocumentFormat(DocumentFormat documentFormat) { 
    documentFormats.add(documentFormat); 
  } 
 
  protected List/* <DocumentFormat> */ getDocumentFormats() { 
    return documentFormats; 
  } 
 
  /** 
   * @param extension 
   *      the file extension 
   * @return the DocumentFormat for this extension, or null if the extension 
   *     is not mapped 
   */ 
  public DocumentFormat getFormatByFileExtension(String extension) { 
    if (extension == null) { 
      return null; 
    } 
    //  
    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)) { 
        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; 
  } 
} 
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기