国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

將html網(wǎng)頁展示的圖表,下載到PPT文檔內(nèi),以圖片的形式展示在PPT內(nèi)

這篇具有很好參考價值的文章主要介紹了將html網(wǎng)頁展示的圖表,下載到PPT文檔內(nèi),以圖片的形式展示在PPT內(nèi)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

使用到的工具有:
開發(fā)工具:IDEA
報表開發(fā)工具:帆軟10.0.19
1、針對帆軟報表[普通報表]的設置
1.1首先選中在帆軟里制作好的報表,選擇模板web屬性
將html網(wǎng)頁展示的圖表,下載到PPT文檔內(nèi),以圖片的形式展示在PPT內(nèi),html,powerpoint,前端
1.2.選擇數(shù)據(jù)分析模式,添加一個事件設置,該事件應該設置“加載結(jié)束”
將html網(wǎng)頁展示的圖表,下載到PPT文檔內(nèi),以圖片的形式展示在PPT內(nèi),html,powerpoint,前端
1.3.在Js腳本里寫這段代碼:

var node = document.getElementsByClassName('x-table')[0].parentElement;
var message = {
	nodeId: '自定義一個別名',
	nodeInnerHTML: node.innerHTML
};
window.parent.postMessage(message, '*');

將html網(wǎng)頁展示的圖表,下載到PPT文檔內(nèi),以圖片的形式展示在PPT內(nèi),html,powerpoint,前端
–繪制表格及如何將帆軟報表展示到html不做過多贅述

給生成PPT方法添加一個按鈕事件:

$("#DOWNLOAD").on("click", function () {
        
        //給每個表格設置一個新的ID
        updateTableId();

        var timeBucket = $("#inqu_status-0-timeBucket").val();
        let orderYear = timeBucket.substring(0, 4)
        let orderMonth = timeBucket.substring(4, 6)
        let orderYearC = orderYear + '年'
        let orderMonthC = orderMonth + '月'

        var inInfo = new EiInfo();
        var promises = []; // 存儲生成圖片的 Promise

		//確保每個table都生成了BASE64編碼
        document.querySelectorAll(".html2canvas table").forEach((v, k, p) => {
            var promise = html2canvas(document.querySelector('#' + v.id), {}).then((canvas) => {

                //根據(jù)當前id獲取tr的數(shù)量。1tr假設等于11PX 從而計算出數(shù)據(jù)表格的高度
                let tableHeight = v.querySelectorAll("tr").length * 11;
                let src = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream"); // 將canvas轉(zhuǎn)換成img的src流
                console.log(v.id, k)
                inInfo.set(v.id, src)
                inInfo.set(v.id + 'Height', tableHeight.toString())
                
            });
            promises.push(promise);
        })


		//所有報表的base64編碼都在promises里后,調(diào)用后臺服務
        Promise.all(promises).then(() => {
            inInfo.set("{{Year}}", `${orderYear}`)
            inInfo.set("{{Month}}", `${orderMonth}`)
            inInfo.set("{{YearC}}", `${orderYearC}`)
            inInfo.set("{{MonthC}}", `${orderMonthC}`)
            inInfo.set("{{YearMonth}}", `${orderYear}${orderMonth}`)
            inInfo.set("{{YearMonthC}}", `${orderYearC}${orderMonthC}`)

            var jsonEi = inInfo.toJSONString(true);
            console.log(jsonEi)
            post(IPLATUI.CONTEXT_PATH + "/DownloadAgree", {"temporaryId": "PM15", "jsonEi": jsonEi});

            // IPLAT.progress($("#result"), false);
        });

        IPLAT.progress($("#result"), false);

        

    })
function updateTableId() {
    var tables = document.querySelectorAll("table[class^='x-table']");
    for (var i = 0; i < tables.length; i++) {
        tables[i].setAttribute("id", "newTableId" + i);
        num = i;
    }
}

調(diào)用后臺:DownloadAgree,通過該服務,去調(diào)用具體實現(xiàn)方法

package com.baosight.bgdsp.rp.pm;

import com.baosight.iplat4j.core.ei.EiConstant;
import com.baosight.iplat4j.core.ei.EiInfo;
import com.baosight.iplat4j.core.service.soa.XLocalManager;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class DownloadAgree extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) {
		EiInfo eiInfo = EiInfo.parseJSONString(request.getParameter("jsonEi"));
		String temporaryId = request.getParameter("temporaryId");
		if (temporaryId.equals("PM")) {
			eiInfo.set("response", response);
			eiInfo.set(EiConstant.serviceName, "R07");
			eiInfo.set(EiConstant.methodName, "exportPPT");
			eiInfo = XLocalManager.callNewTx(eiInfo);

		}if (temporaryId.equals("PM15")) {
			eiInfo.set("response", response);
			eiInfo.set(EiConstant.serviceName, "R15");
			eiInfo.set(EiConstant.methodName, "exportPPT");
			eiInfo = XLocalManager.callNewTx(eiInfo);

		}

	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		doGet(request, response);
	}
}

exportPPT方法:

public EiInfo exportPPT(EiInfo inInfo) throws IOException {
        HttpServletResponse response = (HttpServletResponse) inInfo.get("response");
        // 創(chuàng)建一個空的演示文稿
        String url = "";
        String os = System.getProperty("os.name").toLowerCase();
        boolean isMacOS = os.contains("mac");
        if (isMacOS) {
            url = PlatApplicationContext.getProperty("項目名." + projectEnv + ".share.template.mac");
        } else {
            url = PlatApplicationContext.getProperty("項目名." + projectEnv + ".share.template");
        }
        String tempName = PlatApplicationContext.getProperty("項目名." + projectEnv + ".share.template.rppm15");
        // 讀取模板文件
        //InputStream resource = new ClassPathResource("/Users/apple/Desktop/-job/2022-development/iplat4j/渠道長齡庫存壓降情況匯報_template.pptx").getInputStream();
        FileInputStream inputStream = new FileInputStream(url + tempName);
//        FileInputStream inputStream = new FileInputStream("E://" + tempName);
        // 根據(jù)模板,創(chuàng)建一個新的ppt文檔
        XMLSlideShow ppt = new XMLSlideShow(inputStream);
        // 讀取模板PPT
        inputStream.close();

        Map<String, String> attr = inInfo.getAttr();
        attr.put("netPrice_2", getReportsToimage());

//        List<XSLFSlide> slides = ppt.getSlides();
        // 得到每頁ppt
        XSLFSlide[] slides = ppt.getSlides().toArray(new XSLFSlide[0]);
        // 遍歷ppt,填充模板
        for (XSLFSlide slide : slides) {
//            List<XSLFShape> shapes = slide.getShapes();
            XSLFShape[] shapes = slide.getShapes().toArray(new XSLFShape[0]);
            // 遍歷每頁ppt中待填充的形狀組件
            for (XSLFShape shape : shapes) {
                if (shape instanceof XSLFTextShape) {
                    // 替換文本
                    XSLFTextShape textShape = (XSLFTextShape) shape;
                    String textValue = textShape.getText();
                    String shapeName = textShape.getShapeName();
                    boolean flag = false;
                    for (String text : extractContent(textValue)) {
                        if (attr.containsKey(text)) {
                            flag = true;
                            //使用mustache語法替換文字 {{YearC}}營{{MonthC}}銷預案會
                            textValue = textValue.replace(text, attr.get(text));
                        }
                    }
                    if (flag && StringUtils.isNotBlank(textValue)) {
                        List<XSLFTextParagraph> paragraphs = textShape.getTextParagraphs();
                        for (XSLFTextParagraph paragraph : paragraphs) {
                            List<XSLFTextRun> textRuns = paragraph.getTextRuns();
                            for (XSLFTextRun textRun : textRuns) {
                                textRun.setText("");
                            }
                        }
                        XSLFTextRun textRun2 = textShape.getTextParagraphs().get(0).getTextRuns().get(0);

                        textRun2.setText(textValue);
                    }
                } else if (shape instanceof XSLFPictureShape) {
                    XSLFPictureShape pictureShape = (XSLFPictureShape) shape;
                    XSLFPictureData pictureData = pictureShape.getPictureData();
                    String imageName = pictureShape.getShapeName();
                    String imageBase64 = attr.get(imageName);
                    if (imageBase64 != null) {
                        byte[] bt = Base64.getDecoder().decode(imageBase64.split(",")[1]);
                        XSLFPictureData idx = ppt.addPicture(bt, PictureData.PictureType.PNG);
                        XSLFPictureShape pic = slide.createPicture(idx);
                        Rectangle2D anchor = pictureShape.getAnchor();
                        //高度取決于數(shù)據(jù)表格的條數(shù) 寬度固定
                        pic.setAnchor(new Rectangle2D.Double(anchor.getX(), anchor.getY(), anchor.getWidth(), anchor.getHeight()));
                        pictureShape.setAnchor(new Rectangle2D.Double(10, 0, 0, 0));
                    }
                }
            }
        }
        String fileName = "PPT名字" + DateUtils.curDateTimeStr14() + ".pptx";
        // 保存PPT文件
        //設置輸出文件類型為pptx文件
        response.setContentType(CONTENT_TYPE_OF_PPT);
        response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, CHARSET_OF_UTF8));
        response.setHeader("Pragma", URLEncoder.encode(fileName, CHARSET_OF_UTF8));
        ServletOutputStream outputStream = response.getOutputStream();
        ppt.write(outputStream);
        outputStream.flush();
        outputStream.close();
        return new EiInfo();

    }

extractContent方法:

public static List<String> extractContent(String input) {
        List<String> contents = new ArrayList<>();
        int startIndex = input.indexOf("{{");
        while (startIndex != -1) {
            int endIndex = input.indexOf("}}", startIndex);
            if (endIndex != -1) {
                String content = input.substring(startIndex, endIndex + 2);
                contents.add(content);
                startIndex = input.indexOf("{{", endIndex);
            } else {
                break;
            }
        }
        return contents;
    }

getReportsToimage()方法:該方法針對的是:帆軟報表的普通報表中,出現(xiàn)非表格報表的處理方法[即:柱狀圖、折線圖等],通過直接訪問帆軟鏈接的方式去獲取表格的base64編碼。

private String getReportsToimage() throws IOException {
        String reportAddress = PlatApplicationContext.getProperty("項目名." + projectEnv + ".report.address");
        // 創(chuàng)建HttpClient對象
        CloseableHttpClient httpClient = HttpClients.createDefault();

        try {
            // 構(gòu)造請求URL
            String apiUrl = reportAddress + "/*/netPrice_2.cpt&format=image&extype=JPG";
            // 創(chuàng)建HttpGet請求
            //HttpPost request = new HttpPost(apiUrl);
            System.out.println("apiUrl");
            System.out.println(apiUrl);
            HttpGet httpGet = new HttpGet(apiUrl);
            // 設置請求頭部
            httpGet.addHeader("Content-Type", "text/html; charset=utf-8");
            // 發(fā)送請求并獲取響應
            HttpResponse responsed = httpClient.execute(httpGet);
            // 解析響應數(shù)據(jù)
            HttpEntity entity = responsed.getEntity();
            // 檢查響應是否成功
            if (responsed.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                // 獲取Content-Type頭部信息
                Header contentTypeHeader = entity.getContentType();
                String contentType = contentTypeHeader.getValue();
                // 獲取輸入流
                InputStream inStream = entity.getContent();
                ByteArrayOutputStream outputStream_u = new ByteArrayOutputStream();

                // 將圖片裁剪為寬60px,高60px
                BufferedImage originalImage = ImageIO.read(inStream);
                BufferedImage croppedImage = originalImage.getSubimage(0, 0, 3560, 1560);

                // 將裁剪后的圖片轉(zhuǎn)換成字節(jié)數(shù)組
                ByteArrayOutputStream outputStream_c = new ByteArrayOutputStream();
                ImageIO.write(croppedImage, "png", outputStream_c);
                byte[] croppedImageBytes = outputStream_c.toByteArray();

                // 將圖片數(shù)據(jù)編碼為base64格式
                String base64Image = Base64.getEncoder().encodeToString(croppedImageBytes);
                System.out.println(base64Image);
                String responseBody = EntityUtils.toString(entity);
                // 處理響應數(shù)據(jù)
                System.out.println(responseBody);
                // 關(guān)閉輸入流和輸出流
                inStream.close();
                outputStream_u.close();
                return "data:image/png;base64," + base64Image;
            } else {
                System.out.println("HTTP請求失?。?);
            }


        } catch (PlatException e) {

        }
        return "";
    }

最后,在設置PPT模板的時候,將模板內(nèi)的圖片設置為修改后的別名:newTableIdi文章來源地址http://www.zghlxwxcb.cn/news/detail-842527.html

到了這里,關(guān)于將html網(wǎng)頁展示的圖表,下載到PPT文檔內(nèi),以圖片的形式展示在PPT內(nèi)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 基于小程序的商品展示+springboot+vue.js附帶文章和源代碼設計說明文檔ppt

    基于小程序的商品展示+springboot+vue.js附帶文章和源代碼設計說明文檔ppt

    ?? 博主介紹 :?CSDN特邀作者、985計算機專業(yè)畢業(yè)、某互聯(lián)網(wǎng)大廠高級全棧開發(fā)程序員、碼云/掘金/華為云/阿里云/InfoQ/StackOverflow/github等平臺優(yōu)質(zhì)作者、專注于Java、小程序、前端、python等技術(shù)領(lǐng)域和畢業(yè)項目實戰(zhàn),以及程序定制化開發(fā)、全棧講解、就業(yè)輔導、面試輔導、簡

    2024年02月20日
    瀏覽(27)
  • 基于小程序的學生知識成果展示與交流+springboot+vue.js附帶文章和源代碼設計說明文檔ppt

    基于小程序的學生知識成果展示與交流+springboot+vue.js附帶文章和源代碼設計說明文檔ppt

    ?? 博主介紹 :?CSDN特邀作者、985計算機專業(yè)畢業(yè)、某互聯(lián)網(wǎng)大廠高級全棧開發(fā)程序員、碼云/掘金/華為云/阿里云/InfoQ/StackOverflow/github等平臺優(yōu)質(zhì)作者、專注于Java、小程序、前端、python等技術(shù)領(lǐng)域和畢業(yè)項目實戰(zhàn),以及程序定制化開發(fā)、全棧講解、就業(yè)輔導、面試輔導、簡

    2024年02月21日
    瀏覽(24)
  • 前端下載文件或者圖片方式,window.open或者a標簽形式

    1.通過a標簽的方式下載文件 我們點擊下載,發(fā)現(xiàn)是跳轉(zhuǎn)到了百度的首頁,并沒有真的下載文件。 因為 a 標簽下載只能下載 同源 的文件;如果是 跨域 的文件,比如圖片、音視頻等媒體文件等都無法使用上面的 a 標簽方式下載。 上面的代碼是直接通過書寫 a 標簽來實現(xiàn)文件下

    2024年02月03日
    瀏覽(88)
  • 基于html+css的圖片展示18

    基于html+css的圖片展示18

    項目開發(fā)工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 項目結(jié)構(gòu) index.html代碼如下 總結(jié) 此代碼可以實現(xiàn)圖片的無限重復向下移動展示效果

    2023年04月20日
    瀏覽(10)
  • Unity 讀取外配-第三集-網(wǎng)絡下載形式讀取外部圖片(簡單但詳細版)

    Unity 讀取外配-第三集-網(wǎng)絡下載形式讀取外部圖片(簡單但詳細版)

    需求:我有一個文件夾,里面有好多好多圖片,我想軟件自己讀出來 一、具體邏輯 1.寫出你希望讀取的文件夾的地址 2.讀取這個文件夾里所有的文件名稱 3.把這個文件夾里名稱中和圖片有關(guān)的文件名找出來 4.用代碼在unity里創(chuàng)建一個圖片 5.用加載的圖片替換掉創(chuàng)建的這個圖片

    2024年02月12日
    瀏覽(18)
  • Springboot配置Swagger展示API文檔并進行接口測試(doc.html、swagger-ui.html)

    Springboot配置Swagger展示API文檔并進行接口測試(doc.html、swagger-ui.html)

    三、創(chuàng)建一個測試接口 http://localhost:8080/doc.html http://localhost:8080/swagger-ui.html

    2024年02月10日
    瀏覽(18)
  • 文檔在線預覽(四)將word、txt、ppt、excel、圖片轉(zhuǎn)成pdf來實現(xiàn)在線預覽

    文檔在線預覽(四)將word、txt、ppt、excel、圖片轉(zhuǎn)成pdf來實現(xiàn)在線預覽

    @ 目錄 事前準備 1、需要的maven依賴 添加spire依賴(商用,有免費版,但是存在頁數(shù)和字數(shù)限制,不采用spire方式可不添加) 2、后面用到的工具類代碼: 一、word文件轉(zhuǎn)pdf文件(支持doc、docx) 1、使用aspose方式 2、使用poi方式 3、使用spire方式 二、txt文件轉(zhuǎn)pdf文件 三、PPT文件轉(zhuǎn)

    2024年02月08日
    瀏覽(109)
  • Flask boostrap實現(xiàn)圖片視頻上傳下載展示

    Flask boostrap實現(xiàn)圖片視頻上傳下載展示

    項目目錄結(jié)構(gòu) html js代碼 fileinput插件下載地址:https://github.com/kartik-v/bootstrap-fileinput/ imgEnlarge.js如下 代碼下載鏈接:https://download.csdn.net/download/weixin_44986037/87986647

    2024年02月12日
    瀏覽(23)
  • 分享html網(wǎng)頁引入svg圖片的4種方法

    分享html網(wǎng)頁引入svg圖片的4種方法

    本文主要介紹了html網(wǎng)頁引入svg圖片的4種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著微點閱讀小編來一起學習學習吧 web應用開發(fā)使用svg圖片,總結(jié)了下,可以有如下4種方式: 1. 直接插入頁面。 2. img標簽

    2024年02月09日
    瀏覽(27)
  • HTML + JavaScript 實現(xiàn)網(wǎng)頁錄制音頻與下載

    HTML + JavaScript 實現(xiàn)網(wǎng)頁錄制音頻與下載

    在這個數(shù)字化的時代,網(wǎng)頁端的音頻處理能力已經(jīng)成為一個非常熱門的需求。本文將詳細介紹如何利用 getUserMedia 和 MediaRecorder 這兩個強大的 API,實現(xiàn)網(wǎng)頁端音頻的錄制、處理和播放等功能。 getUserMedia getUserMedia 和 MediaRecorder 是 HTML5 中兩個非常重要的 API,用于訪問設備媒體

    2024年02月03日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包