suchen
HeimJavajavaLernprogrammDetaillierte Erläuterung des Beispielcodes zum Konvertieren von Word-Dateien in HTML-Dateien mithilfe von Java

Dieser Artikel stellt hauptsächlich die Methode zum Konvertieren von Word-Dateien in HTML-Dateien in Java vor. Interessierte Freunde können sich kürzlich während des Projekts darauf beziehen In der Entwicklung schlug ein Benutzer vor, eine Word-Datei in einem Browser zu öffnen, wenn Office nicht auf dem Computer installiert ist. Die endgültige Logik war: Der Benutzer wählt die Datei aus, die er anzeigen möchte, und die Seite js bestimmt, ob die Datei ist Word. Anstatt den Download auszuführen, greift das Backend auf die entsprechende Konvertierungsmethode basierend auf dem Word-Dateisuffix zu. Wenn die Datei bereits vorhanden ist, gibt die entsprechende HTML-Datei direkt die Adresse der HTML-Datei zurück. Wenn die Datei nicht vorhanden ist, generieren Sie zuerst die entsprechende HTML-Datei und geben Sie dann die Adresse zurück. js öffnet direkt über open() einen neuen Tab, um den Inhalt der Word-Datei anzuzeigen. Ich bin ein Neuling. Wenn der Code Fehler enthält oder es bessere Implementierungen gibt, korrigieren Sie mich bitte!

Zugehöriges JAR-Paket

Code

Detaillierte Erläuterung des Beispielcodes zum Konvertieren von Word-Dateien in HTML-Dateien mithilfe von Java

Dateiverzeichnis:

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.converter.PicturesManager;
import org.apache.poi.hwpf.converter.WordToHtmlConverter;
import org.apache.poi.hwpf.usermodel.PictureType;
import org.apache.poi.xwpf.converter.core.BasicURIResolver;
import org.apache.poi.xwpf.converter.core.FileImageExtractor;
import org.apache.poi.xwpf.converter.core.FileURIResolver;
import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter;
import org.apache.poi.xwpf.converter.xhtml.XHTMLOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.w3c.dom.Document;

/**
 * word 转换成html 2017-2-27 
 */
public class WordToHtml {
  
  
  /**
   * 将word2003转换为html文件 2017-2-27 
   * @param wordPath word文件路径
   * @param wordName word文件名称无后缀
   * @param suffix  word文件后缀
   * @throws IOException
   * @throws TransformerException
   * @throws ParserConfigurationException
   */
  public String Word2003ToHtml(String wordPath,String wordName,String suffix) throws IOException, TransformerException, ParserConfigurationException {
    String htmlPath = wordPath + File.separator + wordName + "_show" + File.separator;
    String htmlName = wordName + ".html";
    final String imagePath = htmlPath + "image" + File.separator;
    
    //判断html文件是否存在
    File htmlFile = new File(htmlPath + htmlName);
    if(htmlFile.exists()){ 
      return htmlFile.getAbsolutePath();
    }
    
    //原word文档
    final String file = wordPath + File.separator + wordName + suffix;
    InputStream input = new FileInputStream(new File(file));
    
    HWPFDocument wordDocument = new HWPFDocument(input);
    WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
    //设置图片存放的位置
    wordToHtmlConverter.setPicturesManager(new PicturesManager() {
      public String savePicture(byte[] content, PictureType pictureType, String suggestedName, float widthInches, float heightInches) {
        File imgPath = new File(imagePath);
        if(!imgPath.exists()){//图片目录不存在则创建
          imgPath.mkdirs();
        }
        File file = new File(imagePath + suggestedName);
        try {
          OutputStream os = new FileOutputStream(file);
          os.write(content);
          os.close();
        } catch (FileNotFoundException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }
        //图片在html文件上的路径 相对路径
        return "image/" + suggestedName;
      }
    });
    
    //解析word文档
    wordToHtmlConverter.processDocument(wordDocument);
    Document htmlDocument = wordToHtmlConverter.getDocument();
    
    //生成html文件上级文件夹
    File folder = new File(htmlPath);
    if(!folder.exists()){ 
      folder.mkdirs(); 
    }
    
    //生成html文件地址
    OutputStream outStream = new FileOutputStream(htmlFile);

    DOMSource domSource = new DOMSource(htmlDocument);
    StreamResult streamResult = new StreamResult(outStream);

    TransformerFactory factory = TransformerFactory.newInstance();
    Transformer serializer = factory.newTransformer();
    serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
    serializer.setOutputProperty(OutputKeys.INDENT, "yes");
    serializer.setOutputProperty(OutputKeys.METHOD, "html");
    
    serializer.transform(domSource, streamResult);

    outStream.close();
    
    return htmlFile.getAbsolutePath();
  }
  
  /**
   * 2007版本word转换成html 2017-2-27
   * @param wordPath word文件路径
   * @param wordName word文件名称无后缀
   * @param suffix  word文件后缀
   * @return
   * @throws IOException
   */
  public String Word2007ToHtml(String wordPath,String wordName,String suffix) throws IOException {
    String htmlPath = wordPath + File.separator + wordName + "_show" + File.separator;
    String htmlName = wordName + ".html";
    String imagePath = htmlPath + "image" + File.separator;
    
    //判断html文件是否存在
    File htmlFile = new File(htmlPath + htmlName);
    if(htmlFile.exists()){ 
      return htmlFile.getAbsolutePath();
    }
        
    //word文件
    File wordFile = new File(wordPath + File.separator + wordName + suffix); 
    
    // 1) 加载word文档生成 XWPFDocument对象 
    InputStream in = new FileInputStream(wordFile); 
    XWPFDocument document = new XWPFDocument(in); 

    // 2) 解析 XHTML配置 (这里设置IURIResolver来设置图片存放的目录) 
    File imgFolder = new File(imagePath);
    XHTMLOptions options = XHTMLOptions.create();
    options.setExtractor(new FileImageExtractor(imgFolder));
    //html中图片的路径 相对路径 
    options.URIResolver(new BasicURIResolver("image"));
    options.setIgnoreStylesIfUnused(false); 
    options.setFragment(true); 
    
    // 3) 将 XWPFDocument转换成XHTML
    //生成html文件上级文件夹
    File folder = new File(htmlPath);
    if(!folder.exists()){ 
      folder.mkdirs(); 
    }
    OutputStream out = new FileOutputStream(htmlFile); 
    XHTMLConverter.getInstance().convert(document, out, options);
    
    return htmlFile.getAbsolutePath(); 
  } 
}

Detaillierte Erläuterung des Beispielcodes zum Konvertieren von Word-Dateien in HTML-Dateien mithilfe von Java

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Beispielcodes zum Konvertieren von Word-Dateien in HTML-Dateien mithilfe von Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Wie vereinfachte ich Probleme mit der Feldzuordnung im Systemdocking mithilfe des Mapstruct?Wie vereinfachte ich Probleme mit der Feldzuordnung im Systemdocking mithilfe des Mapstruct?Apr 19, 2025 pm 06:21 PM

Die Verarbeitung von Feldzuordnungen im Systemdocken stößt häufig auf ein schwieriges Problem bei der Durchführung von Systemdocken: So kartieren Sie die Schnittstellenfelder des Systems und ...

Wie identifiziert Intellij IDEA die Hafenzahl des Spring -Boot -Projekts über Javaagent und RMI -Technologie?Wie identifiziert Intellij IDEA die Hafenzahl des Spring -Boot -Projekts über Javaagent und RMI -Technologie?Apr 19, 2025 pm 06:18 PM

Wie erkennt Intellijidea die Hafenzahl des Springboot -Projekts? Beginnen Sie den Frühling mit der Intellijideaultimate -Version ...

Effiziente Programmierung: Wie finden Sie zuverlässige Code -Tools und -Ressourcen?Effiziente Programmierung: Wie finden Sie zuverlässige Code -Tools und -Ressourcen?Apr 19, 2025 pm 06:15 PM

Effiziente Programmierung: Suche nach zuverlässigen Code -Tools und -Ressourcen Viele Programmierer sind bestrebt, bequeme Websites für Code -Tools zu finden, um die Effizienz zu verbessern und massive Informationen zu vermeiden ...

Kann JWT dynamische Berechtigungsänderungen implementieren? Was ist der Unterschied vom Sitzungsmechanismus?Kann JWT dynamische Berechtigungsänderungen implementieren? Was ist der Unterschied vom Sitzungsmechanismus?Apr 19, 2025 pm 06:12 PM

Verwirrung und Antworten zu JWT und Sitzung Viele Anfänger sind oft verwirrt über ihre Natur und anwendbare Szenarien beim Erlernen von JWT und der Sitzung. Dieser Artikel dreht sich um J ...

Wie konfigurieren Sie Windows Server 2019 -Firewall korrekt, um WebSocket -Kommunikation zu unterstützen?Wie konfigurieren Sie Windows Server 2019 -Firewall korrekt, um WebSocket -Kommunikation zu unterstützen?Apr 19, 2025 pm 06:09 PM

Detaillierte Erläuterung des Kommunikationsproblems zwischen Windows Server 2019 Firewall und WebSocket. Das mit Springboot entwickelte JAR -Programm wird in Windows Server 2019 bereitgestellt ...

Wie kann der Spring -Start -Thread -Zugriff Informationen zum Haupt Thread anfordern?Wie kann der Spring -Start -Thread -Zugriff Informationen zum Haupt Thread anfordern?Apr 19, 2025 pm 06:03 PM

Springboot Child Thread kann im Frühjahr nicht auf die Informationslösung für die Information von Threads zugreifen ...

Wird sich die Neuordnung von Anweisungen unter Java -Einzel -Thread auf die Ausgangsreihenfolge von System.out.println auswirken?Wird sich die Neuordnung von Anweisungen unter Java -Einzel -Thread auf die Ausgangsreihenfolge von System.out.println auswirken?Apr 19, 2025 pm 06:00 PM

Anweisungen und Ausgangsreihenfolge unter Java -Einzel -Thread in der Java -Programmierung, Neuordnung der Anweisungen ist eine gemeinsame Optimierungstechnik, mit der die Ausführungseffizienz des Programms verbessert wird ...

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Dreamweaver Mac

Dreamweaver Mac

Visuelle Webentwicklungstools

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung