偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Java + iTextPDF 實(shí)現(xiàn) PDF 文件實(shí)時(shí)處理,開(kāi)啟新紀(jì)元

開(kāi)發(fā)
Java 與 iTextPDF 的完美結(jié)合,為我們帶來(lái)了全新的解決方案,讓我們能夠輕松應(yīng)對(duì)這一挑戰(zhàn),開(kāi)啟 PDF 文件處理的新紀(jì)元。接下來(lái),就讓我們一起深入探索 Java + iTextPDF 的奇妙世界吧。

在當(dāng)今數(shù)字化的時(shí)代,企業(yè)級(jí)應(yīng)用中 PDF 文件扮演著至關(guān)重要的角色。無(wú)論是合同簽署、報(bào)表生成還是文檔歸檔,PDF 文件都以其穩(wěn)定性和專(zhuān)業(yè)性成為首選格式。而對(duì)于有一定經(jīng)驗(yàn)的 Java 開(kāi)發(fā)者來(lái)說(shuō),如何在項(xiàng)目中實(shí)現(xiàn) PDF 文件的實(shí)時(shí)生成與預(yù)覽,是一個(gè)極具挑戰(zhàn)性卻又非常實(shí)用的技術(shù)需求。

想象一下,在一個(gè)在線(xiàn)合同簽訂系統(tǒng)中,用戶(hù)填寫(xiě)完合同信息后,系統(tǒng)能夠瞬間生成 PDF 格式的合同文件,并讓用戶(hù)實(shí)時(shí)預(yù)覽,這將極大地提升用戶(hù)體驗(yàn)和工作效率。然而,傳統(tǒng)的 PDF 處理方式往往復(fù)雜且耗時(shí),難以滿(mǎn)足實(shí)時(shí)性的要求。

但別擔(dān)心,Java 與 iTextPDF 的完美結(jié)合,為我們帶來(lái)了全新的解決方案,讓我們能夠輕松應(yīng)對(duì)這一挑戰(zhàn),開(kāi)啟 PDF 文件處理的新紀(jì)元。接下來(lái),就讓我們一起深入探索 Java + iTextPDF 的奇妙世界吧。

iTextPDF 的核心概念與原理 

iTextPDF 是基于 Java 的一個(gè)強(qiáng)大的 PDF 操作庫(kù),它遵循 PDF 的規(guī)范,通過(guò)創(chuàng)建和操作 PDF 文檔的各種元素來(lái)實(shí)現(xiàn)對(duì) PDF 文件的處理。iTextPDF 采用了文檔對(duì)象模型(DOM)的概念,一個(gè) PDF 文檔被視為一個(gè)由各種元素組成的樹(shù)形結(jié)構(gòu),這些元素包括頁(yè)面、段落、表格、圖片等。通過(guò)操作這些元素,我們可以構(gòu)建出復(fù)雜的 PDF 文檔。例如,我們可以創(chuàng)建一個(gè) Document 對(duì)象來(lái)表示整個(gè) PDF 文檔,然后向其中添加 Paragraph、Image、Table 等對(duì)象來(lái)豐富文檔的內(nèi)容。

iTextPDF 的工作原理是基于 PDF 的流式布局。PDF 文件是一種流式文檔格式,其內(nèi)容是按照一定的順序和規(guī)則進(jìn)行排列的。iTextPDF 通過(guò)模擬 PDF 的生成過(guò)程,將內(nèi)容以流的形式寫(xiě)入到 PDF 文件中。在生成 PDF 文件時(shí),iTextPDF 會(huì)根據(jù)文檔的結(jié)構(gòu)和內(nèi)容,自動(dòng)計(jì)算頁(yè)面的布局和元素的位置,從而確保 PDF 文件的顯示效果符合預(yù)期。

iTextPDF 還提供了豐富的 API,方便開(kāi)發(fā)者對(duì) PDF 文檔進(jìn)行各種操作。例如,我們可以使用 PdfWriter 類(lèi)將 PDF 文檔寫(xiě)入到文件或輸出流中,使用 PdfReader 類(lèi)讀取現(xiàn)有的 PDF 文件,還可以通過(guò)各種事件監(jiān)聽(tīng)器來(lái)實(shí)現(xiàn)對(duì) PDF 文檔的動(dòng)態(tài)操作,如添加頁(yè)眉頁(yè)腳、處理文檔的打開(kāi)和關(guān)閉事件等。

從零開(kāi)始搭建 PDF 生成與預(yù)覽系統(tǒng) 

在開(kāi)發(fā)環(huán)境中創(chuàng)建一個(gè)新的 Java 項(xiàng)目。我們以一個(gè)簡(jiǎn)單的 Web 應(yīng)用項(xiàng)目為例,使用 IntelliJ IDEA 作為開(kāi)發(fā)工具,創(chuàng)建一個(gè) Maven 項(xiàng)目。在 pom.xml 文件中添加 iTextPDF 的依賴(lài)。iTextPDF 提供了豐富的功能,我們可以根據(jù)項(xiàng)目需求選擇合適的版本。例如,對(duì)于大多數(shù)場(chǎng)景來(lái)說(shuō),com.itextpdf:itext7-core:7.1.15 是一個(gè)不錯(cuò)的選擇。添加以下代碼到 pom.xml 文件中:

<dependencies>
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itext7-core</artifactId>
        <version>7.1.15</version>
    </dependency>
</dependencies>

在創(chuàng)建項(xiàng)目時(shí),還需要配置好開(kāi)發(fā)環(huán)境,確保所有的依賴(lài)都正確下載并導(dǎo)入到項(xiàng)目中。如果遇到依賴(lài)下載失敗的問(wèn)題,可以嘗試切換 Maven 的鏡像源,或者手動(dòng)下載依賴(lài)包后添加到本地倉(cāng)庫(kù)。

搭建項(xiàng)目的整體架構(gòu)和模塊劃分。我們將項(xiàng)目分為前端和后端兩個(gè)部分。前端負(fù)責(zé)用戶(hù)界面的展示和交互,后端負(fù)責(zé)處理業(yè)務(wù)邏輯和生成 PDF 文件。在前端頁(yè)面中,用戶(hù)可以輸入一些信息,例如姓名、地址、聯(lián)系方式等,然后通過(guò)一個(gè)按鈕觸發(fā) PDF 文件的生成和預(yù)覽。后端接收到前端的請(qǐng)求后,使用 iTextPDF 庫(kù)生成 PDF 文件,并將文件以流的形式返回給前端進(jìn)行展示。

實(shí)現(xiàn) PDF 文件生成的核心代碼。我們需要?jiǎng)?chuàng)建一個(gè) Document 對(duì)象,然后向其中添加各種內(nèi)容元素。例如,我們可以先添加一個(gè)簡(jiǎn)單的段落內(nèi)容。下面是一個(gè)示例代碼:

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;

public class PdfGenerator {
    public static void main(String[] args) {
        // 創(chuàng)建 PdfWriter 對(duì)象,用于將 PDF 寫(xiě)入到文件中
        PdfWriter writer = new PdfWriter("output.pdf");
        // 創(chuàng)建 PdfDocument 對(duì)象
        PdfDocument pdfDoc = new PdfDocument(writer);
        // 創(chuàng)建 Document 對(duì)象
        Document document = new Document(pdfDoc);
        // 添加一個(gè)段落內(nèi)容
        document.add(new Paragraph("Hello, this is a PDF generated by iTextPDF!"));
        // 關(guān)閉文檔
        document.close();
        System.out.println("PDF generated successfully.");
    }
}

運(yùn)行這段代碼后,會(huì)在項(xiàng)目的根目錄下生成一個(gè)名為 output.pdf 的文件,文件中包含了一句簡(jiǎn)單的歡迎語(yǔ)。這只是最基礎(chǔ)的功能,我們還可以通過(guò) iTextPDF 的 API 添加更多復(fù)雜的內(nèi)容,如表格、圖片、鏈接等。

為了實(shí)現(xiàn)動(dòng)態(tài)內(nèi)容生成,我們需要根據(jù)用戶(hù)輸入來(lái)生成 PDF 文件。例如,用戶(hù)在前端頁(yè)面中輸入了自己的姓名和地址,后端就可以將這些信息動(dòng)態(tài)地添加到 PDF 文檔中。在代碼中,我們可以使用占位符或者動(dòng)態(tài)生成內(nèi)容元素,如下所示:

public void generateDynamicPdf(String name, String address) {
    PdfWriter writer = new PdfWriter("dynamic_output.pdf");
    PdfDocument pdfDoc = new PdfDocument(writer);
    Document document = new Document(pdfDoc);

    document.add(new Paragraph("Name: " + name));
    document.add(new Paragraph("Address: " + address));

    document.close();
}

最后,在實(shí)現(xiàn) PDF 文件預(yù)覽功能時(shí),我們需要在前端頁(yè)面中嵌入一個(gè) PDF 預(yù)覽器??梢允褂?HTML5 的 <object> 標(biāo)簽或者第三方的 PDF 查看器插件,如 PDF.js。以下是一個(gè)簡(jiǎn)單的 HTML 示例,展示如何使用 <object> 標(biāo)簽預(yù)覽 PDF 文件:

<!DOCTYPE html>
<html>
<head>
    <title>PDF Preview</title>
</head>
<body>
    <h1>Generated PDF Preview</h1>
    <object data="output.pdf" type="application/pdf" width="100%" height="800px">
        <p>Sorry, your browser doesn't support embedded PDFs. <a href="output.pdf">Download the PDF</a>.</p>
    </object>
</body>
</html>

通過(guò)這種方式,用戶(hù)可以在瀏覽器中直接預(yù)覽生成的 PDF 文件,無(wú)需下載和安裝額外的軟件。

總的來(lái)說(shuō),從零開(kāi)始搭建 PDF 生成與預(yù)覽系統(tǒng)需要考慮項(xiàng)目架構(gòu)設(shè)計(jì)、依賴(lài)配置、代碼實(shí)現(xiàn)以及用戶(hù)體驗(yàn)等多個(gè)方面。在實(shí)際開(kāi)發(fā)過(guò)程中,我們還需要不斷優(yōu)化代碼和功能,以滿(mǎn)足實(shí)際業(yè)務(wù)需求和性能要求。

功能擴(kuò)展與定制 

在掌握了基礎(chǔ)的 PDF 生成與預(yù)覽功能后,我們可以通過(guò)功能擴(kuò)展與定制,讓系統(tǒng)更加靈活和強(qiáng)大,滿(mǎn)足更多復(fù)雜的需求。我們可以為生成的 PDF 文件添加數(shù)字簽名,以確保文件的完整性和真實(shí)性。iTextPDF 提供了數(shù)字簽名的功能,我們可以使用 PdfSigner 類(lèi)來(lái)實(shí)現(xiàn)。下面是一個(gè)簡(jiǎn)單的數(shù)字簽名示例代碼:

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.signatures.IExternalSignature;
import com.itextpdf.signatures.PdfSigner;
import com.itextpdf.signatures.PrivateKeySignature;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.Certificate;

public class PdfSignerExample {
    public static void main(String[] args) throws Exception {
        // 讀取要簽名的 PDF 文件
        PdfReader reader = new PdfReader("unsigned.pdf");
        PdfWriter writer = new PdfWriter("signed.pdf");
        PdfDocument pdfDoc = new PdfDocument(reader, writer);
        PdfSigner signer = new PdfSigner(pdfDoc, writer, false);

        // 加載數(shù)字證書(shū)和私鑰
        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
        ks.load(new FileInputStream("keystore.jks"), "password".toCharArray());
        PrivateKey pk = (PrivateKey) ks.getKey("alias", "password".toCharArray());
        Certificate[] chain = ks.getCertificateChain("alias");

        // 創(chuàng)建簽名對(duì)象
        IExternalSignature pks = new PrivateKeySignature(pk, "SHA-256", "BC");
        signer.signDetached(pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CMS);
    }
}

在這個(gè)示例中,我們使用 Java 的密鑰庫(kù)(KeyStore)來(lái)加載數(shù)字證書(shū)和私鑰,并通過(guò) PdfSigner 類(lèi)對(duì) PDF 文件進(jìn)行數(shù)字簽名。簽名后的 PDF 文件將包含一個(gè)不可見(jiàn)的數(shù)字簽名,可以通過(guò)專(zhuān)用的 PDF 查看器驗(yàn)證其有效性。

除了數(shù)字簽名,我們還可以在 PDF 文件中添加水印。水印可以用于標(biāo)識(shí)文檔的狀態(tài),如 “機(jī)密” 或 “草稿”。下面是一個(gè)添加水印的示例代碼:

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.property.TextAlignment;

public class PdfWatermarkExample {
    public static void main(String[] args) throws Exception {
        PdfReader reader = new PdfReader("input.pdf");
        PdfWriter writer = new PdfWriter("output.pdf");
        PdfDocument pdfDoc = new PdfDocument(reader, writer);

        // 創(chuàng)建水印內(nèi)容
        PdfFormXObject watermark = new PdfFormXObject(new Rectangle(200, 100));
        PdfCanvas canvas = new PdfCanvas(watermark, pdfDoc);
        canvas.setFontAndSize(PdfFontFactory.createFont(), 36);
        canvas.beginText();
        canvas.setTextMatrix(0, 0);
        canvas.showText("Confidential");
        canvas.endText();

        // 將水印添加到每一頁(yè)
        for (int i = 1; i <= pdfDoc.getNumberOfPages(); i++) {
            PdfPage page = pdfDoc.getPage(i);
            PdfCanvas pageCanvas = new PdfCanvas(page);
            pageCanvas.beginFormXObject(watermark, 0, 0, page.getSize());
            pageCanvas.setRotation(Math.PI / 4); // 設(shè)置旋轉(zhuǎn)角度
            pageCanvas.addXObject(watermark, 0, 0);
            pageCanvas.endFormXObject();
        }

        pdfDoc.close();
    }
}

在這個(gè)示例中,我們創(chuàng)建了一個(gè)水印內(nèi)容,然后將其添加到 PDF 文件的每一頁(yè)中。通過(guò)設(shè)置旋轉(zhuǎn)角度,我們可以讓水印以?xún)A斜的方式顯示在頁(yè)面上。

此外,我們還可以為 PDF 文件添加頁(yè)眉和頁(yè)腳。頁(yè)眉和頁(yè)腳可以包含文檔的標(biāo)題、日期、頁(yè)碼等信息。iTextPDF 提供了事件處理機(jī)制,可以通過(guò)實(shí)現(xiàn) IEventHandler 接口來(lái)添加頁(yè)眉和頁(yè)腳。以下是一個(gè)添加頁(yè)眉和頁(yè)腳的示例代碼:

import com.itextpdf.kernel.events.Event;
import com.itextpdf.kernel.events.IEventHandler;
import com.itextpdf.kernel.events.PdfDocumentEvent;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.property.TextAlignment;

public class HeaderFooterExample {
    public static class HeaderFooterHandler implements IEventHandler {
        public void handleEvent(Event event) {
            PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
            PdfDocument pdfDoc = docEvent.getDocument();
            PdfPage page = docEvent.getPage();
            int pageNumber = pdfDoc.getPageNumber(page);

            PdfCanvas pdfCanvas = new PdfCanvas(page.createNewContentStreamAfter(), page.getResources(), pdfDoc);
            Canvas canvas = new Canvas(pdfCanvas, pdfDoc, page.getPageSize());

            // 添加頁(yè)眉
            canvas.showTextAligned(new Paragraph("Header"), 300, 800, TextAlignment.CENTER);

            // 添加頁(yè)腳
            canvas.showTextAligned(new Paragraph("Page " + pageNumber), 300, 30, TextAlignment.CENTER);

            pdfCanvas.release();
        }
    }

    public static void main(String[] args) throws Exception {
        PdfWriter writer = new PdfWriter("output.pdf");
        PdfDocument pdfDoc = new PdfDocument(writer);
        Document document = new Document(pdfDoc);

        // 添加內(nèi)容
        document.add(new Paragraph("Hello, this is a PDF with header and footer."));

        // 注冊(cè)頁(yè)眉和頁(yè)腳事件
        pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new HeaderFooterHandler());

        document.close();
    }
}

在這個(gè)示例中,我們通過(guò)實(shí)現(xiàn) IEventHandler 接口,定義了一個(gè)事件處理程序,用于在每一頁(yè)的開(kāi)頭和結(jié)尾添加頁(yè)眉和頁(yè)腳。通過(guò)這種方式,我們可以輕松地為 PDF 文件添加統(tǒng)一的樣式和信息。

最后,我們還可以將系統(tǒng)與數(shù)據(jù)庫(kù)和第三方 API 集成。例如,我們可以從數(shù)據(jù)庫(kù)中獲取 PDF 文件的內(nèi)容,或者調(diào)用第三方 API 來(lái)獲取報(bào)表數(shù)據(jù)。以下是一個(gè)從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)生成 PDF 文件的示例代碼:

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DatabaseIntegrationExample {
    public static void main(String[] args) {
        try {
            // 連接到數(shù)據(jù)庫(kù)
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery("SELECT * FROM users");

            // 創(chuàng)建 PDF 文件
            PdfWriter writer = new PdfWriter("users.pdf");
            PdfDocument pdfDoc = new PdfDocument(writer);
            Document document = new Document(pdfDoc);

            // 將數(shù)據(jù)庫(kù)數(shù)據(jù)寫(xiě)入 PDF 文件
            while (resultSet.next()) {
                String name = resultSet.getString("name");
                String email = resultSet.getString("email");
                document.add(new Paragraph(name + " - " + email));
            }

            document.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在這個(gè)示例中,我們使用 JDBC 連接到數(shù)據(jù)庫(kù),并從數(shù)據(jù)庫(kù)中獲取用戶(hù)數(shù)據(jù),然后將其寫(xiě)入 PDF 文件中。通過(guò)這種方式,我們可以實(shí)現(xiàn)動(dòng)態(tài)生成包含實(shí)時(shí)數(shù)據(jù)的 PDF 文件。

綜上所述,通過(guò)功能擴(kuò)展與定制,我們可以將 Java + iTextPDF 的 PDF 生成與預(yù)覽系統(tǒng)打造成一個(gè)強(qiáng)大而靈活的工具,滿(mǎn)足各種復(fù)雜的需求。從數(shù)字簽名到水印、頁(yè)眉頁(yè)腳,再到數(shù)據(jù)庫(kù)和第三方 API 的集成,這些功能都可以通過(guò) iTextPDF 的 API 和 Java 的相關(guān)技術(shù)輕松實(shí)現(xiàn),為開(kāi)發(fā)者提供了無(wú)限的可能。

性能優(yōu)化與最佳實(shí)踐 

在實(shí)際應(yīng)用中,PDF 文件的生成和預(yù)覽可能會(huì)面臨一些性能挑戰(zhàn),如生成大文件時(shí)內(nèi)存占用過(guò)高、預(yù)覽加載速度緩慢等。為了解決這些問(wèn)題,我們需要對(duì)系統(tǒng)進(jìn)行性能優(yōu)化,并遵循一些最佳實(shí)踐。我們可以采用流式處理來(lái)優(yōu)化 PDF 文件的生成。在生成大文件時(shí),傳統(tǒng)的將整個(gè)文檔內(nèi)容一次性加載到內(nèi)存中的方式會(huì)消耗大量的內(nèi)存資源,導(dǎo)致系統(tǒng)性能下降甚至崩潰。而流式處理則可以將內(nèi)容分塊寫(xiě)入到 PDF 文件中,避免了內(nèi)存不足的問(wèn)題。例如,可以使用 PdfWriter 的流式 API,將生成的內(nèi)容直接寫(xiě)入到輸出流中,而不是先緩存到內(nèi)存中。

合理利用緩存可以提高 PDF 文件的預(yù)覽性能。在預(yù)覽大量 PDF 文件時(shí),每次都重新生成 PDF 文件會(huì)增加系統(tǒng)的負(fù)載。我們可以將生成的 PDF 文件緩存到服務(wù)器的內(nèi)存或磁盤(pán)中,并設(shè)置合理的緩存過(guò)期時(shí)間。當(dāng)用戶(hù)再次請(qǐng)求相同的 PDF 文件時(shí),可以?xún)?yōu)先從緩存中獲取,從而減少生成 PDF 文件的次數(shù),提高系統(tǒng)的響應(yīng)速度。

此外,我們還可以通過(guò)優(yōu)化代碼結(jié)構(gòu)和邏輯來(lái)提升性能。例如,避免在循環(huán)中重復(fù)創(chuàng)建和銷(xiāo)毀對(duì)象,盡量復(fù)用對(duì)象;合理使用線(xiàn)程池,避免線(xiàn)程的頻繁創(chuàng)建和銷(xiāo)毀;對(duì)數(shù)據(jù)庫(kù)查詢(xún)進(jìn)行優(yōu)化,減少不必要的數(shù)據(jù)傳輸和計(jì)算等。

在最佳實(shí)踐方面,我們需要遵循一些編碼規(guī)范和設(shè)計(jì)原則。例如,使用有意義的變量名和方法名,提高代碼的可讀性和可維護(hù)性;為系統(tǒng)中的關(guān)鍵組件和復(fù)雜邏輯編寫(xiě)單元測(cè)試和集成測(cè)試,確保系統(tǒng)的穩(wěn)定性和可靠性;合理規(guī)劃系統(tǒng)的架構(gòu)和模塊劃分,避免模塊之間的緊密耦合,提高系統(tǒng)的擴(kuò)展性和靈活性。

此外,我們還需要關(guān)注系統(tǒng)的安全性。在處理 PDF 文件時(shí),可能會(huì)涉及到用戶(hù)的敏感數(shù)據(jù),因此必須對(duì)這些數(shù)據(jù)進(jìn)行加密和保護(hù)。例如,在傳輸 PDF 文件時(shí),使用 HTTPS 協(xié)議進(jìn)行加密傳輸;在存儲(chǔ) PDF 文件時(shí),使用加密算法對(duì)文件進(jìn)行加密存儲(chǔ);對(duì)用戶(hù)的輸入進(jìn)行嚴(yán)格的驗(yàn)證和過(guò)濾,防止惡意用戶(hù)通過(guò)輸入攻擊系統(tǒng)。

責(zé)任編輯:趙寧寧 來(lái)源: Java技術(shù)營(yíng)地
相關(guān)推薦

2024-11-20 09:55:04

2012-12-04 15:47:45

2014-11-07 17:29:04

2012-09-05 09:35:38

云計(jì)算微軟IT平臺(tái)

2015-08-26 13:37:51

戴爾云計(jì)算

2017-11-21 14:14:04

PHPnode.js圖片訪問(wèn)

2020-12-09 15:02:10

IBM

2024-10-23 15:40:00

2010-03-09 11:40:30

IBM智慧建筑

2018-12-13 12:03:59

閃存

2015-01-06 10:01:17

iPhone 6移動(dòng)支付

2014-04-24 18:11:08

新平臺(tái) 新價(jià)格 天翼云

2024-07-29 10:31:09

2017-03-14 16:22:50

中興 通訊

2016-09-28 17:45:01

IDCC

2016-10-08 13:42:05

IDCC
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)