pire.PDF for Java 10.4.9 现已正式发布。该版本支持获取 PDF 文档中的 Javascript 内容,并新增了一个构造方法来解决 PdfInkAnnotation 在浏览器里没有显示的问题。此外,在提取 PDF 表格和扁平化表单域时遇到的两个问题也已成功被修复。详情请查阅以下内容。
新功能:
问题修复:
获取 Spire.PDF for Java 10.4.9 请点击:
https://www.e-iceblue.cn/Downloads/Spire-PDF-JAVA.html
jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据,可操作 HTML 元素、属性、文本。
jsoup 实现 WHATWG HTML5 规范,并将 HTML 解析为与现代浏览器相同的 DOM。
大多数情况下,下面给出 3 个类是我们需要重点了解的。
Jsoup 类是任何 Jsoup 程序的入口点,并将提供从各种来源加载和解析 HTML 文档的方法。 Jsoup 类的一些重要方法如下:
方法 | 描述 |
static Connection connect(String url) | 创建并返回 URL 的连接。 |
static Document parse(File in, String charsetName) | 将指定的字符集文件解析成文档。 |
static Document parse(String html) | 将给定的 html 代码解析成文档。 |
static String clean(String bodyHtml, Whitelist whitelist) | 从输入 HTML 返回安全的 HTML,通过解析输入 HTML 并通过允许的标签和属性的白名单进行过滤。 |
Jsoup 类的其他重要方法可以参见 - https://jsoup.org/apidocs/org/jsoup/Jsoup.html
该类表示通过 Jsoup 库加载 HTML 文档。可以使用此类执行适用于整个 HTML 文档的操作。 Element 类的重要方法可以参见 - http://jsoup.org/apidocs/org/jsoup/nodes/Document.html 。
HTML 元素是由标签名称,属性和子节点组成。 使用 Element 类,您可以提取数据,遍历节点和操作 HTML。 Element 类的重要方法可参见 - http://jsoup.org/apidocs/org/jsoup/nodes/Element.html 。
实现解析liuhaihua.cn首页list
<?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>jsoup</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.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
</dependencies>
</project>
package com.et.jsoup;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
public class HelloWorldController {
@RequestMapping("/hello")
public Map<String, Object> showHelloWorld(){
Map<String, Object> map=new HashMap<>();
map=JsoupUtil.parseHtml("http://www.liuhaihua.cn/");
map.put("msg", "HelloWorld");
return map;
}
}
package com.et.jsoup;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.HttpClientUtils;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
/**
* @author liuhaihua
* @version 1.0
* @ClassName JsoupUtil
* @Description todo
* @date 2024/06/24/ 9:16
*/
public class JsoupUtil {
public static Map<String ,Object> parseHtml(String url){
Map<String,Object> map=new HashMap<>();
//1.生成httpclient,相当于该打开一个浏览器
CloseableHttpClient httpClient=HttpClients.createDefault();
CloseableHttpResponse response=null;
//2.创建get请求,相当于在浏览器地址栏输入 网址
HttpGet request=new HttpGet(url);
//设置请求头,将爬虫伪装成浏览器
request.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36");
// HttpHost proxy=new HttpHost("60.13.42.232", 9999);
// RequestConfig config=RequestConfig.custom().setProxy(proxy).build();
// request.setConfig(config);
try {
//3.执行get请求,相当于在输入地址栏后敲回车键
response=httpClient.execute(request);
//4.判断响应状态为200,进行处理
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK) {
//5.获取响应内容
HttpEntity httpEntity=response.getEntity();
String html=EntityUtils.toString(httpEntity, "utf-8");
System.out.println(html);
/**
* 下面是Jsoup展现自我的平台
*/
//6.Jsoup解析html
Document document=Jsoup.parse(html);
//像js一样,通过标签获取title
System.out.println(document.getElementsByTag("title").first());
Elements blogmain=document.getElementsByClass("col-sm-8 blog-main");
//像js一样,通过class 获取列表下的所有博客
Elements postItems=blogmain.first().getElementsByClass("fade-in");
//循环处理每篇博客
List<Map> list=new ArrayList<>();
for (Element postItem : postItems) {
Map<String,Object> row=new HashMap<>();
//像jquery选择器一样,获取文章标题元素
Elements titleEle=postItem.select(".entry-title a");
System.out.println("文章标题:" + titleEle.text());;
row.put("title",titleEle.text());
System.out.println("文章地址:" + titleEle.attr("href"));
row.put("href",titleEle.attr("href"));
//像jquery选择器一样,获取文章作者元素
Elements footEle=postItem.select(".archive-content");
System.out.println("文章概要:" + footEle.text());;
row.put("summary",footEle.text());
Elements view=postItem.select(".views");
System.out.println( view.text());
row.put("views",view.text());
System.out.println("*********************************");
list.add(row);
}
map.put("data",list);
} else {
//如果返回状态不是200,比如404(页面不存在)等,根据情况做处理,这里略
System.out.println("返回状态不是200");
System.out.println(EntityUtils.toString(response.getEntity(), "utf-8"));
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//6.关闭
HttpClientUtils.closeQuietly(response);
HttpClientUtils.closeQuietly(httpClient);
}
return map;
}
public static void main(String[] args) {
parseHtml("http://www.liuhaihua.cn/");
}
}
package com.et.jsoup;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
以上只是一些关键代码,所有代码请参见下面代码仓库
、javaScript介绍
JavaScript是一种基于对象和事件驱动的、并具有安全性能的脚本语言
(客户端语言)
JavaScript特点
向HTML页面中添加交互行为
脚本语言,语法和Java类似
解释性语言,边解释边执行
JavaScript组成:ECMAScript 、DOM、BOM
基本结构:
<script type="text/javascript">
<!—
JavaScript 语句;
—>
</script >
示例:
……
<title>初学JavaScript</title>
</head>
<body>
<script type="text/javascript">
document.write("初学JavaScript");
document.write("<h1>Hello,JavaScript</h1>");
</script>
</body>
</html>
注:<script>…</script>可以包含在文档中的任何地方,只要保证这些代码在被使用前已读取并加载到内存即可
执行原理:
外部JS文件:
<script src="export.js" type="text/javascript"></script>
直接在HTML标签中使用:
<input name="btn" type="button" value="弹出消息框"
onclick="javascript:alert('欢迎你');"/>
二、基本常见语法:
1、核心语法:同时声明和赋值变量
var catName="皮皮";
2、数据类型:
undefined:var width;
变量width没有初始值,将被赋予值undefined;
null:表示一个空值,与undefined值相等;
number:var iNum=23; //整数
var iNum=23.0; //浮点数
boolean:true 和false;
string:一组被引号(单引号或双引号)括起来的文本
var string1="This is a string";
3、typeof运算符:
typeof检测变量的返回值
typeof运算符返回值如下函数
undefined:变量被声明后,但未被赋值
string:用单引号或双引号来声明的字符串
boolean:true或false
number:整数或浮点数
object:javascript中的对象、数组和nul
4、String对象:
5、数组:
数组的常用属性和方法
类别 名称 描述
属性 length 设置或返回数组中元素的数目
方法 join( ) 把数组的所有元素放入一个字符串,通过一个的分隔符进行分隔
sort() 对数组排序
push() 向数组末尾添加一个或更多 元素,并返回新的长度
6、逻辑控制语句:
if(条件)
{
//JavaScript代码;
}
*请认真填写需求信息,我们会在24小时内与您取得联系。