整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線(xiàn):

          網(wǎng)頁(yè)制作之css行內(nèi)、塊元素相互轉(zhuǎn)化

          <script src="https://lf3-cdn-tos.bytescm.com/obj/cdn-static-resource/tt_player/tt.player.js?v=20160723"></script>

          1.常用的塊級(jí)元素和行內(nèi)元素有:

          塊級(jí)元素:h1至h6,div p ul dl dt dd form table等。

          行內(nèi)元素:strong em span b I a img input等。

          2.相互轉(zhuǎn)化

          想讓自己獨(dú)占一行就用塊級(jí)元素(div,dl,dt,dd,ul,li...),想讓元素和其它元素在一行就用行內(nèi)元素(span,a,img)。

          他們之間可以通過(guò)樣式來(lái)轉(zhuǎn)換:

          display:block;

          display:inline;

          display:inline-block;

          將對(duì)象呈遞為內(nèi)聯(lián)元素,與其它的元素同處一行,但是內(nèi)部又呈現(xiàn)出塊級(jí)元素,也就是可以設(shè)置寬度和高度,打破了塊級(jí)元素和內(nèi)聯(lián)元素的區(qū)別。

          .什么是tika?

          Tika是一個(gè)內(nèi)容分析工具,自帶全面的parser工具類(lèi),能解析基本所有常見(jiàn)格式的文件,得到文件的metadata,content等內(nèi)容,返回格式化信息??偟膩?lái)說(shuō)可以作為一個(gè)通用的解析工具。特別對(duì)于搜索引擎的數(shù)據(jù)抓去和處理步驟有重要意義。Tika是Apache的Lucene項(xiàng)目下面的子項(xiàng)目,在lucene的應(yīng)用中可以使用tika獲取大批量文檔中的內(nèi)容來(lái)建立索引,非常方便,也很容易使用。Apache Tika toolkit可以自動(dòng)檢測(cè)各種文檔(如word,ppt,xml,csv,ppt等)的類(lèi)型并抽取文檔的元數(shù)據(jù)和文本內(nèi)容。Tika集成了現(xiàn)有的文檔解析庫(kù),并提供統(tǒng)一的接口,使針對(duì)不同類(lèi)型的文檔進(jìn)行解析變得更簡(jiǎn)單。Tika針對(duì)搜索引擎索引、內(nèi)容分析、轉(zhuǎn)化等非常有用。

          Tika架構(gòu)

          應(yīng)用程序員可以很容易地在他們的應(yīng)用程序集成Tika。Tika提供了一個(gè)命令行界面和圖形用戶(hù)界面,使它比較人性化。在本章中,我們將討論構(gòu)成Tika架構(gòu)的四個(gè)重要模塊。下圖顯示了Tika的四個(gè)模塊的體系結(jié)構(gòu):

          • 語(yǔ)言檢測(cè)機(jī)制。
          • MIME檢測(cè)機(jī)制。
          • Parser接口。
          • Tika Facade 類(lèi).

          語(yǔ)言檢測(cè)機(jī)制

          每當(dāng)一個(gè)文本文件被傳遞到Tika,它將檢測(cè)在其中的語(yǔ)言。它接受沒(méi)有語(yǔ)言的注釋文件和通過(guò)檢測(cè)該語(yǔ)言添加在該文件的元數(shù)據(jù)信息。支持語(yǔ)言識(shí)別,Tika 有一類(lèi)叫做語(yǔ)言標(biāo)識(shí)符在包org.apache.tika.language及語(yǔ)言識(shí)別資料庫(kù)里面包含了語(yǔ)言檢測(cè)從給定文本的算法。Tika 內(nèi)部使用N-gram算法語(yǔ)言檢測(cè)。

          MIME檢測(cè)機(jī)制

          Tika可以根據(jù)MIME標(biāo)準(zhǔn)檢測(cè)文檔類(lèi)型。Tika默認(rèn)MIME類(lèi)型檢測(cè)是使用org.apache.tika.mime.mimeTypes。它使用org.apache.tika.detect.Detector 接口大部分內(nèi)容類(lèi)型檢測(cè)。內(nèi)部Tika使用多種技術(shù),如文件匹配替換,內(nèi)容類(lèi)型提示,魔術(shù)字節(jié),字符編碼,以及其他一些技術(shù)。

          解析器接口

          org.apache.tika.parser 解析器接口是Tika解析文檔的主要接口。該接口從提取文檔中的文本和元數(shù)據(jù),并總結(jié)了其對(duì)外部用戶(hù)愿意寫(xiě)解析器插件。采用不同的具體解析器類(lèi),具體為各個(gè)文檔類(lèi)型,Tika 支持大量的文件格式。這些格式的具體類(lèi)不同的文件格式提供支持,無(wú)論是通過(guò)直接實(shí)現(xiàn)邏輯分析器或使用外部解析器庫(kù)。

          Tika Facade 類(lèi)

          使用的Tika facade類(lèi)是從Java調(diào)用Tika的最簡(jiǎn)單和直接的方式,而且也沿用了外觀的設(shè)計(jì)模式??梢栽?Tika API的org.apache.tika包Tika 找到外觀facade類(lèi)。通過(guò)實(shí)現(xiàn)基本用例,Tika作為facade的代理。它抽象了的Tika庫(kù)的底層復(fù)雜性,例如MIME檢測(cè)機(jī)制,解析器接口和語(yǔ)言檢測(cè)機(jī)制,并提供給用戶(hù)一個(gè)簡(jiǎn)單的接口來(lái)使用。

          2.代碼工程

          實(shí)驗(yàn)?zāi)繕?biāo)

          實(shí)現(xiàn)word文檔轉(zhuǎn)html

          pom.xml

          <?xml version="1.0" encoding="UTF-8"?>
          <project xmlns="http://maven.apache.org/POM/4.0.0"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
              <parent>
                  <artifactId>springboot-demo</artifactId>
                  <groupId>com.et</groupId>
                  <version>1.0-SNAPSHOT</version>
              </parent>
              <modelVersion>4.0.0</modelVersion>
          
              <artifactId>tika</artifactId>
          
              <properties>
                  <maven.compiler.source>8</maven.compiler.source>
                  <maven.compiler.target>8</maven.compiler.target>
              </properties>
              <dependencies>
          
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-web</artifactId>
                  </dependency>
          
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-autoconfigure</artifactId>
                  </dependency>
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-test</artifactId>
                      <scope>test</scope>
                  </dependency>
                  <dependency>
                      <groupId>org.apache.tika</groupId>
                      <artifactId>tika-parsers</artifactId>
                      <version>1.17</version>
                  </dependency>
                  <dependency>
                      <groupId>org.projectlombok</groupId>
                      <artifactId>lombok</artifactId>
                  </dependency>
          
              </dependencies>
          </project>

          controller

          package com.et.tika.controller;
          
          import com.et.tika.convertor.WordToHtmlConverter;
          import com.et.tika.dto.ConvertedDocumentDTO;
          import lombok.extern.slf4j.Slf4j;
          import org.springframework.beans.factory.annotation.Autowired;
          import org.springframework.web.bind.annotation.RequestMapping;
          import org.springframework.web.bind.annotation.RequestMethod;
          import org.springframework.web.bind.annotation.RequestParam;
          import org.springframework.web.bind.annotation.RestController;
          import org.springframework.web.multipart.MultipartFile;
          
          import java.util.HashMap;
          import java.util.Map;
          
          @RestController
          @Slf4j
          public class HelloWorldController {
              @RequestMapping("/hello")
              public Map<String, Object> showHelloWorld(){
                  Map<String, Object> map = new HashMap<>();
                  map.put("msg", "HelloWorld");
                  return map;
              }
              @Autowired
              WordToHtmlConverter converter;
          
          
          
              /**
               * Transforms the Word document into HTML document and returns the transformed document.
               *
               * @return  The content of the uploaded document as HTML.
               */
              @RequestMapping(value = "/api/word-to-html", method = RequestMethod.POST)
              public ConvertedDocumentDTO convertWordDocumentIntoHtmlDocument(@RequestParam(value = "file", required = true) MultipartFile wordDocument) {
                  log.info("Converting word document into HTML document");
          
                  ConvertedDocumentDTO htmlDocument = converter.convertWordDocumentIntoHtml(wordDocument);
          
                  log.info("Converted word document into HTML document.");
                  log.trace("The created HTML markup looks as follows: {}", htmlDocument);
          
                  return htmlDocument;
              }
          }

          WordToHtmlConverter

          package com.et.tika.convertor;
          
          
          import com.et.tika.dto.ConvertedDocumentDTO;
          import com.et.tika.exception.DocumentConversionException;
          import lombok.extern.slf4j.Slf4j;
          import org.apache.tika.exception.TikaException;
          import org.apache.tika.metadata.Metadata;
          import org.apache.tika.parser.ParseContext;
          import org.apache.tika.parser.Parser;
          import org.apache.tika.parser.microsoft.ooxml.OOXMLParser;
          import org.slf4j.Logger;
          import org.slf4j.LoggerFactory;
          import org.springframework.stereotype.Component;
          import org.springframework.web.multipart.MultipartFile;
          import org.xml.sax.SAXException;
          
          import javax.xml.transform.OutputKeys;
          import javax.xml.transform.TransformerException;
          import javax.xml.transform.sax.SAXTransformerFactory;
          import javax.xml.transform.sax.TransformerHandler;
          import javax.xml.transform.stream.StreamResult;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.StringWriter;
          
          /**
           *
           */
          @Component
          @Slf4j
          public class WordToHtmlConverter {
          
          
              /**
               * Converts a .docx document into HTML markup. This code
               * is based on <a href="http://stackoverflow.com/a/9053258/313554">this StackOverflow</a> answer.
               *
               * @param wordDocument  The converted .docx document.
               * @return
               */
              public ConvertedDocumentDTO convertWordDocumentIntoHtml(MultipartFile wordDocument) {
                  log.info("Converting word document: {} into HTML", wordDocument.getOriginalFilename());
                  try {
                      InputStream input = wordDocument.getInputStream();
                      Parser parser = new OOXMLParser();
          
                      StringWriter sw = new StringWriter();
                      SAXTransformerFactory factory = (SAXTransformerFactory)
                              SAXTransformerFactory.newInstance();
                      TransformerHandler handler = factory.newTransformerHandler();
                      handler.getTransformer().setOutputProperty(OutputKeys.ENCODING, "utf-8");
                      handler.getTransformer().setOutputProperty(OutputKeys.METHOD, "html");
                      handler.getTransformer().setOutputProperty(OutputKeys.INDENT, "yes");
                      handler.setResult(new StreamResult(sw));
          
                      Metadata metadata = new Metadata();
                      metadata.add(Metadata.CONTENT_TYPE, "text/html;charset=utf-8");
                      parser.parse(input, handler, metadata, new ParseContext());
                      return new ConvertedDocumentDTO(wordDocument.getOriginalFilename(), sw.toString());
                  }
                  catch (IOException | SAXException | TransformerException | TikaException ex) {
                      log.error("Conversion failed because an exception was thrown", ex);
                      throw new DocumentConversionException(ex.getMessage(), ex);
                  }
              }
          }

          dto

          package com.et.tika.dto;
          
          import org.apache.commons.lang.builder.ToStringBuilder;
          
          /**
           *
           */
          public  class ConvertedDocumentDTO {
          
              private final String contentAsHtml;
              private final String filename;
          
              public ConvertedDocumentDTO(String filename, String contentAsHtml) {
                  this.contentAsHtml = contentAsHtml;
                  this.filename = filename;
              }
          
              public String getContentAsHtml() {
                  return contentAsHtml;
              }
          
              public String getFilename() {
                  return filename;
              }
          
              @Override
              public String toString() {
                  return new ToStringBuilder(this)
                          .append("filename", this.filename)
                          .append("contentAsHtml", this.contentAsHtml)
                          .toString();
              }
          }

          自定義異常

          package com.et.tika.exception;
          
          /**
           *
           */
          public final class DocumentConversionException extends RuntimeException {
          
              public DocumentConversionException(String message, Exception ex) {
                  super(message, ex);
              }
          }

          以上只是一些關(guān)鍵代碼,所有代碼請(qǐng)參見(jiàn)下面代碼倉(cāng)庫(kù)

          代碼倉(cāng)庫(kù)

          • https://github.com/Harries/springboot-demo

          3.測(cè)試

          啟動(dòng)Spring Boot應(yīng)用

          測(cè)試word轉(zhuǎn)html

          4.引用

          • https://tika.apache.org/
          • http://www.liuhaihua.cn/archives/710679.html

          何在前端JavaScript開(kāi)發(fā)中使用ES新特性?babel是什么?.babelrc文件又是干什么用的?文件中的presets和plugins又是什么鬼?本文將解答上述疑問(wèn)。

          babel是什么

          babel是一個(gè)JavaScript編譯器

          為什么要babel

          ES規(guī)范今年來(lái)更新較為頻繁,近幾個(gè)版本推出很多新的特性,而用戶(hù)的瀏覽器版本眾多,很多用戶(hù)用的是老版本瀏覽器,老版本瀏覽器不支持ES新特(nodejs也存在同樣問(wèn)題,參見(jiàn)),babel就是用來(lái)讓你可以使用ES新特性,又可以使代碼運(yùn)行在老版本瀏覽器上。

          Babel 通過(guò)語(yǔ)法轉(zhuǎn)換器支持最新版本的 JavaScript 。 語(yǔ)法轉(zhuǎn)換插件允許你立刻使用新語(yǔ)法,無(wú)需等待瀏覽器支持。

          babel工作流程簡(jiǎn)介

          解析-->轉(zhuǎn)換-->生成代碼
          
          • 解析生成AST語(yǔ)法樹(shù)
          • 根據(jù)插件對(duì)AST樹(shù)進(jìn)行遍歷轉(zhuǎn)譯并得到新的AST樹(shù)(新特性轉(zhuǎn)譯)
          • 生成代碼

          babel使用

          1.在構(gòu)建工具中(以webpack為例)使用:

          // 在webpack.config.js中增加babel-loader,如下所示
          module: {
           rules: [
           { test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" }
           ]
          }
          

          2.在babel-cli中使用

          npm install -g babel-cli
          babel src -d lib // 將src中的代碼轉(zhuǎn)譯并將生成的文件放到lib目錄下
          復(fù)制代碼
          

          babel的配置

          babel的配置是要告訴babel工具使用哪些插件轉(zhuǎn)譯代碼,主要作用于babel工作的第二階段(轉(zhuǎn)譯)

          babel工作前會(huì)從.babelrc文件讀取配置,根據(jù)配置對(duì)JavaScript進(jìn)行轉(zhuǎn)譯。

          下面以.babelrc文件的配置方式為例介紹,配置項(xiàng)主要有兩個(gè),presets,plugins;

          {
           "presets": ["env"],
           "plugins": ["babel-plugin-transform-object-assign"]
          }
          

          plugins配置具體插件,而對(duì)于ES新特性需要配置的插件多達(dá)幾十個(gè),如果一一配置就太麻煩來(lái),于是babel給我們提供一些插件集,插件集配置在presets配置項(xiàng)中,目前官方提供的插件集有:

          1. env
          2. react
          3. flow

          其中 env(babel-preset-env)相當(dāng)于 es2015 ,es2016 ,es2017 及最新版本。

          4. stage-X

          Stage-x preset 中的任何轉(zhuǎn)換都是對(duì)未被批準(zhǔn)為 JavaScript 版本一部分的語(yǔ)言的變化(如 es6 / es2015 ),其分為以下5各階段:

          Stage 0 - 稻草人: 只是一個(gè)想法,可能是 babel 插件。
          Stage 1 - 提案: 初步嘗試。
          Stage 2 - 初稿: 完成初步規(guī)范。
          Stage 3 - 候選: 完成規(guī)范和瀏覽器初步實(shí)現(xiàn)。
          Stage 4 - 完成: 將被添加到下一年度發(fā)布。
          

          上述配置的插件和插件集也是需要通過(guò)npm安裝的

          npm install babel-preset-env --save-dev
          npm install babel-plugin-transform-object-assign --save-dev
          

          babel presets(轉(zhuǎn)換插件集)配置

          "presets": ["env"] // 默認(rèn)將運(yùn)行所有transfrom和集成所有的polyfill
          

          也可以?xún)H僅配置項(xiàng)目所支持瀏覽器所需的polyfill和transform。只編譯所需的代碼會(huì)使你的代碼包更小。如下所示,該轉(zhuǎn)換只支持每個(gè)瀏覽器最后兩個(gè)版本和safari大于等于7的版本所需的polyfill和代碼轉(zhuǎn)換。


          主站蜘蛛池模板: 精品免费久久久久国产一区| 色一情一乱一伦一区二区三欧美 | 寂寞一区在线观看| 无码人妻精品一区二区三区夜夜嗨 | 一区二区亚洲精品精华液| 91在线一区二区| 亚洲一区二区久久| 精品国产一区二区三区在线| 国产精品亚洲综合一区| 亚洲AV无码一区二区三区牛牛| 亚洲AV成人精品日韩一区18p| 多人伦精品一区二区三区视频| 国产高清视频一区二区| 成人无码精品一区二区三区| 久久高清一区二区三区| 亚洲一区中文字幕在线观看| 国产短视频精品一区二区三区| 国产福利微拍精品一区二区| 国产精品自拍一区| 亚洲福利视频一区二区| 亚洲午夜在线一区| 精品一区二区高清在线观看| 色视频综合无码一区二区三区 | 精品视频在线观看你懂的一区| 国精产品999一区二区三区有限| 亚洲丶国产丶欧美一区二区三区 | 亚洲av鲁丝一区二区三区| 在线免费视频一区| 伊人久久大香线蕉av一区| 久久婷婷久久一区二区三区| 无码人妻AⅤ一区二区三区| 午夜影院一区二区| 久久一区二区精品| 成人免费区一区二区三区| 久久精品岛国av一区二区无码| 亚洲图片一区二区| 人妻内射一区二区在线视频| 国产精品免费大片一区二区| 九九久久99综合一区二区| 亚洲一区欧洲一区| 久久精品国产第一区二区三区|