最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?與?LibreOffice?集成開發(fā)指南(環(huán)境搭建及代碼示例)

 更新時(shí)間:2025年08月07日 11:51:54   作者:從零開始學(xué)習(xí)人工智能  
本文介紹Java與LibreOffice的集成方法,涵蓋環(huán)境配置、API調(diào)用、文檔轉(zhuǎn)換、UNO橋接及REST接口等技術(shù),提供代碼示例與常見問題解決方案,幫助開發(fā)者實(shí)現(xiàn)跨平臺(tái)文檔自動(dòng)化處理與編輯功能,感興趣的朋友跟隨小編一起看看吧

1. 引言

Java 與 LibreOffice 的集成開發(fā)為開發(fā)者提供了一種強(qiáng)大的工具,用于實(shí)現(xiàn)文檔自動(dòng)化處理、文檔轉(zhuǎn)換、內(nèi)容編輯等任務(wù)。通過 Java 調(diào)用 LibreOffice 提供的 API,可以實(shí)現(xiàn)跨平臺(tái)的文檔處理功能,滿足各種業(yè)務(wù)需求。本文將詳細(xì)介紹如何使用 Java 與 LibreOffice 進(jìn)行集成開發(fā),包括環(huán)境搭建、代碼示例、常見問題解決等內(nèi)容。

2. 環(huán)境搭建

2.1 安裝 LibreOffice

在開始開發(fā)之前,需要確保系統(tǒng)中已安裝 LibreOffice。LibreOffice 是一個(gè)開源的辦公軟件套件,支持多種操作系統(tǒng),包括 Windows、macOS 和 Linux??梢詮?LibreOffice 官方網(wǎng)站下載并安裝適合您操作系統(tǒng)的版本。

2.2 配置 Java 開發(fā)環(huán)境

確保您的系統(tǒng)中已安裝 Java 開發(fā)工具包(JDK)??梢酝ㄟ^訪問 Oracle 官方網(wǎng)站 或使用 OpenJDK 來下載和安裝 JDK。安裝完成后,設(shè)置環(huán)境變量 JAVA_HOME 指向 JDK 的安裝目錄,并確保 javacjava 命令可以在命令行中正常使用。

2.3 配置 LibreOffice SDK

LibreOffice 提供了強(qiáng)大的 SDK,用于支持 Java 開發(fā)。安裝 LibreOffice SDK 的步驟如下:

  1. 在 LibreOffice 安裝目錄中找到 SDK 文件夾。例如,在 Windows 系統(tǒng)中,路徑通常為 C:\Program Files\LibreOffice\program\SDK。
  2. SDK 文件夾中的 lib 子文件夾添加到項(xiàng)目的類路徑中。這通??梢酝ㄟ^在 IDE(如 IntelliJ IDEA 或 Eclipse)中配置項(xiàng)目的構(gòu)建路徑來完成。
  3. 確保 unoil.jar 和其他相關(guān) JAR 文件已正確添加到項(xiàng)目的依賴中。

3. Java 與 LibreOffice 的基本集成

添加依賴庫:在Java項(xiàng)目中添加LibreOffice的依賴庫??梢酝ㄟ^以下命令添加Maven依賴:

<dependency>
    <groupId>org.libreoffice</groupId>
    <artifactId>libreoffice</artifactId>
    <version>版本號(hào)</version>
</dependency>

3.1 啟動(dòng) LibreOffice

在 Java 程序中啟動(dòng) LibreOffice 的基本代碼如下:

import com.sun.star.comp.helper.Bootstrap;
import com.sun.star.uno.XComponentContext;
public class LibreOfficeStarter {
    public static void main(String[] args) {
        try {
            // 啟動(dòng) LibreOffice
            XComponentContext xContext = Bootstrap.bootstrap();
            System.out.println("LibreOffice started successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3.2 加載和保存文檔

以下代碼展示了如何加載一個(gè)現(xiàn)有的 LibreOffice 文檔,并將其保存為 PDF 格式:

import com.sun.star.beans.PropertyValue;
import com.sun.star.comp.helper.Bootstrap;
import com.sun.star.frame.XComponentLoader;
import com.sun.star.lang.XComponent;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
public class DocumentLoaderAndSaver {
    public static void main(String[] args) {
        try {
            // 啟動(dòng) LibreOffice
            XComponentContext xContext = Bootstrap.bootstrap();
            // 獲取服務(wù)管理器
            com.sun.star.lang.XMultiComponentFactory xMCF = xContext.getServiceManager();
            // 加載文檔
            XComponentLoader xComponentLoader = UnoRuntime.queryInterface(
                    XComponentLoader.class,
                    xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", xContext)
            );
            String inputFilePath = "file:///path/to/your/document.docx"; // 替換為你的文件路徑
            String outputFilePath = "file:///path/to/save/document.pdf"; // 替換為保存路徑
            XComponent xComponent = xComponentLoader.loadComponentFromURL(
                    inputFilePath, "_blank", 0, new PropertyValue[0]
            );
            // 保存為 PDF
            PropertyValue[] properties = new PropertyValue[1];
            properties[0] = new PropertyValue();
            properties[0].Name = "FilterName";
            properties[0].Value = "writer_pdf_Export";
            xComponent.storeToURL(outputFilePath, properties);
            System.out.println("Document converted to PDF successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3.3 創(chuàng)建新文檔并插入內(nèi)容

以下代碼展示了如何創(chuàng)建一個(gè)新的 LibreOffice 文檔,并在其中插入文本內(nèi)容:

import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.frame.XDesktop;
import com.sun.star.frame.XComponent;
import com.sun.star.text.XTextDocument;
import com.sun.star.text.XText;
import com.sun.star.text.XTextCursor;
public class DocumentCreator {
    public static void main(String[] args) {
        try {
            // 獲取 LibreOffice 的組件上下文
            XComponentContext xContext = UnoRuntime.createXComponentContext(null);
            // 獲取多服務(wù)工廠
            XMultiServiceFactory xFactory = (XMultiServiceFactory) xContext.getServiceManager();
            // 獲取桌面組件
            XDesktop xDesktop = (XDesktop) xFactory.createInstance("com.sun.star.frame.Desktop");
            // 創(chuàng)建一個(gè)新文檔
            XComponent xComponent = xDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, null);
            // 獲取文檔
            XTextDocument xTextDocument = (XTextDocument) xComponent.getModel();
            // 獲取文本
            XText xText = xTextDocument.getText();
            // 獲取文本游標(biāo)
            XTextCursor xTextCursor = xText.createTextCursor();
            // 寫入內(nèi)容
            xTextCursor.setString("這是一個(gè)通過 Java 創(chuàng)建的 LibreOffice 文檔。");
            // 保存文檔
            xTextDocument.store();
            // 關(guān)閉文檔
            xComponent.dispose();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4. 高級(jí)功能

4.1 文檔轉(zhuǎn)換服務(wù)

可以通過 Java 調(diào)用一個(gè)運(yùn)行 LibreOffice 服務(wù)的服務(wù)器,實(shí)現(xiàn)文檔的轉(zhuǎn)換。以下是一個(gè)基于 Java 調(diào)用 LibreOffice 服務(wù)器將 PPT 轉(zhuǎn)換為 PDF 的示例:

package com.litongjava.libreoffice;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class LibreOfficeClient {
    public static void convertToPdf(String filePath, String outputFilePath) {
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            HttpPost uploadFile = new HttpPost("http://127.0.0.1/api/ppt/pdf"); // 替換為 LibreOffice 服務(wù)器的地址
            File file = new File(filePath);
            HttpEntity multipartEntity = MultipartEntityBuilder.create()
                    .addBinaryBody("file", file, ContentType.APPLICATION_OCTET_STREAM, file.getName())
                    .build();
            uploadFile.setEntity(multipartEntity);
            HttpResponse response = httpClient.execute(uploadFile);
            HttpEntity responseEntity = response.getEntity();
            if (responseEntity != null) {
                byte[] pdfBytes = EntityUtils.toByteArray(responseEntity);
                Files.write(Paths.get(outputFilePath), pdfBytes);
                System.out.println("PDF file saved to: " + outputFilePath);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        String filePath = "path/to/your/presentation.pptx"; // 替換為 PPT 文件路徑
        String outputFilePath = "path/to/save/presentation.pdf"; // 替換為保存 PDF 的路徑
        convertToPdf(filePath, outputFilePath);
    }
}

4.2 使用 Apache POI 結(jié)合 LibreOffice

Apache POI 是一個(gè)流行的 Java 庫,用于處理 Microsoft Office 格式的文件。雖然它主要用于處理 .docx.xlsx 等格式,但可以通過結(jié)合 LibreOffice 的 UNO 橋接技術(shù),實(shí)現(xiàn)對 LibreOffice 文檔的處理。以下是一個(gè)使用 Apache POI 創(chuàng)建 Word 文檔的示例:

import org.apache.poi.xwpf.usermodel.*;
public class LibreOfficeWithApachePOI {
    public static void main(String[] args) {
        try (XWPFDocument document = new XWPFDocument()) {
            XWPFParagraph paragraph = document.createParagraph();
            XWPFRun run = paragraph.createRun();
            run.setText("Hello, LibreOffice with Apache POI!");
            // 保存文檔
            document.write(new FileOutputStream("example.docx"));
            System.out.println("Document created successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4.3 使用 UNO 平臺(tái)調(diào)用 LibreOffice 功能(續(xù))

UNO 平臺(tái)是一個(gè)開源的跨平臺(tái)框架,用于調(diào)用 LibreOffice 的功能。通過 UNO 平臺(tái),開發(fā)者可以輕松地將 LibreOffice 集成到 Java 應(yīng)用程序中。以下是一個(gè)使用 UNO 平臺(tái)將文檔轉(zhuǎn)換為 PDF 的示例:

示例代碼

import org.unoconv.Unoconv;
import org.unoconv.UnoconvBuilder;
public class UnoPlatformExample {
    public static void main(String[] args) {
        try {
            // 創(chuàng)建 Unoconv 實(shí)例
            Unoconv unoconv = new UnoconvBuilder().build();
            // 調(diào)用 LibreOffice 轉(zhuǎn)換命令
            unoconv.run("libreoffice", "--convert-to", "pdf", "--outdir", "output", "input.docx");
            System.out.println("Document processed successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

說明

  • Unoconv 是一個(gè)命令行工具,用于調(diào)用 LibreOffice 的轉(zhuǎn)換功能。
  • UnoconvBuilder 用于創(chuàng)建 Unoconv 實(shí)例。
  • run 方法用于執(zhí)行具體的轉(zhuǎn)換命令,其中 "libreoffice" 是 LibreOffice 的命令行工具路徑,"--convert-to" 指定目標(biāo)格式,"--outdir" 指定輸出目錄,"input.docx" 是要轉(zhuǎn)換的文件路徑。

4.4 使用 REST API 調(diào)用 LibreOffice

除了直接使用 Java API 或 UNO 平臺(tái),還可以通過 REST API 調(diào)用 LibreOffice 的功能。這種方式特別適合在分布式系統(tǒng)中使用,例如通過一個(gè)獨(dú)立的 LibreOffice 服務(wù)器來處理文檔轉(zhuǎn)換任務(wù)。

示例代碼

以下是一個(gè)使用 Java 調(diào)用 LibreOffice REST API 將文檔轉(zhuǎn)換為 PDF 的示例:

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class LibreOfficeRestClient {
    public static void convertToPdf(String filePath, String outputFilePath) {
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            // 創(chuàng)建 HTTP POST 請求
            HttpPost httpPost = new HttpPost("http://127.0.0.1:8080/api/convert"); // 替換為 LibreOffice REST API 的地址
            // 創(chuàng)建文件實(shí)體
            File file = new File(filePath);
            HttpEntity multipartEntity = MultipartEntityBuilder.create()
                    .addBinaryBody("file", file, ContentType.APPLICATION_OCTET_STREAM, file.getName())
                    .build();
            // 設(shè)置請求實(shí)體
            httpPost.setEntity(multipartEntity);
            // 發(fā)送請求
            HttpResponse response = httpClient.execute(httpPost);
            // 檢查響應(yīng)狀態(tài)
            if (response.getStatusLine().getStatusCode() == 200) {
                HttpEntity responseEntity = response.getEntity();
                byte[] pdfBytes = EntityUtils.toByteArray(responseEntity);
                // 保存 PDF 文件
                Files.write(Paths.get(outputFilePath), pdfBytes);
                System.out.println("PDF file saved to: " + outputFilePath);
            } else {
                System.out.println("Failed to convert document. Status code: " + response.getStatusLine().getStatusCode());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        String filePath = "path/to/your/document.docx"; // 替換為要轉(zhuǎn)換的文件路徑
        String outputFilePath = "path/to/save/document.pdf"; // 替換為保存 PDF 的路徑
        convertToPdf(filePath, outputFilePath);
    }
}

說明

  • 使用 HttpClient 發(fā)送 HTTP POST 請求。
  • 使用 MultipartEntityBuilder 創(chuàng)建包含文件的請求體。
  • 從響應(yīng)中提取 PDF 文件并保存到指定路徑。

5. 常見問題及解決方案

5.1 LibreOffice 無法啟動(dòng)

如果在啟動(dòng) LibreOffice 時(shí)遇到問題,可能是由于以下原因之一:

  • LibreOffice 未正確安裝。
  • JDK 版本與 LibreOffice 不兼容。
  • 環(huán)境變量未正確配置。

解決方案

  1. 確保 LibreOffice 已正確安裝,并且可以通過命令行啟動(dòng)。
  2. 確保 JDK 版本與 LibreOffice 兼容(推薦使用 JDK 11 或更高版本)。
  3. 配置環(huán)境變量 JAVA_HOME 指向 JDK 的安裝目錄,并確保 PATH 包含 JDK 的 bin 目錄。

5.2 文檔轉(zhuǎn)換失敗

如果在轉(zhuǎn)換文檔時(shí)遇到問題,可能是由于以下原因之一:

  • 輸入文件路徑或格式不正確。
  • 輸出目錄不可寫。
  • LibreOffice 服務(wù)器未正確運(yùn)行。

解決方案

  1. 確保輸入文件路徑和格式正確。
  2. 確保輸出目錄存在且具有寫權(quán)限。
  3. 確保 LibreOffice 服務(wù)器正在運(yùn)行,并且可以通過網(wǎng)絡(luò)訪問。

5.3 性能問題

如果在處理大量文檔時(shí)遇到性能問題,可能是由于以下原因之一:

  • LibreOffice 服務(wù)器的資源不足。
  • 網(wǎng)絡(luò)延遲較高。
  • 代碼中存在性能瓶頸。

解決方案

  1. 確保 LibreOffice 服務(wù)器具有足夠的 CPU 和內(nèi)存資源。
  2. 優(yōu)化網(wǎng)絡(luò)配置,減少網(wǎng)絡(luò)延遲。
  3. 使用多線程或異步處理來提高性能。

6. 最佳實(shí)踐

6.1 使用日志記錄

在開發(fā)過程中,使用日志記錄可以幫助您更好地跟蹤程序的運(yùn)行狀態(tài)和問題??梢允褂?SLF4JLog4j 等日志框架來記錄日志。

示例代碼

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DocumentProcessor {
    private static final Logger logger = LoggerFactory.getLogger(DocumentProcessor.class);
    public static void main(String[] args) {
        try {
            // 啟動(dòng) LibreOffice
            logger.info("Starting LibreOffice...");
            XComponentContext xContext = Bootstrap.bootstrap();
            logger.info("LibreOffice started successfully.");
            // 加載文檔
            logger.info("Loading document...");
            XComponent xComponent = loadDocument(xContext, "file:///path/to/your/document.docx");
            logger.info("Document loaded successfully.");
            // 保存為 PDF
            logger.info("Converting document to PDF...");
            saveAsPdf(xContext, xComponent, "file:///path/to/save/document.pdf");
            logger.info("Document converted to PDF successfully.");
        } catch (Exception e) {
            logger.error("Error occurred during document processing", e);
        }
    }
    private static XComponent loadDocument(XComponentContext xContext, String filePath) throws Exception {
        // 省略加載文檔的代碼
    }
    private static void saveAsPdf(XComponentContext xContext, XComponent xComponent, String outputFilePath) throws Exception {
        // 省略保存為 PDF 的代碼
    }
}

6.2 代碼復(fù)用

將常用的文檔處理功能封裝成方法或類,以提高代碼的可復(fù)用性和可維護(hù)性。

示例代碼

public class LibreOfficeUtils {
    public static XComponentContext startLibreOffice() throws Exception {
        return Bootstrap.bootstrap();
    }
    public static XComponent loadDocument(XComponentContext xContext, String filePath) throws Exception {
        // 省略加載文檔的代碼
    }
    public static void saveAsPdf(XComponentContext xContext, XComponent xComponent, String outputFilePath) throws Exception {
        // 省略保存為 PDF 的代碼
    }
}

6.3 錯(cuò)誤處理

在處理文檔時(shí),可能會(huì)遇到各種錯(cuò)誤。合理地處理這些錯(cuò)誤可以提高程序的健壯性。

示例代碼

public class DocumentProcessor {
    public static void main(String[] args) {
        try {
            XComponentContext xContext = LibreOfficeUtils.startLibreOffice();
            XComponent xComponent = LibreOfficeUtils.loadDocument(xContext, "file:///path/to/your/document.docx");
            LibreOfficeUtils.saveAsPdf(xContext, xComponent, "file:///path/to/save/document.pdf");
        } catch (Exception e) {
            logger.error("Error occurred during document processing", e);
        }
    }
}

7. 總結(jié)

Java 與 LibreOffice 的集成開發(fā)為開發(fā)者提供了一種強(qiáng)大的工具,用于實(shí)現(xiàn)文檔自動(dòng)化處理、文檔轉(zhuǎn)換、內(nèi)容編輯等任務(wù)。通過本文的介紹,您應(yīng)該能夠掌握如何使用 Java 調(diào)用 LibreOffice 提供的 API,實(shí)現(xiàn)跨平臺(tái)的文檔處理功能。希望本文對您的開發(fā)工作有所幫助。

8. 參考資料

到此這篇關(guān)于Java 與 LibreOffice 集成開發(fā)指南含環(huán)境搭建及代碼示例的文章就介紹到這了,更多相關(guān)Java 集成 LibreOffice內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Junit單元測試關(guān)于@Transactional注解引起的事務(wù)回滾問題

    Junit單元測試關(guān)于@Transactional注解引起的事務(wù)回滾問題

    這篇文章主要介紹了Junit單元測試關(guān)于@Transactional注解引起的事務(wù)回滾問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 數(shù)據(jù)庫阿里連接池 druid配置詳解

    數(shù)據(jù)庫阿里連接池 druid配置詳解

    本篇文章主要介紹了數(shù)據(jù)庫阿里連接池 druid配置詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 一篇文章帶你了解JVM垃圾回收

    一篇文章帶你了解JVM垃圾回收

    這篇文章主要介紹了JVM的種垃圾回收,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • 學(xué)習(xí)非阻塞的同步機(jī)制CAS

    學(xué)習(xí)非阻塞的同步機(jī)制CAS

    現(xiàn)代的處理器都包含對并發(fā)的支持,其中最通用的方法就是比較并交換(compare and swap),簡稱CAS。下面我們來一起學(xué)習(xí)一下吧
    2019-05-05
  • 重學(xué)SpringBoot3之日志Logging使用方式

    重學(xué)SpringBoot3之日志Logging使用方式

    在日常開發(fā)中會(huì)遇到不同的異常,日志方便我們?nèi)ヅ挪樘幚?這篇文章主要給大家介紹了關(guān)于重學(xué)SpringBoot3之日志Logging使用方式的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • 使用Jackson-json解析一個(gè)嵌套的json字符串

    使用Jackson-json解析一個(gè)嵌套的json字符串

    這篇文章主要介紹了使用Jackson-json解析一個(gè)嵌套的json字符串,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java中Thread類詳解及常用的方法

    Java中Thread類詳解及常用的方法

    在java中談到線程,必然少不了Thread類,下面這篇文章主要給大家介紹了關(guān)于Java中Thread類及常用的方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • springboot整合freemarker的踩坑及解決

    springboot整合freemarker的踩坑及解決

    這篇文章主要介紹了springboot整合freemarker的踩坑及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java使用反射操作數(shù)組示例

    Java使用反射操作數(shù)組示例

    這篇文章主要介紹了Java使用反射操作數(shù)組,結(jié)合實(shí)例形式分析了基于java反射機(jī)制操作數(shù)組的創(chuàng)建、賦值、輸出等相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-07-07
  • 深入理解Java設(shè)計(jì)模式之建造者模式

    深入理解Java設(shè)計(jì)模式之建造者模式

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之建造者模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供X大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2021-11-11

最新評(píng)論

泰来县| 芜湖市| 翁牛特旗| 宁城县| 宁城县| 伽师县| 碌曲县| 丹寨县| 宜兴市| 丘北县| 淄博市| 吉木萨尔县| 高邮市| 墨脱县| 文水县| 福鼎市| 华池县| 威宁| 嘉荫县| 沙洋县| 大足县| 洛扎县| 永仁县| 中西区| 长治市| 云南省| 公安县| 琼海市| 东海县| 盐城市| 定西市| 海伦市| 昌江| 安阳市| 陵川县| 翁源县| 尤溪县| 阿尔山市| 湄潭县| 余江县| 阳朔县|