精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

完美!SpringBoot3.3 + OpenPDF + HTML模板高效生成PDF文檔

開發 前端
通過本文的講解,我們成功實現了使用 SpringBoot 3.3 結合 Thymeleaf 模板引擎、高效生成PDF文檔的功能。從環境配置、依賴管理到代碼實現,再到樣式設計和復雜布局處理,都進行了詳細的闡述。

在現代Web開發中,生成PDF文檔是一個常見的需求,無論是生成報表、導出合同還是制作發票,都需要高效、靈活的PDF生成方案。本篇文章將深入探討如何使用 SpringBoot 3.3 結合 Thymeleaf、JavaScript 和 Bootstrap 實現高效的PDF文檔生成,并通過詳細的代碼示例和配置說明,幫助大家快速上手這一技術方案。

隨著業務需求的不斷增長,傳統的PDF生成方式已經難以滿足復雜、多樣化的需求。使用HTML模板生成PDF具有以下優勢:

  • 可視化強:可以直接在瀏覽器中預覽效果,所見即所得。
  • 樣式靈活:借助CSS和Bootstrap,可以輕松實現復雜的布局和樣式。
  • 開發高效:前后端分離,開發維護更加便捷。

本篇文章將基于 SpringBoot 3.3,利用 Thymeleaf 模板引擎和 OpenPDF 庫,將HTML模板渲染為PDF文檔,實現高效、靈活的PDF生成方案。

運行效果:

圖片圖片

生成 pdf 效果:

圖片圖片

若想獲取項目完整代碼以及其他文章的項目源碼,且在代碼編寫時遇到問題需要咨詢交流,歡迎加入下方的知識星球。

項目環境準備

1. 開發環境

  • JDK 17:確保您的項目運行在Java 17環境下。
  • Maven 3.8+:用于項目構建和依賴管理。
  • SpringBoot 3.3:最新版本的SpringBoot框架。
  • Thymeleaf:流行的Java模板引擎。
  • OpenPDF:開源的PDF生成庫。
  • Bootstrap 5:用于前端頁面的布局和樣式。
  • JavaScript:用于增強頁面交互性。

2. 項目結構

項目的基本結構如下:

pdf-demo
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com.icoderoad.pdfdemo
│   │   │       ├── controller
│   │   │       ├── service
│   │   │       └── PdfDemoApplication.java
│   │   ├── resources
│   │   │   ├── templates
│   │   │   ├── fonts/SimSun.ttf
│   │   │   ├── static
│   │   │   └── application.yml
├── pom.xml

項目依賴配置(pom.xml)

首先,我們需要在 pom.xml 中添加必要的依賴。

<?xml versinotallow="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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.3.3</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.icoderoad</groupId>
	<artifactId>pdfdemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>pdfdemo</name>
	<description>Demo project for Spring Boot</description>
	
	<properties>
		<java.version>17</java.version>
		<openpdf.version>1.3.29</openpdf.version>
	</properties>
	<dependencies>
		<!-- Spring Boot Starter Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Thymeleaf 模板引擎 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <!-- OpenPDF 庫 -->
        <dependency>
            <groupId>com.github.librepdf</groupId>
            <artifactId>openpdf</artifactId>
            <version>${openpdf.version}</version>
        </dependency>

        <!-- HTML轉PDF工具(flying-saucer) -->
        <dependency>
            <groupId>org.xhtmlrenderer</groupId>
            <artifactId>flying-saucer-core</artifactId>
            <version>9.1.20</version>
        </dependency>
        <dependency>
            <groupId>org.xhtmlrenderer</groupId>
            <artifactId>flying-saucer-pdf-openpdf</artifactId>
            <version>9.1.20</version>
        </dependency>

        <!-- 日志框架 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

依賴說明:

  • spring-boot-starter-web:提供Web開發所需的基本依賴。
  • spring-boot-starter-thymeleaf:集成Thymeleaf模板引擎。
  • openpdf:用于生成PDF文檔的核心庫。
  • flying-saucer:將HTML轉換為PDF的工具,結合OpenPDF使用。
  • spring-boot-starter-logging:提供日志支持。

應用配置(application.yml)

在 src/main/resources 目錄下創建 application.yml 配置文件。

# application.yml
server:
  port: 8080

spring:
  thymeleaf:
    prefix: classpath:/templates/
    suffix: .html
    mode: HTML
    encoding: UTF-8
    cache: false

配置說明:

  • server.port:設置應用運行端口為8080。
  • spring.thymeleaf:配置Thymeleaf模板引擎的相關屬性,指定模板路徑、后綴、編碼等。

后端代碼實現

1. 主啟動類

創建主啟動類 PdfDemoApplication.java。

package com.icoderoad.pdfdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class PdfdemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(PdfdemoApplication.class, args);
	}

}

2. 控制器層

創建控制器類 PdfController.java,負責處理請求和生成PDF文檔。

// PdfController.java
package com.icoderoad.pdfdemo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import com.icoderoad.pdfdemo.service.PdfService;

import jakarta.servlet.http.HttpServletResponse;

@Controller
public class PdfController {

    @Autowired
    private PdfService pdfService;

    /**
     * 顯示數據預覽頁面
     * @param model 模型數據
     * @return 模板名稱
     */
    @GetMapping("/preview")
    public String preview(Model model) {
        model.addAttribute("title", "PDF文檔預覽");
        model.addAttribute("content", "這是一個使用Thymeleaf渲染的HTML內容,將被轉換為PDF文檔。");
        return "preview";
    }

    /**
     * 生成PDF文檔并下載
     * @param response HTTP響應
     * @throws Exception 異常
     */
    @GetMapping("/download")
    public void downloadPdf(HttpServletResponse response) throws Exception {
        String htmlContent = pdfService.generateHtmlContent();
        pdfService.generatePdf(response, htmlContent);
    }
}

代碼說明:

  • /preview:用于展示HTML內容的預覽頁面,方便在生成PDF前查看效果。
  • /download:生成PDF文檔并通過HTTP響應下載。

3. 服務層

創建服務類 PdfService.java,負責處理HTML內容的生成和PDF文檔的生成。

package com.icoderoad.pdfdemo.service;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;

import com.lowagie.text.DocumentException;

import jakarta.servlet.http.HttpServletResponse;

@Service
public class PdfService {

    @Autowired
    private TemplateEngine templateEngine;

    /**
     * 生成HTML內容
     * @return 渲染后的HTML字符串
     */
    public String generateHtmlContent() {
        Context context = new Context();
        context.setVariable("title", "PDF文檔標題");
        context.setVariable("content", 
        		"這是PDF文檔的主要內容:"
        		+ "“成功并不是終點,失敗也不是終結,最重要的是繼續前行的勇氣。在人生的旅途中,我們會遇到許多挑戰與挫折,這些都是成長的必經之路。每一次跌倒都是一次學習的機會,每一次失敗都為成功鋪設了基礎。只要我們保持信念,不斷努力,最終會到達夢想的彼岸。無論前方的路有多么坎坷,只要心懷希望,我們就有無限的可能性去改變自己的命運,實現心中的理想。”"
        		+ "由Thymeleaf模板引擎渲染。"
        		+ "");
        return templateEngine.process("pdf_template", context);
    }

    /**
     * 將HTML內容轉換為PDF并寫入響應
     * @param response HTTP響應
     * @param htmlContent HTML內容
     * @throws IOException IO異常
     * @throws DocumentException 文檔異常
     */
    public void generatePdf(HttpServletResponse response, String htmlContent) throws IOException, DocumentException {
        // 設置響應類型
        response.setContentType("application/pdf");
        response.setHeader("Content-Disposition", "attachment; filename=generated.pdf");

        // 創建ITextRenderer實例
        ITextRenderer renderer = new ITextRenderer();
       
        // 設置字體路徑,使用 classpath 加載字體
        ITextFontResolver fontResolver = renderer.getFontResolver();
        ClassPathResource fontResource = new ClassPathResource("fonts/SimSun.ttf");
        System.out.println(fontResource.getFile().getAbsolutePath());
        fontResolver.addFont(fontResource.getFile().getAbsolutePath(), "Identity-H", true);
        
        renderer.setDocumentFromString(htmlContent);
        renderer.layout();

        // 輸出PDF到響應輸出流
        try (OutputStream outputStream = response.getOutputStream()) {
            renderer.createPDF(outputStream);
            outputStream.flush();
        }
    }
}

代碼說明:

  • generateHtmlContent():使用Thymeleaf模板引擎渲染HTML內容,填充模板變量。
  • generatePdf():使用 ITextRenderer 將HTML內容轉換為PDF文檔,并寫入HTTP響應,供用戶下載。

注意事項:

  • 模板引擎配置:TemplateEngine 需要在配置類中進行相應設置,這里通過自動裝配注入。
  • 字符編碼:確保HTML內容的字符編碼為UTF-8,避免中文亂碼。

前端代碼實現

1. Thymeleaf模板

在 src/main/resources/templates 目錄下創建 preview.html 和 pdf_template.html 兩個模板文件。

1.1 preview.html

用于在瀏覽器中預覽內容。

<!-- preview.html -->
<!DOCTYPE html>
<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title th:text="${title}">PDF預覽</title>
    <!-- 引入Bootstrap CSS -->
    <link rel="stylesheet" >
</head>
<body>
    <div class="container mt-5">
        <h1 class="text-center" th:text="${title}">PDF文檔預覽</h1>
        <p class="mt-4" th:text="${content}">這里是內容部分。</p>
        <div class="text-center mt-5">
            <a href="/pdf-demo/download" class="btn btn-primary">下載PDF文檔</a>
        </div>
    </div>
    <!-- 引入Bootstrap JS -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

代碼說明:

  • 使用 Bootstrap 5 進行簡單的頁面布局和樣式設計。
  • 通過Thymeleaf的 th:text 屬性渲染動態內容。
  • 提供一個下載PDF的按鈕,鏈接到 /download`。

1.2 pdf_template.html

用于生成PDF的模板。

<!DOCTYPE html>
<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title th:text="${title}">PDF文檔</title>
    <style>
        /* 內聯CSS樣式,確保在PDF中正確渲染 */
        body {
            font-family: "SimSun", serif;
            padding: 20px;
            line-height: 1.6;
        }
        h1 {
            text-align: center;
            margin-bottom: 40px;
            color: #333;
        }
        p {
            font-size: 16px;
            color: #555;
        }
        .footer {
            text-align: center;
            margin-top: 50px;
            font-size: 12px;
            color: #999;
        }
    </style>
</head>
<body>
    <h1 th:text="${title}">PDF文檔標題</h1>
    <p th:text="${content}">這是PDF文檔的內容部分,由Thymeleaf模板引擎渲染。</p>
    <div class="footer">
        <p>? 2024 路條編程 - 保留所有權利。</p>
    </div>
</body>
</html>

代碼說明:

  • 內聯樣式:為了確保PDF中樣式正確渲染,使用內聯CSS樣式。
  • 字體設置:指定 font-family 為中文字體(如 "SimSun"),避免中文顯示亂碼。
  • 內容布局:簡單的標題、內容和頁腳布局,滿足基本的PDF文檔需求。

2. 靜態資源

對于簡單的示例,我們直接使用CDN引入Bootstrap的CSS和JS。如果需要自定義樣式和腳本,可以在 src/main/resources/static 目錄下添加相應的文件。

運行與測試

1. 啟動應用

在項目根目錄下執行以下命令啟動應用:

mvn spring-boot:run

2. 訪問預覽頁面

在瀏覽器中訪問:

http://localhost:8080/preview

您將看到預覽頁面,展示了將要生成的PDF內容。

3. 下載PDF文檔

在預覽頁面點擊“下載PDF文檔”按鈕,瀏覽器將自動下載生成的PDF文件 generated.pdf。

效果展示:

生成的PDF文檔應當包含正確的中文內容和樣式,確保沒有亂碼和樣式錯亂。

深度解析

1. 為什么選擇OpenPDF和Flying Saucer

OpenPDF 是一個功能強大且穩定的開源PDF庫,支持豐富的PDF操作。而 Flying Saucer 是一個專門用于將XHTML/CSS轉換為PDF的庫,與OpenPDF兼容性良好。兩者結合,可以方便地將HTML模板轉換為高質量的PDF文檔。

優勢:

  • 易于使用:API簡潔明了,集成方便。
  • 支持CSS樣式:能夠很好地渲染復雜的CSS樣式,滿足多樣化的布局需求。
  • 開源免費:無版權限制,適用于商業項目。

2. 字體和編碼問題

在生成包含中文內容的PDF時,常常會遇到亂碼或字體缺失的問題。為了解決這些問題,我們需要:

  • 指定中文字體:在CSS中設置 font-family 為系統支持的中文字體,如 "SimSun"、"Microsoft YaHei" 等。
  • 嵌入字體:確保PDF中嵌入所需的字體文件,可以通過配置ITextRenderer來實現。
  • 設置編碼:確保HTML內容和生成的PDF使用統一的UTF-8編碼。

示例:嵌入字體

renderer.getFontResolver().addFont("path/to/simsun.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

注意:需要將字體文件放在項目的資源目錄中,并指定正確的路徑。

3. 處理復雜布局和樣式

對于復雜的PDF文檔,可以在HTML模板中使用更豐富的Bootstrap組件和自定義CSS,實現多欄布局、表格、圖片等元素。同時,Thymeleaf的強大模板功能也可以幫助我們動態生成復雜的內容。

示例:在模板中使用表格

<table class="table table-bordered">
    <thead>
        <tr>
            <th>序號</th>
            <th>名稱</th>
            <th>描述</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1</td>
            <td>示例項</td>
            <td>這是一個示例描述。</td>
        </tr>
        <!-- 更多行 -->
    </tbody>
</table>

4. 動態數據填充

通過在服務層獲取數據庫或其他數據源的數據,并將其傳遞給Thymeleaf模板,我們可以動態生成包含業務數據的PDF文檔。

示例:傳遞數據列表

List<Item> items = itemService.getItems();
context.setVariable("items", items);

在模板中迭代顯示數據:

<tbody>
    <tr th:each="item, iterStat : ${items}">
        <td th:text="${iterStat.index + 1}">1</td>
        <td th:text="${item.name}">示例項</td>
        <td th:text="${item.description}">這是一個示例描述。</td>
    </tr>
</tbody>

總結

通過本文的講解,我們成功實現了使用 SpringBoot 3.3 結合 Thymeleaf 模板引擎、高效生成PDF文檔的功能。從環境配置、依賴管理到代碼實現,再到樣式設計和復雜布局處理,都進行了詳細的闡述。

優勢總結:

  • 高效性:利用現有的HTML模板和樣式,快速生成所見即所得的PDF文檔。
  • 靈活性:通過模板和數據的結合,輕松實現動態內容的生成。
  • 可維護性:清晰的前后端分離,方便維護和擴展。

未來展望:

  • 多語言支持:通過國際化配置,實現PDF文檔的多語言版本。
  • 更復雜的樣式:引入更豐富的前端框架,如Tailwind CSS,提升文檔的美觀度。
  • 性能優化:對于大批量PDF生成的場景,可以考慮異步處理和緩存機制,提升性能。

希望本文能對大家的開發工作有所幫助,助大家在項目中高效地實現PDF文檔生成功能。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2024-07-29 08:30:24

2024-09-04 11:16:44

端口Spring配置類

2024-09-02 08:17:18

2024-09-06 10:05:47

SpELSpring權限

2024-09-03 10:44:32

2024-09-30 08:10:22

2023-02-26 10:16:19

JavaPDF文檔

2024-09-03 08:26:59

Spring格式模板

2022-11-23 07:30:11

2024-09-09 11:35:35

2024-10-15 10:38:32

2024-10-16 12:23:55

技巧Spring驗證

2024-09-05 09:35:58

CGLIBSpring動態代理

2023-12-12 13:42:00

微服務生態系統Spring

2024-09-13 10:21:50

2024-09-29 10:39:48

RSocketWebSocket通信

2024-10-30 08:05:01

Spring參數電子簽章

2024-10-07 08:18:05

SpringBOM管理

2023-12-29 09:04:01

前端文件處理庫PDF.js

2024-08-13 10:36:25

SpringScrew數據庫
點贊
收藏

51CTO技術棧公眾號

91嫩草亚洲精品| 欧美日韩免费观看视频| 成人av电影在线| 欧美一区亚洲一区| 四虎影视1304t| 9l视频自拍蝌蚪9l视频成人| 一本大道久久a久久综合| 在线免费观看成人网| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的 | 顶级嫩模精品视频在线看| 668精品在线视频| 国产又黄又粗又猛又爽的| 91成人噜噜噜在线播放| 欧美日韩一区不卡| 91丨porny丨探花| 美女av在线播放| 91免费看片在线观看| 91传媒视频免费| 日韩中文字幕高清| 亚洲三级影院| 久久国产精品视频| 影音先锋制服丝袜| 亚洲伊人春色| 亚洲精品一区二区三区影院 | 妺妺窝人体色www看人体| 高清在线观看av| xfplay精品久久| 国产精品一区二区不卡视频| 国产又粗又大又黄| 日韩av中文在线观看| 97av在线视频| 精品无码人妻一区二区三区品 | 久久视频在线观看| 欧美一卡二卡三卡四卡| 天堂中文视频在线| 成人影院入口| 欧美日韩亚洲精品内裤| 精品国偷自产一区二区三区| 性欧美video高清bbw| 国产精品久久久久久久久果冻传媒 | 国产美女三级视频| 国产无遮挡裸体视频在线观看| 亚洲卡通动漫在线| 日本一道在线观看| 好吊日视频在线观看| 最新日韩av在线| 在线视频不卡国产| 免费观看在线黄色网| 国产精品色呦呦| 亚洲国产日韩美| 91社区在线| 国产精品久久久一本精品 | 综合久久综合| 欧美老妇交乱视频| 欧美日韩亚洲国产另类| 中文字幕日韩一区二区不卡 | 国产成人a级片| 国产高清在线一区| 手机av在线免费观看| 99久久精品免费看国产| 久久久人人爽| 你懂的视频在线| 中文av一区特黄| 中文字幕欧美日韩一区二区三区| 欧美r级在线| 亚洲激情男女视频| 亚洲 高清 成人 动漫| 看黄在线观看| 欧美在线综合视频| 色18美女社区| 9l视频自拍九色9l视频成人| 日韩高清人体午夜| 丁香花五月婷婷| 91精品精品| 久久久久久久久久亚洲| 国产精品久免费的黄网站| 天堂av在线一区| 成人激情免费在线| 日韩一级片免费在线观看| 91亚洲精品久久久蜜桃网站| 天堂av一区二区| 在线不卡日本v二区707| 午夜视频在线观看一区二区| 中文字幕无码不卡免费视频| 色综合视频一区二区三区44| 欧美成人性战久久| a级大片在线观看| 99久久久久久中文字幕一区| 久久久视频在线| 丰满人妻一区二区三区四区| 国产乱码精品一品二品| 久久天天狠狠| 成人免费网站在线观看视频| 粉嫩老牛aⅴ一区二区三区| 婷婷丁香激情网| 国产厕拍一区| 日韩亚洲第一页| 日韩少妇裸体做爰视频| 开心九九激情九九欧美日韩精美视频电影| 97在线电影| 二区三区在线播放| 亚洲成人黄色影院| 免费成年人高清视频| 欧美一级一片| 成人97在线观看视频| 亚洲欧美日韩激情| 成人永久aaa| 中文精品一区二区三区| 亚洲十八**毛片| 日韩美女一区二区三区| 午夜时刻免费入口| 亚洲毛片网站| 91久久极品少妇xxxxⅹ软件| av影片免费在线观看| 精品久久香蕉国产线看观看亚洲| 久久久久久久久久久久久久久国产| 欧美一区二区三区久久| 久久99热精品这里久久精品| 中文字幕日韩国产| 久久精品在线免费观看| 国产极品尤物在线| 欧美专区一区| 深夜福利一区二区| 久久久久久久亚洲| 久久先锋影音av鲁色资源网| www..com日韩| 风间由美性色一区二区三区四区 | 漫画在线观看av| 精品国产电影一区二区| www.99re7| 老司机免费视频一区二区三区| 久久亚裔精品欧美| 日本在线啊啊| 日韩国产精品亚洲а∨天堂免| 久久久久久久久精| 国产精品一二三四五| 亚洲天堂av免费在线观看| 亚洲成人毛片| www.xxxx欧美| 中文字幕在线网站| 国产精品拍天天在线| 免费看涩涩视频| 日韩大片在线观看| 国产免费一区视频观看免费| 69视频在线| 欧美乱妇20p| 久久精品一区二区三区四区五区| 久久国产精品色婷婷| 亚洲精品视频一二三| 国产福利一区二区三区在线播放| 国产一区二区三区高清在线观看| 日韩不卡高清视频| 欧美国产97人人爽人人喊| 亚洲一二三区av| 久久影院一区| av一区二区三区免费| sis001亚洲原创区| 亚洲美女av电影| 看黄色一级大片| 国产精品美女久久久久久| 涩涩网站在线看| 午夜久久美女| 国产精品我不卡| 成人影院网站| xxxxx91麻豆| 亚洲AV无码成人片在线观看| 亚洲v日本v欧美v久久精品| 欧美bbbbb性bbbbb视频| 人人精品人人爱| 老汉色影院首页| youjizz欧美| 国产成人精品视频在线观看| 在线视频二区| 日韩精品一区二区三区中文精品| 日韩黄色一级大片| 欧美经典一区二区| 一级日本黄色片| 亚洲综合99| 亚洲一区二区三区加勒比| 66精品视频在线观看| 欧美亚洲一级片| 激情在线小视频| 日韩av网站在线| 中文字幕乱码人妻无码久久| 一区二区国产盗摄色噜噜| 国产全是老熟女太爽了| 国产精品自拍在线| 97xxxxx| 欧美阿v一级看视频| 看高清中日韩色视频| 国产成人久久精品一区二区三区| 97涩涩爰在线观看亚洲| av在线播放网站| 亚洲黄一区二区| 国产一区二区在线视频观看| 日韩欧美亚洲综合| 欧美日韩在线观看成人| 欧美极品xxx| 中国黄色片视频| 蜜桃av一区二区| 日韩在线综合网| 亚洲成人三区| 日韩久久久久久久| 国色天香久久精品国产一区| 日本久久91av| 9999精品成人免费毛片在线看| 丝袜亚洲欧美日韩综合| 青青草在线视频免费观看| 日韩精品一区二区三区视频 | 亚洲欧洲第一视频| 亚洲成人777777| 欧美日韩1234| 精品不卡一区二区| 亚洲国产日韩综合久久精品| 五月天婷婷色综合| 中文字幕成人在线观看| 五级黄高潮片90分钟视频| 国产精品影视天天线| 国产91色在线观看| 久久婷婷一区| 国产成人精品视频免费看| 欧美午夜一区| 热久久最新网址| 91视频综合| 亚洲欧洲一区二区福利| 国产成人高清| 欧美在线视频二区| 亚洲精品aaaaa| 免费av一区二区三区| 伦理一区二区| 国产美女精品在线观看| baoyu135国产精品免费| 99热国产免费| 99久久香蕉| 国产精品二区三区| 99这里只有精品视频| 999日本视频| 深夜福利一区| 国产精品免费视频一区二区| 136国产福利精品导航网址应用| 91在线短视频| 亚洲天堂av资源在线观看| 91久久国产综合久久蜜月精品| 欧洲精品99毛片免费高清观看| 91美女高潮出水| 国产999精品在线观看| 95av在线视频| 在线播放一区二区精品视频| 99国精产品一二二线| 99香蕉久久| 蜜桃精品久久久久久久免费影院| 一本色道久久综合狠狠躁的番外| 免费av在线一区二区| 精品久久久久久久久久久下田| 色狠狠久久av五月综合| 99成人超碰| 美女av免费观看| 99国产精品| 欧美黄色一级片视频| 久草热8精品视频在线观看| 久久6免费视频| 成人黄页毛片网站| 女尊高h男高潮呻吟| 久久精品视频一区二区三区| 女教师淫辱の教室蜜臀av软件| 亚洲色图.com| 国产午夜福利精品| 日韩欧美在线一区| 一区二区三区www污污污网站| 欧美一区二区成人| 亚洲色欧美另类| 综合欧美国产视频二区| 1769免费视频在线观看| 97色在线播放视频| 久久精品国产福利| a级国产乱理论片在线观看99| 美女扒开腿让男人桶爽久久动漫| 日本视频一区二区在线观看| 亚洲色图网站| 国产a级一级片| 久久精品国产99国产| 91人人澡人人爽| 国产午夜亚洲精品不卡| 国产suv一区二区三区| 精品久久久久久中文字幕大豆网| 中文字幕乱码无码人妻系列蜜桃| 精品久久久久久无| 大乳在线免费观看| 久久男人的天堂| 成人国产激情在线| 黄色91av| 欧美久色视频| 婷婷激情四射五月天| av一区二区三区黑人| 刘亦菲国产毛片bd| 欧美日韩另类字幕中文| 97超碰国产在线| 亚洲色图校园春色| 国产网红在线观看| 国产一区二中文字幕在线看| 亚洲a级精品| 成人av在线播放观看| 美女视频一区二区| 30一40一50老女人毛片| 亚洲精品高清视频在线观看| 亚洲精品久久久久久久蜜桃| 亚洲精品久久久一区二区三区 | 欧美fxxxxxx另类| 91蝌蚪视频在线观看| 99国产精品久久久久久久久久久 | 欧美三级黄美女| 亚洲国产日韩欧美在线观看| 91视频.com| 久久精品美女视频| 欧美一级精品大片| av一区在线观看| 国产精品成人一区二区| 免费萌白酱国产一区二区三区| 国内自拍中文字幕| 久久成人18免费观看| 亚洲午夜精品久久久久久高潮 | 99久久亚洲精品日本无码| 亚洲视频在线观看| 女厕盗摄一区二区三区| 国产亚洲精品久久飘花| 欧美精品不卡| 久久aaaa片一区二区| 亚洲欧美日韩国产成人精品影院 | 亚洲欧美激情在线视频| 成人av影院在线观看| 444亚洲人体| 中文字幕一区二区精品区| 午夜精品久久久久久久99热影院| 国产精品免费视频一区| 中文在线免费看视频| 最新国产成人av网站网址麻豆| 成人四虎影院| 亚洲欧美综合一区| 久久99在线观看| 四虎地址8848| 欧美一区二区三区免费观看视频| 黄色网页在线免费观看| 91视频国产一区| 欧美日本一区| 黄色污在线观看| 色综合天天狠狠| freemovies性欧美| 国产一区深夜福利| 中文字幕一区二区三三| 国产男女无遮挡猛进猛出| 亚洲综合色在线| 色香蕉在线视频| 国产aⅴ夜夜欢一区二区三区| 欧美色就是色| jizz欧美性11| 亚洲女人的天堂| 亚洲精品久久久狠狠狠爱| 高清视频欧美一级| 一区二区三区日本久久久| 日日噜噜噜噜久久久精品毛片| 中文字幕av免费专区久久| 国产精品久久久久久久久久久久久久久久久久 | 99热国内精品| 极品人妻一区二区| 午夜在线成人av| 国产三级在线免费观看| 成人欧美一区二区三区黑人孕妇 | 午夜免费一区二区| 亚洲同性gay激情无套| 黄色小视频免费在线观看| 91精品国产高清久久久久久久久 | 国产精品福利一区二区三区| 国产强伦人妻毛片| 69视频在线免费观看| 成人网18免费网站| 永久看看免费大片| 日韩欧美高清视频| 免费a级人成a大片在线观看| 国产精品三区在线| 日韩av在线免费观看不卡| 中文字幕五月天| 亚洲欧美精品在线| 精品国模一区二区三区欧美 | 精品亚洲一区二区三区在线观看| 日本欧美一区| 国产又粗又猛又爽又黄的网站| 久久久久一区二区三区四区| 97在线视频人妻无码| 国产91精品青草社区| 91精品国产91久久综合| 性少妇bbw张开| 精品国产一区二区亚洲人成毛片| 国精产品一区二区三区有限公司| 午夜啪啪福利视频| 国产欧美一区视频| 熟妇人妻系列aⅴ无码专区友真希 熟妇人妻av无码一区二区三区 | 日韩欧美一级精品久久| 日韩影片中文字幕| 久艹在线免费观看| 国产精品蜜臀在线观看|