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.docxjodconverter 원본 코드를 보면 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;
}
}
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.