قائد:
أثناء عملية التوزيع ، غالبًا ما يتم استخدام Java لتحويل مستندات سلسلة Office إلى PDFs ، واستخدام OpenOffice+JodConverter عمومًا المقدمة من Microsoft لتحويل المستندات.
OpenOffice يحتوي على كل من إصدار Windows و Linux. لا تقلق بشأن أن تكون بيئة الإنتاج نظام Linux.
1. OpenOffice يعتمد على جرة ، خذ Maven كمثال:
<Rependency> <roupency> com.artofSolving </rougiD> <StifactId> jodconverter </artifactid> <الإصدار> 2.2.1 </version> </dependency> <redence> <roupiD> org.openoffice </rougiD> <StifactId> <rouciD> org.openoffice </rougiD> <StifactId> ridl </stifactId> <sored> 3.0.1 </version> </syperency> <serpency> <roupiD> org.openoffice </rougiD> </groupiD> urgiD> <StifactId> unoil </artifactId> <الإصدار> 3.0.1 </version> </respency> <!-jodconverter2.2.1 يجب أن تعتمد على SLF4J-JDK14 ، وإلا فإن السجلات ستقوم بالإبلاغ عن خطأ في الكود المصدري. إنها مشكلة منخفضة للغاية-> <reperency> <roupiD> org.slf4j </rougeid> <StifactId> slf4j-jdk14 </shintifactid> <الإصدار> 1.4.3 </version> </dependency>
2. لتحميل الكود مباشرة ، تحتاج إلى الاستماع إلى منفذ 8100 لتطبيق OpenOffice.
void public convert (file sourcefile ، file targetfile) {try {// 1: افتح اتصال OpenOffIconnection = new SocketOpenOfficEconnection (8100) ؛ connection.connect () ؛ DocumentConverter Converter = جديد OpenOfficeTocumentConverter (اتصال) ؛ // 2: الحصول على تنسيق documentFormatregistry Factory = newDocumentFormatregistry () ؛ documentFormat inputDocumentFormat = Factory .getFormatbyFileMextension (getExtensionName (sourceFile.getabsolutepath ())) ؛ documentformat outputDocumentFormat = Factory .getFormatbyFileMextension (getExtensionName (targetfile.getabsolutepath ())) ؛ // 3: تنفيذ محول التحويل. } catch (connectexception e) {log.info ("فشل تحويل المستند") ؛ }}3. ملاحظة: سيقوم JodConverter بالإبلاغ عن خطأ بعد تحويل مستند XXX.Docx بعد إصدار 2007. يعلم الجميع أن اللاحقة 03 هي xxx.doc. سيكون الإصدار 07 xxx.docx.
التحقق من رمز مصدر JodConverter ، وجد أن DocumentFormat لا يدعم تنسيق xxx.docx. BasicDocumentFormatregistry. يتم دعم DocumentFormat Publicformat getFormatbyFileMextension (امتداد السلسلة) افتراضيًا. يتم استخدام تنسيق DOC.
BasicDocumentFormatregistry Class Code
// // Jodconverter - Java Opendocument Converter // حقوق الطبع والنشر (C) 2004-2007 - Mirko Nasato <[email protected]> // // هذه المكتبة هي برنامج مجاني ؛ يمكنك إعادة توزيعه و/أو // تعديله بموجب شروط ترخيص GNU Lesser General // على النشر من قبل مؤسسة البرمجيات الحرة ؛ إما // الإصدار 2.1 من الترخيص ، أو (في خيارك) أي إصدار لاحق. // // يتم توزيع هذه المكتبة على أمل أن تكون مفيدة ، ولكن بدون أي ضمان ؛ بدون حتى الضمان الضمني لـ // التسويق أو اللياقة لغرض معين. راجع رخصة GNU // أقل عامة عامة لمزيد من التفاصيل. // http://www.gnu.org/copyleft/lesser.html // package com.artofsolving.jodconverter ؛ استيراد java.util.arraylist ؛ استيراد java.util.iterator ؛ استيراد java.util.list ؛ الفئة العامة basicdocumentFormatregistry تنفذ documentFormAtregistry {private list/*<vitrialformat>*/ documentFormats = new ArrayList () ؛ public void addDocumentFormat (documentFormat documentFormat) {documentFormats.add (documentFormat) ؛ } قائمة محمية/*<ConviceFormat>*/ getDocumentFormats () {return documentFormats ؛ } / ** * param امتداد تمديد الملف * @Return the documentformat لهذا الامتداد ، أو NULL إذا لم يتم تعيين الامتداد * / documentFormat getFormatbyFileStense (امتداد السلسلة) {if (extension == null) {return null ؛ } string lowerextension = extension.toLowerCase () ؛ لـ (iterator it = documentformats.iterator () ؛ it.hasnext () ؛) {documentFormat format = (documentFormat) it.next () ؛ if (format.getFileStension (). equals (lowerextension)) {return format ؛ }} الإرجاع null ؛ } documentFormat public GetFormatbyMiType (String mimetype) {for (iterator it = documentformats.iterator () ؛ it.hasnext () ؛) {documentformat format = (documentformat) it.next () ؛ if (format.getMimetype (). يساوي (mimetype)) {format return ؛ }} الإرجاع null ؛ }}
تنسيقات الملفات المدعومة في فئة التنفيذ الافتراضية DefaultDocumentFormatregistry هي كما يلي
// // Jodconverter - Java Opendocument Converter // حقوق الطبع والنشر (C) 2004-2007 - Mirko Nasato <[email protected]> // // هذه المكتبة هي برنامج مجاني ؛ يمكنك إعادة توزيعه و/أو // تعديله بموجب شروط ترخيص GNU Lesser General // على النشر من قبل مؤسسة البرمجيات الحرة ؛ إما // الإصدار 2.1 من الترخيص ، أو (في خيارك) أي إصدار لاحق. // // يتم توزيع هذه المكتبة على أمل أن تكون مفيدة ، ولكن بدون أي ضمان ؛ بدون حتى الضمان الضمني لـ // التسويق أو اللياقة لغرض معين. راجع رخصة GNU // أقل عامة عامة لمزيد من التفاصيل. // http://www.gnu.org/copyleft/lesser.html // package com.artofsolving.jodconverter ؛ الطبقة العامة defaultDocumentFormatregistry تمتد BasicDocumentFormAtregistry {public defaultDocumentFormatregistry () {Final DocumentFormat pdf = new documentformat ("تنسيق المستند المحمول" ، "التطبيق/pdf" ، "PDF") ؛ pdf.setexportfilter (documentfamily.drawing ، "draw_pdf_export") ؛ pdf.setexportfilter (documentfamily.presentation ، "refress_pdf_export") ؛ pdf.setexportfilter (documentfamily.spreadsheet ، "calc_pdf_export") ؛ pdf.setexportfilter (documentfamily.text ، "writer_pdf_export") ؛ AddDocumentFormat (PDF) ؛ documentformformat 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) ؛ documentformformat 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 Constrip File") ؛ AddDocumentFormat (XHTML) ؛ // يتم التعامل مع HTML كنص عند توفيره كمدخلات ، ولكن كمخرج ، يتوفر أيضًا // لتصدير تنسيقات جدول البيانات وتنسيقات العرض التقديمي النهائي HTML = New DocumentFormat ("HTML" ، documentfamily.text ، "text/html" ، "HTML") ؛ html.setexportfilter (documentfamily.presentation ، "refress_html_export") ؛ html.setexportfilter (documentfamily.spreadsheet ، "HTML (starcalc)") ؛ html.setexportfilter (documentfamily.text ، "HTML (StarWriter)") ؛ AddDocumentFormat (HTML) ؛ documentformformat odt = new documentFormat ("OpenDocument text" ، documentfamily.text ، "application/vnd.oasis.opendocument.text" ، "ODT") ؛ ODT.SetExportFilter (documentfamily.text ، "Writer8") ؛ AddDocumentFormat (ODT) ؛ documentformformat sxw = new documentformat ("OpenOffice.org 1.0 مستند نصي" ، documentfamily.text ، "application/vnd.sun.xml.writer" ، "SXW") ؛ sxw.setexportfilter (documentfamily.text ، "staroffice xml (writer)") ؛ AddDocumentFormat (SXW) ؛ DocumentFormat doc = new documentformat ("Microsoft Word" ، documentFamily.text ، "application/msword" ، "doc") ؛ Doc.SetexportFilter (documentfamily.text ، "MS Word 97") ؛ AddDocumentFormat (DOC) ؛ documentformformat rtf = new documentformat ("تنسيق النص الغني" ، documentfamily.text ، "text/rtf" ، "rtf") ؛ rtf.setexportfilter (documentfamily.text ، "تنسيق النص الغني") ؛ AddDocumentFormat (RTF) ؛ documentformformat wpd = new documentformat ("wordperfect" ، documentfamily.text ، "application/wordperfect" ، "wpd") ؛ AddDocumentFormat (WPD) ؛ documentformformat txt = new documentformat ("plain text" ، documentfamily.text ، "text/plain" ، "txt") ؛ // قم بتعيين اسم Filtername على "نص" لمنع OOO من المحاولة لعرض "مربع حوار مرشح ASCII" يمكن أن يكون اسم Filtername "نص (مشفر)" ومرشحات تستخدم لتعيين الترميز إذا لزم الأمر txt.setImportOption ( txt.setexportfilter (documentfamily.text ، "text") ؛ addDocumentFormat (txt) ؛ documentformformat wikitext = new documentformat ("MediaWiki wikitext" ، "text/x-wiki" ، "wiki") ؛ wikitext.setexportfilter (documentfamily.text ، "mediaWiki") ؛ AddDocumentFormat (wikitext) ؛ documentformformat ods = new documentformat ("جدول بيانات OpenDocument" ، documentfamily.spreadsheet ، "application/vnd.oasis.opendocument.spreadsheet" ، "ODS") ؛ ODS.SetExportFilter (documentfamily.spreadsheet ، "calc8") ؛ AddDocumentFormat (ODS) ؛ documentformformat sxc = new documentformat ("OpenOffice.org 1.0 Termseet" ، documentfamily.spreadsheet ، "application/vnd.sun.xml.calc" ، "SXC") ؛ sxc.setexportfilter (documentfamily.spreadsheet ، "Staroffice XML (calc)") ؛ AddDocumentFormat (SXC) ؛ documentformatformat xls = new documentformat ("Microsoft excel" ، documentfamily.spreadsheet ، "application/vnd.ms-excel" ، "XLS") ؛ XLS.SetExportFilter (DocumentFamily.Spreadsheet ، "MS Excel 97") ؛ AddDocumentFormat (XLS) ؛ documentformformat csv = new documentformat ("csv" ، documentfamily.spreadsheet ، "text/csv" ، "csv") ؛ CSV.SetImportOption ("filtername" ، "Text - Txt - CSV (StarCalc)") ؛ CSV.SetImportOption ("filteroptions" ، "44،34،0") ؛ // فاصل الحقل: '،' ؛ تحديد النص: "" "CSV.SetExportFilter (documentfamily.spreadsheet ،" Text - Txt - CSV (StarCalc) ") ؛ DocumentFormat ("القيم المفصولة" ، "Text/Table-Seved" ، "TSV") ؛ محدد النص: "" tsv.setexportfilter (documentfamily.spreadsheet ، "text - txt - csv (starcalc)") ؛ TSV.SetExportOption (DocumentFamily.Spreadsheet ، "FilterOptions" ، "9،34،0") ؛ AddDocumentFormat (TSV) ؛ documentformformat odp = new documentformat ("OpenDocument Presentation" ، documentfamily.presentation ، "application/vnd.oasis.opendocument.presentation" ، "ODP") ؛ ODP.SetExportFilter (DocumentFamily.presentation ، "Impress8") ؛ AddDocumentFormat (ODP) ؛ documentformformat sxi = new documentformat ("OpenOffice.org 1.0 عرض تقديمي" ، documentfamily.presentation ، "application/vnd.sun.xml.impress" ، "sxi") ؛ sxi.setexportfilter (documentfamily.presentation ، "Staroffice XML (Impress)") ؛ AddDocumentFormat (SXI) ؛ المستند النهائي ppt = new documentformat ("Microsoft PowerPoint" ، documentfamily.presentation ، "application/vnd.ms-powerpoint" ، "ppt") ؛ ppt.setexportfilter (documentfamily.presentation ، "MS PowerPoint 97") ؛ addDocumentFormat (ppt) ؛ documentformformat odg = new documentformat ("OpenDocument Drawing" ، documentfamily.drawing ، "application/vnd.oasis.opendocument.graphics" ، "ODG") ؛ ODG.SetExportFilter (documentfamily.drawing ، "draw8") ؛ AddDocumentFormat (ODG) ؛ documentformformat svg = new documentformat ("رسومات المتجهات القابلة للتطوير" ، "Image/SVG+XML" ، "SVG") ؛ svg.setexportfilter (documentfamily.drawing ، "draw_svg_export") ؛ AddDocumentFormat (SVG) ؛ }}
الحل: أعد كتابة المستند العام getFormatbyFileMextension (تمديد السلسلة) في فئة BasicDocumentFormatregistry. طالما أن اسم لاحقة يحتوي على DOC ، استخدم تنسيق Docum
// // Jodconverter - Java Opendocument Converter // حقوق الطبع والنشر (C) 2004-2007 - Mirko Nasato <[email protected]> // // هذه المكتبة هي برنامج مجاني ؛ يمكنك إعادة توزيعه و/أو // تعديله بموجب شروط ترخيص GNU Lesser General // على النشر من قبل مؤسسة البرمجيات الحرة ؛ إما // الإصدار 2.1 من الترخيص ، أو (في خيارك) أي إصدار لاحق. // // يتم توزيع هذه المكتبة على أمل أن تكون مفيدة ، ولكن بدون أي ضمان ؛ بدون حتى الضمان الضمني لـ // التسويق أو اللياقة لغرض معين. راجع رخصة GNU // أقل عامة عامة لمزيد من التفاصيل. // http://www.gnu.org/copyleft/lesser.html // package com.artofsolving.jodconverter ؛ استيراد java.util.arraylist ؛ استيراد java.util.iterator ؛ استيراد java.util.list ؛ / *** إعادة كتابة تنسيق وثيقة BasicDocumentFormatregistry* Author huguangjun*/ public class basicdocumentFormAtregistry تنفذ documentFormAtregistry {private list/* <visildorformat>*/ documentFormats = new ArrayList () ؛ public void addDocumentFormat (documentFormat documentFormat) {documentFormats.add (documentFormat) ؛ } قائمة محمية/ * <ConviceFormat> */ getDocumentFormats () {return documentFormats ؛ } / ** * param extension * ملحق الملف * @Return the documentformat لهذا الامتداد ، أو null إذا لم يتم تعيين الامتداد * * / documentformaTformat getFormatbyFileStense (امتداد السلسلة) {if (extension == null) {return null ؛ } // file name fauth faceix 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 () ؛ لـ (iterator it = documentformats.iterator () ؛ it.hasnext () ؛) {documentFormat format = (documentFormat) it.next () ؛ if (format.getFileStension (). equals (lowerextension)) {return format ؛ }} الإرجاع null ؛ } documentFormat public GetFormatbyMiType (String mimetype) {for (iterator it = documentformats.iterator () ؛ it.hasnext () ؛) {documentformat format = (documentformat) it.next () ؛ if (format.getMimetype (). يساوي (mimetype)) {format return ؛ }} الإرجاع null ؛ }}
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.