第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Apache POI 中嵌入 Excel 中的對象時,如何保持預(yù)覽圖像的原始大???

在 Apache POI 中嵌入 Excel 中的對象時,如何保持預(yù)覽圖像的原始大?。?/h1>
守候你守候我 2021-05-31 10:17:39
從這個關(guān)于使用 Apache POI 將對象嵌入到 Excel 電子表格中的答案:Workbook wb1 = new XSSFWorkbook();Sheet sh = wb1.createSheet();int picIdx = wb1.addPicture(getSamplePng(), Workbook.PICTURE_TYPE_PNG);byte samplePPTX[] = getSamplePPT(true);int oleIdx = wb1.addOlePackage(samplePPTX, "dummy.pptx", "dummy.pptx", "dummy.pptx");Drawing<?> pat = sh.createDrawingPatriarch();ClientAnchor anchor = pat.createAnchor(0, 0, 0, 0, 1, 1, 3, 6);pat.createObjectData(anchor, oleIdx, picIdx);這將創(chuàng)建嵌入對象,其中的圖像getSamplePng()作為預(yù)覽圖像。該圖像錨定到行 = 1、列 = 1 的單元格,并拉伸到行 = 6、列 = 3。除非圖像縱橫比完全匹配,否則會導(dǎo)致圖像失真。該P(yáng)icture接口提供了resize方法,但似乎沒有成為一個方式來獲得Picture從實例ObjectData。如果圖像尺寸在其錨定到的單元格內(nèi),則以下操作有效:ClientAnchor anchor = drawing.createAnchor(0,                                            0,                                            imgDim.width * Units.EMU_PER_PIXEL,                                           imgDim.height * Units.EMU_PER_PIXEL,                                           columnIndex,                                           rowIndex,                                           columnIndex,                                           rowIndex);如果圖像大于單元格尺寸,這不起作用;圖像最終拉伸到單元格的邊界。我也試過setAnchorType(AnchorType.MOVE_DONT_RESIZE),似乎沒有任何效果。createObjectData用于嵌入對象時,如何將預(yù)覽圖像的大小調(diào)整為其原始大???
查看完整描述

1 回答

?
PIPIONE

TA貢獻(xiàn)1829條經(jīng)驗 獲得超9個贊

的XSSFClientAnchor類提供一個構(gòu)造,允許以供應(yīng)左上角單元(作為一個CTPoint2D對象)和對象的大?。ㄒ缘男问紺TPositiveSize2D)。但是,此構(gòu)造函數(shù)是受保護(hù)的。


解決方法是將此類擴(kuò)展為接受左上角單元格坐標(biāo)以及寬度和高度(以 EMU 為單位)的類:


class SizedClientAnchor extends XSSFClientAnchor

{

    private SizedClientAnchor(XSSFSheet sheet, int columnIndex, int rowIndex, int w, int h)

    {

        super((XSSFSheet) cell.getSheet(), createCTMarker(columnIndex, rowIndex), getSize2D(w, h));

    }


    private static CTMarker createCTMarker(int columnIndex, int rowIndex)

    {

        CTMarker ret = CTMarker.Factory.newInstance();

        ret.setCol(columnIndex);

        ret.setColOff(0);

        ret.setRow(rowIndex);

        ret.setRowOff(0);

        return ret;

    }


    private static CTPositiveSize2D getSize2D(int w, int h)

    {

        CTPositiveSize2D ret = CTPositiveSize2D.Factory.newInstance();

        ret.setCx(w);

        ret.setCy(h);

        return ret;

    }

}

原始代碼變成如下所示:


ClientAnchor anchor = new SizedClientAnchor(sh, 

                                            columnIndex, 

                                            rowIndex, 

                                            imgDim.width * Units.EMU_PER_PIXEL,

                                            imgDim.height * Units.EMU_PER_PIXEL);

但是請注意,如果圖像經(jīng)過的列的字體與“標(biāo)準(zhǔn)”字體(Calibri 或 Arial 11pt)不同,則生成的圖像的寬度將不正確。


尺寸代碼calcCell()在XSSFClientAnchor. 這使用Units.columnWidthToEMU(),而后者又使用Units.charactersToEMU(). 這使用DEFAULT_CHARACTER_WIDTH,記錄為僅適用于默認(rèn)字體(Calibri 或 Arial)。


解決此問題的方法將涉及重新實現(xiàn)Units.charactersToEMU()和XSSFClientAnchor.calcCell()應(yīng)用于適用單元格的適用字體。


查看完整回答
反對 回復(fù) 2021-06-02
  • 1 回答
  • 0 關(guān)注
  • 967 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號