当前位置: 首页 > 知识库问答 >
问题:

使用Java中的apache poi对图片进行填充和线条格式化

宋烨烁
2023-03-14

我使用apache POI3.15的工作文件在excel中插入图像,但我想在图像中添加边框线,这可以通过右键单击MS Office中的图像-->格式图片-->填充线-->线-->实线来完成,在SO和apache文档中搜索了很多,但不知道如何使用poi来实现这一点。遵循我的代码

private void drawImageOnExcelSheetForGLOS(XSSFSheet sitePhotosSheet,
        int row1, int row2, int col1, int col2, String fileName) {
    try {

        InputStream is = new FileInputStream(fileName);
        byte[] bytes = IOUtils.toByteArray(is);
        int pictureIdx = sitePhotosSheet.getWorkbook().addPicture(bytes,Workbook.PICTURE_TYPE_JPEG);
        is.close();
        CreationHelper helper = sitePhotosSheet.getWorkbook().getCreationHelper();

        // Create the drawing patriarch. This is the top level container for
        // all shapes.
        Drawing drawing = sitePhotosSheet.createDrawingPatriarch();

        // add a picture shape
        ClientAnchor anchor = helper.createClientAnchor();
        anchor.setAnchorType( ClientAnchor.MOVE_AND_RESIZE );


        // set top-left corner of the picture,
        // subsequent call of Picture#resize() will operate relative to it
        anchor.setCol1(col1);
        anchor.setCol2(col2);
        anchor.setRow1(row1);
        anchor.setRow2(row2);

        drawing.createPicture(anchor, pictureIdx);

    } catch(Exception e) {
    }
}

共有1个答案

公羊涛
2023-03-14

这可以通过使用XSSFPicture的setLineXXX()方法来实现,

private void drawImageOnExcelSheetForGLOS(XSSFSheet sitePhotosSheet,
        int row1, int row2, int col1, int col2, String fileName) {
    try {

        InputStream is = new FileInputStream(fileName);
        byte[] bytes = IOUtils.toByteArray(is);
        int pictureIdx = sitePhotosSheet.getWorkbook().addPicture(bytes,Workbook.PICTURE_TYPE_JPEG);
        is.close();
        CreationHelper helper = sitePhotosSheet.getWorkbook().getCreationHelper();

        XSSFDrawing drawing = sitePhotosSheet.createDrawingPatriarch();

        ClientAnchor anchor = helper.createClientAnchor();
        anchor.setAnchorType( ClientAnchor.MOVE_AND_RESIZE );

        anchor.setCol1(col1);
        anchor.setCol2(col2);
        anchor.setRow1(row1);
        anchor.setRow2(row2);

        // setLineXXX() methods can be used to set line border to image
        XSSFPicture pic = drawing.createPicture(anchor, pictureIdx);
        // 0 indicates solid line
        pic.setLineStyle(0);
        // rgb color code for black line
        pic.setLineStyleColor(0, 0, 0);
        // double number for line width
        pic.setLineWidth(1.5);
    } catch(Exception e) {
        e.printStackTrace();
    }
}
 类似资料:
  • 上色方法 Illustrator 提供了以下两种上色方法:为整个对象指定填充和 /或描边;将对象转换为实时上色组,并为组内路径的单独边缘和表面指定填充或描边。 为对象上色绘制对象后,您可以为其指定填充和 /或描边。然后可以用类似方法绘制其他可以上色的对象,将每个新的对象一层层地放置在以前的对象上。最终的结果有如一幅由各种形状的彩色剪纸构成的拼贴画,而图稿的外观取决于在这些分层对象组成的堆栈中,哪些

  • 我正面临着POI条件格式的一些问题。我不完全明白POI在这里做什么。我正在为值超过70的单元格值设置背景颜色格式规则。我想在我的应用程序中获得Cell样式(通过条件格式规则应用),但POI不会返回更新的单元格样式,而是返回默认样式。这是我的代码 使用上面的代码, 总是返回 0(即默认格式)。我觉得它应该向我返回带有背景颜色的更新格式样式。当我在实际的xlsx文件中编写上述工作簿并使用MSExcel

  • 问题内容: 我想通过lambda缩进实现以下内容: 多行语句: 单行语句: 当前,Eclipse将自动格式化为以下格式: 多行语句: 单行语句: 而且我发现这真的很混乱,因为该调用直接位于的下面,而且它们之间根本没有空间。如果我可以在缩进的新行中开始lambda,并且希望该调用位于该调用的正上方,则更希望这样做。但是,唯一可以使用标准Java-8 Eclipse Formatter定制的东西是la

  • 问题内容: 我开始学习javaFX,我需要用数据库中的数据填充表。我在网上阅读了很多代码,但没有找到我想要的东西。我读了这篇文章,但不知道如何实现最后一个功能。我阅读了一些其他代码来做到这一点,到目前为止,这是我的一些代码: 我希望你能帮帮我 问题答案: 我相信这会为您提供帮助: 在控制器类中执行以下操作: 并为每个要使用TableView操纵的实体(表)创建一个单独的Java文件POJO 我已经

  • 本节,我们将绘制四个三角形,并用不同的填充样式来填充每个三角形。HTML5的画布API提供的填充样式有颜色、线性渐变、径向渐变和图案。 图2-3 绘制自定义填充样式 按照以下步骤绘制4个三角形,一个使用颜色填充、一个使用线性渐变填充、一个使用径向渐变填充、一个使用图案填充: 1. 创建一个简单的函数,该函数绘制一个矩形: function drawTriangle(context, x, y,

  • 我最近开始学习java,在我的java类中,我必须创建一个方法,它在我的主java类中打印出来,文本向左、居中和向右。但是,我想在不使用printf的情况下完成此操作。 这是我的文字: 然而,我不太确定,如果不使用printf,我如何能够向左、右和中心打印出来。我被告知通过找到文本的字符串长度来做到这一点,我有。然而,我不确定如何应用它打印出适当数量的空格,以填充输出到正确的字符数。当我做中心输出