当前位置: 首页 > news >正文

长春门户网站建设二建注册查询系统

长春门户网站建设,二建注册查询系统,seoul是啥意思,上海住房和城乡建设部网站最近在研究一些关于文档转换格式的方法,因为需要用在开发的一个项目上,所以投入了一些时间,给大家聊下这块逻辑及解决方案。 一、关于word转换html大致都有哪些方法? (1)使用 Microsoft Word 导出 其实该…

最近在研究一些关于文档转换格式的方法,因为需要用在开发的一个项目上,所以投入了一些时间,给大家聊下这块逻辑及解决方案。

一、关于word转换html大致都有哪些方法?

(1)使用 Microsoft Word 导出

        其实该方法就是使用word本身导出方案

操作步骤

  1. 在 Microsoft Word 中打开文档。
  2. 点击 文件 > 另存为 或 导出。
  3. 选择保存类型为 网页(.html, .htm)。
  4. 保存文件后,会生成一个 HTML 文件(有时会附带一个文件夹用于存放图片等资源)。

优点

  • 保留了文档的大部分格式。
  • 操作简单,无需其他工具。

缺点

  • 导出的 HTML 文件代码较冗余,包含许多与 Word 相关的样式和标签。

(2)使用第三方工具或在线转换工具

        一般常见的有SmallPDF、Zamzar、Convertio、LibreOffice等在线工具或软件进行转换

优点

  • 方便快捷,适合大多数人使用。
  • 有些工具可以清理冗余代码,生成更简洁的 HTML。

缺点

  • 在线工具可能存在隐私和安全风险。
  • 某些工具可能无法完全保留复杂文档的格式。

(3)使用编程实现自动化转换

常见的编程实现有:

  • Python
    • 使用 python-docx 库读取 .docx 文件,再用自定义逻辑生成 HTML。
    • 使用 mammoth 库,专门将 .docx 转为干净的 HTML(推荐)。
    • 使用 pywin32 调用 Windows COM 接口操作 Microsoft Word。
  • Java
    • 使用 Apache POI 的 XWPF 模块解析 .docx 文件并输出 HTML。
  • Node.js
    • 使用 officegenmammoth.js 转换 .docx 文件。
  • C#
    • 使用 OpenXML SDK 或 Interop.Word 来操作 Word 文件并转换为 HTML。

        本此讲解的就是通过java的poi内的模块进行解析输出html

二、docx转换html

        示例代码如下:

public static void docxtoHtml(String fileName, String outPutFile) throws TransformerException, IOException, ParserConfigurationException {long startTime = System.currentTimeMillis();XWPFDocument document = new XWPFDocument(new FileInputStream(fileName));// 用于存储目录内容StringBuilder toc = new StringBuilder();toc.append("<div id='toc'>\n<ul>\n");  // 直接从 <ul> 开始,表示目录// 遍历文档中的段落,查找目录项List<XWPFParagraph> paragraphs = document.getParagraphs();int tocLevel = 0; // 目录的当前级别,1代表一级目录,2代表二级目录,3代表三级目录boolean tocStarted = false; // 标记目录是否开始for (XWPFParagraph paragraph : paragraphs) {String style = paragraph.getStyle();  // 获取段落样式String text = paragraph.getText();  // 获取段落文本// 根据段落的样式级别来识别目录项,假设标题样式为 Heading 1, Heading 2, Heading 3if (style != null) {if (style.equals("Heading 1")) {  // 一级标题if (tocStarted) {toc.append("</ul>\n"); // 关闭上一级目录}toc.append("<ul>\n");  // 开始一个新的无序列表toc.append("<li><a href='#" + text.hashCode() + "'>" + text + "</a></li>\n");tocLevel = 1;tocStarted = true;} else if (style.equals("Heading 2")) {  // 二级标题if (tocLevel == 1) {toc.append("<ul>\n");  // 开始二级目录}toc.append("<li><a href='#" + text.hashCode() + "'>" + text + "</a></li>\n");tocLevel = 2;} else if (style.equals("Heading 3")) {  // 三级标题if (tocLevel == 2) {toc.append("<ul>\n");  // 开始三级目录}toc.append("<li><a href='#" + text.hashCode() + "'>" + text + "</a></li>\n");tocLevel = 3;}}// 在目录项前插入锚点if (style != null && (style.equals("Heading 1") || style.equals("Heading 2") || style.equals("Heading 3"))) {String anchor = "<a name='" + text.hashCode() + "'></a>";String modifiedText = anchor + text;  // 在目录项文本前添加锚点// 更新段落中的文本for (XWPFRun run : paragraph.getRuns()) {run.setText(modifiedText, 0); // 更新段落内容}}}// 如果目录结束后,确保关闭所有的<ul>标签if (tocLevel > 0) {toc.append("</ul>\n");}toc.append("</ul>\n</div>\n");  // 关闭最外层的 <ul> 和 <div>// 设置XHTMLOptionsXHTMLOptions options = XHTMLOptions.create().indent(4);File imageFolder = new File(tempPath);  // 图片临时文件夹路径options.setExtractor(new FileImageExtractor(imageFolder));options.URIResolver(new FileURIResolver(imageFolder));// 使用 `XHTMLConverter` 进行 DOCX 到 HTML 的转换ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();XHTMLConverter.getInstance().convert(document, byteArrayOutputStream, options);System.out.println("Generate " + outPutFile + " with " + (System.currentTimeMillis() - startTime) + " ms.");// 获取转换后的HTML内容String htmlContent = new String(byteArrayOutputStream.toByteArray(), "UTF-8");// 将TOC插入到HTML的开头htmlContent = toc + htmlContent;// 处理分页符:将分页符添加到HTML中htmlContent = htmlContent.replaceAll("<!-- PAGE_BREAK -->", "<div class='page-break'></div>");// 添加表格样式(边框)htmlContent = htmlContent.replaceAll("<table>", "<table style='border: 1px solid black !important; border-collapse: collapse; width: 100%;'>");htmlContent = htmlContent.replaceAll("<td>", "<td style='border: 1px solid black !important; padding: 5px; text-align: left;'>");htmlContent = htmlContent.replaceAll("<th>", "<th style='border: 1px solid black !important; padding: 5px; text-align: left;'>");htmlContent = htmlContent.replaceAll("<tr>", "<tr style='border: 1px solid black !important;'>");htmlContent = htmlContent.replaceAll("<thead>", "<thead style='border: 1px solid black !important;'>");htmlContent = htmlContent.replaceAll("<tbody>", "<tbody style='border: 1px solid black !important;'>");htmlContent = htmlContent.replaceAll("<tfoot>", "<tfoot style='border: 1px solid black !important;'>");// 增加全局CSS样式(确保表格和目录样式正确)String style = "<style>\n" +"table { border: 1px solid black !important; border-collapse: collapse; width: 100%; }\n" +"td, th { border: 1px solid black !important; padding: 5px; text-align: left; }\n" +"tr { border: 1px solid black !important; }\n" +"ul { list-style-type: none; padding: 0; }\n" + // 去掉默认的列表样式"li { margin: 5px 0; }\n" + // 设置目录项的间距"</style>\n";htmlContent = style + htmlContent;// 将最终的HTML内容写入文件writeFile(htmlContent, outPutFile);
}

        该方法功能实现:

  • .docx 文件转换为 HTML 文件。
  • 自动生成基于文档标题的目录 (TOC)。
  • 为标题添加锚点链接,支持 HTML 页面内跳转。
  • 处理分页符,将其转换为 HTML 的 <div> 元素。
  • 增强表格样式,添加边框和对齐(有时原表格css样式转换后会被覆盖掉)。
  • 为 HTML 页面添加全局 CSS 样式,保证视觉效果统一。

三、doc转换html

        示例代码如下:

public static void doctoHtml(String fileName, String outPutFile) throws TransformerException, IOException, ParserConfigurationException {// 开始计时long startTime = System.currentTimeMillis();// 读取 Word 文档HWPFDocument wordDocument = new HWPFDocument(new FileInputStream(fileName));// 创建 Word 转 HTML 转换器WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());// 图片保存路径设置String imageFolderPath = tempPath + "images" + File.separator;  // 存储图片的绝对路径// 设置图片管理器,处理图片保存逻辑wordToHtmlConverter.setPicturesManager(new PicturesManager() {public String savePicture(byte[] content, PictureType pictureType, String suggestedName, float widthInches, float heightInches) {String picturePath = imageFolderPath + suggestedName;  // 图片保存路径File imageFolder = new File(imageFolderPath);if (!imageFolder.exists()) {boolean created = imageFolder.mkdirs(); // 创建图片文件夹if (created) {System.out.println("在以下位置创建图片文件夹:" + imageFolder.getAbsolutePath());} else {System.out.println("创建图片文件夹失败");}}try {File pictureFile = new File(picturePath);try (FileOutputStream fos = new FileOutputStream(pictureFile)) {fos.write(content);  // 写入图片数据System.out.println("图片保存路径" + pictureFile.getAbsolutePath());}} catch (IOException e) {e.printStackTrace();}return picturePath;  // 返回图片路径}});// 处理文档内容,转换为 HTMLwordToHtmlConverter.processDocument(wordDocument);// 获取生成的 HTML 文档Document htmlDocument = wordToHtmlConverter.getDocument();// 自定义分页符处理:查找文档中的分页符并插入到 HTML 中NodeList bodyNodes = htmlDocument.getElementsByTagName("body");if (bodyNodes.getLength() > 0) {Node bodyNode = bodyNodes.item(0);  // 获取 HTML 中的 <body> 节点NodeList paragraphs = bodyNode.getChildNodes();for (int i = 0; i < paragraphs.getLength(); i++) {Node paragraph = paragraphs.item(i);if (paragraph.getNodeType() == Node.ELEMENT_NODE && paragraph.getNodeName().equals("p")) {String innerText = paragraph.getTextContent();if (innerText.contains("\f")) {  // 检查是否包含分页符(\f)// 创建自定义分页符 HTML 元素Element pageBreak = htmlDocument.createElement("div");pageBreak.setAttribute("class", "page-break");  // 设置 class 属性,方便样式控制pageBreak.appendChild(htmlDocument.createTextNode(" "));// 在分页符前插入自定义分页符标记bodyNode.insertBefore(pageBreak, paragraph);}}}}// 将 HTML 文档输出为字节流ByteArrayOutputStream out = new ByteArrayOutputStream();DOMSource domSource = new DOMSource(htmlDocument);StreamResult streamResult = new StreamResult(out);// 使用 Transformer 进行 HTML 格式化输出TransformerFactory tf = TransformerFactory.newInstance();Transformer serializer = tf.newTransformer();serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");  // 设置编码为 UTF-8serializer.setOutputProperty(OutputKeys.INDENT, "yes");  // 格式化输出serializer.setOutputProperty(OutputKeys.METHOD, "html");  // 输出格式为 HTMLserializer.transform(domSource, streamResult);out.close();// 将字节流转换为字符串String htmlContent = new String(out.toByteArray());// 处理特殊标记符,例如去掉目录标记(根据需要调整)htmlContent = htmlContent.replaceAll("TOC \\\\o \"1-3\" \\\\h \\\\z \\\\u", "");// 将生成的 HTML 内容写入文件writeFile(htmlContent, outPutFile);// 输出生成文件的信息及用时System.out.println("Generate " + outPutFile + " with " + (System.currentTimeMillis() - startTime) + " ms.");
}

        该方法功能实现:

  • .doc 格式的 Word 文档转换为 HTML 文件。
  • 提取并保存文档中的图片到指定路径,并在 HTML 中插入图片引用。
  • 处理分页符,将分页符(\f)替换为自定义的 HTML 标记。
  • 格式化生成的 HTML 文件,便于阅读和使用。
http://www.yayakq.cn/news/858342/

相关文章:

  • 制作网站要找什么公司株洲芦淞区
  • 自建网站百度专业3合1网站建设价格
  • 校园网站建设平台在线设计平台的消费者分析
  • 网站推广策划包含哪些内容厦门网站建设网络推广
  • 公司展厅设计公司哪家好一点aso优化前景
  • 苏州做网站哪家公司好在线赚钱平台
  • 番禺网站 优化网站代备案需要多少钱
  • 建设网站后怎么发布毕设做桌面端还是网站
  • 做jsp网站用哪些软件安徽网站开发公司
  • 网站建设如何自学百度经验官方网站登录入口
  • 做网站的代码有哪些17网站一起做网店 新塘
  • 站长要维护网站html5 爱情网站模板
  • 网站建设和架构株洲网红打卡地
  • 新乡市网站建设有哪些公司推广普通话手抄报内容
  • 建设银行对公网站打不开北京网站制作开发公司
  • 网站做二维码吗免费天眼查公司查询
  • 有后天管理的网站怎么建设wordpress 商业授权
  • 网站seo优化公司深圳办公室设计
  • 杭州做网站哪里好phpcms 笑话网站
  • 推广网站要注意什么网站建设都需要哪些书
  • 网站建设功能定位怎么写安徽工程建设信息网实名制查询
  • 大同百度做网站多少钱wordpress 体验
  • 宁波网站建设团队北京旧房翻新装修公司排名
  • 网站地址推荐郑州软件开发工资
  • 建设网站需要哪些条件深圳网站制作哪家好薇
  • 专业网站建设公司电话个人网站备案没有座机
  • 农业信息网站建设白酒招商网站大全
  • python做网站显示表格呼和浩特企业网站排名优化
  • 出口手工艺品网站建设方案wordpress漫画主题推荐
  • 南昌做网站和微信小程序的公司wordpress 工作流