前一篇文章介绍了推送信息到企业微信群里,其中一个项目推送的信息是使用Python自动生成的表格,本文来讲讲如何用Python生成表格图片。
Python最大的优点就是第三方库丰富,基本你要什么功能,都能找到别人实现好的库,几行代码一调用就完事了。
项目地址:https://github.com/HiroshiARAKI/pytable
最先找到的是日本人开发的pytab库,它是基于matplotlib来画图的,默认参数下生成的表格外观一般般,而且显示不了中文字符,字体也很小,效果不理想。
我一开始还抱着死磕的心态,把这个库的源码下载下来魔改,改了字体和大小,生成的表格终于能看了,但排版还是会出各种奇奇怪怪的问题,比如文字溢出单元格之类的,心累……
官网地址:https://plotly.com/
后面找到了一个新的库:plotly,官网的介绍是:
The front end for ML and data science models
专门为机器学习和数据科学设计的前端展示工具,单纯拿来画表格还算大材小用了~ 它是用网页来渲染的,看例子效果还可以,我就换成这个plotly试试,嗯,真的可以,那就这个了。
本文会分别介绍这两个库的使用,包括我魔改了pytab的地方。
(不过还是推荐plotly,网页渲染就是好)
首先安装
pip install pytab
然后我把画表格的代码封装成一个函数
import uuid
from typing import List, Dict, Optional, Tuple
import pytab
def draw_table(data: Dict[str, list]):
"""
画表格
:param data: 数据格式 {
'a': [1.0, 2.1, 3.5, 4.0, 2.0, 1.0, 2.1, 3.5, 4.0, 2.0, ],
'b': [5.7, 6.1, 7.2, 8.3, 1.2, 5.7, 6.1, 7.2, 8.3, 1.2, ],
}
:return:
"""
# 设置字体,不然显示不了中文
pytab.plt.rcParams["font.sans-serif"]=["SimHei"]
pytab.table(
data=data,
data_loc='center',
# th_type='dark',
th_c='#aaaaee', # 设置表头背景颜色
td_c='gray', # 设置数据行背景颜色
table_type='striped',
figsize=(len(data.keys()), int(len(data.values()) / len(data.keys()) + 1)),
# fontsize=18,
)
# pytab.show()
temp_file=os.path.join(tempfile.gettempdir(), f'{uuid.uuid4().hex}.jpg')
print(temp_file)
pytab.save(temp_file)
return temp_file
按照注释的这个数据格式,a和b是表头列名,后面的数组是每一列的数据,很好理解
{
'a': [1.0, 2.1, 3.5, 4.0, 2.0, 1.0, 2.1, 3.5, 4.0, 2.0, ],
'b': [5.7, 6.1, 7.2, 8.3, 1.2, 5.7, 6.1, 7.2, 8.3, 1.2, ],
}
画出来的表格是这样的
再来试试中文显示会怎么样
{
'列1': [1.0, 2.1, 3.5, 4.0, 2.0, 1.0, 2.1, 3.5, 4.0, 2.0, ],
'列2': [5.7, 6.1, 7.2, 8.3, 1.2, 5.7, 6.1, 7.2, 8.3, 1.2, ],
}
画出来是这样
有点丑吧,勉强能看
OK~ 关于pytab的就不多折腾了,毕竟上限就在这了
接下来看看plotly
首先安装
pip install plotly
话不多说,老规矩,我又是写成一个函数
import uuid
from typing import List, Dict, Optional, Tuple
import plotly.graph_objects as go
import plotly.io as pio
def draw_table(headers: List[str], cells: List[list]):
"""
画表
:param headers: header=dict(values=['A Scores', 'B Scores'])
:param cells: cells=dict(values=[[100, 90, 80, 90], [95, 85, 75, 95]])
:return:
"""
pio.kaleido.scope.default_width=len(','.join(headers)) * 20
pio.kaleido.scope.default_height=250 + len(cells[0]) * 20
fig=go.Figure(data=[go.Table(header=dict(values=headers), cells=dict(values=cells))])
# fig.show()
image_file=os.path.join(tempfile.gettempdir(), f'{uuid.uuid4().hex}.jpg')
print('write image to', image_file)
fig.write_image(image_file)
return image_file
这次的参数格式更前面的pytab不一样,要传两个参数,都是数组类型
第一个是表头,第二个数组是单元格
先来个例子试试
draw_table(['列A', '列B'], [[100, 90, 80, 90], [95, 85, 75, 95]])
然后把上面函数代码里的fig.show()注释去掉,可以看到生成的表格图片效果
运行后可以发现自动打开了浏览器,因为这个库是使用网页来渲染表格的,效果如下
效果比前面那个pytab好一些,哈哈~
文章来自https://www.cnblogs.com/deali/p/16122021.html
们都知道,Word中的表格是一个非常有用的工具,可以让我们在文档中轻松添加和编辑各种数据。但有时候我们可能会遇到一个问题:当表格作为图片插入时,我们就不能直接编辑它了。这可怎么办呢?别担心,我们有两种方法来解决这个问题。第一种是手动重新创建表格,第二种是使用OCR工具。让我们来看看这两种方法的具体步骤。
第一种方法:手动重新创建表格
首先,我们需要将图片作为参考,利用Word中的表格插入工具手工创建一个新表格。然后,通过键入的方式输入图片中的文字内容。这个方法需要一定的时间和耐心,但对于不太复杂的表格来说,应该还是比较容易的。
第二种方法:使用OCR工具
OCR是Optical Character Recognition的缩写,即光学字符识别,是一种将图像中的文字转换为可编辑文本的技术。我们可以使用OCR工具来将图片中的表格转换为可编辑的格式。下面以金鸣表格文字识别大师为例,介绍具体步骤:
1. 将Word文件另存为HTML格式,这样Word中的图片就会自动保存在一个单独的、与HTML文件同名的文件夹中。
2. 打开金鸣表格文字识别大师,将上一步保存的图片的文件夹拖入到软件的图片列表中,也可以直接将word文档拖入进去,它会自动转为图片,当然,您也可以像上图那样直接添加进去。
3. 选择表格识别模式,输出格式选择Word。
4. 点击提交识别按钮,等待识别完成。
5. 识别完成后,我们就可以得到一份可编辑的Word文档了。在这个文档中,我们可以自由地编辑表格里面的内容。
以上就是两种将图片中的表格转换为可编辑格式的方法。虽然手动重新创建表格需要较多时间和劳动力,但如果表格比较简单,这个方法还是不错的选择。而使用OCR工具则会更加快捷方便,尤其适合处理大量图片中的表格。无论您选择哪种方法,都能够让表格变得更加灵活、易于编辑,提高工作效率。
#表格#经常在一些报告业务场景,客户常常要求可以实现导出html、pdf、xmind格式的报告文件,生成pdf格式文件,网络上有很多开源的解决方案,但是生成html格式开源免费的解决方案很少,下面我给我大家介绍一下,如何解决这些问题
这些框架都支持,这里不再详细介绍,具体用户可以在github上,进行查阅
可以用一些收费的框架,可以做到,比如Aspose,但是在这里介绍一个思路,去解决这个问题,大家肯定对导出excel表格很熟悉把,填充数据与表格,然后还可以设置标头样式与单元格样式,那么我们可以按照这个思路,进行开发一个简易版本的导出html文件。
@Test
void listToHtmlTableTest() throws IOException {
List<String> headers=List.of("Name", "Age", "City");
List<List<String>> data=List.of(
List.of("gz", "25", "beijing"),
List.of("jelly", "30", "he ze")
);
//头样式
String headStyle="border: 1px solid #000000;";
//表格样式
String bodyStyle="border: 1px solid #000000;";
//转成html标签
String htmlTable=HtmlTable.convertDataToHtml(headers, data,headStyle,bodyStyle);
//输出html文件
String fileName="output.html";
try (BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(fileName))) {
bufferedWriter.write(htmlTable);
} catch (IOException e) {
e.printStackTrace();
}
}
public static String convertDataToHtml(List<String> headers, List<List<String>> data,String headStyle,String bodyStyle) {
StringBuilder html=new StringBuilder();
html.append("<table>");
// table headers
html.append("<thead><tr>");
for (String header : headers) {
html.append("<th style=\"").append(headStyle).append("\">").append(header).append("</th>");
}
html.append("</tr></thead>");
// table body
html.append("<tbody>");
for (List<String> row : data) {
html.append("<tr>");
for (String cell : row) {
html.append("<td style=\"").append(bodyStyle).append("\">").append(cell).append("</td>");
}
html.append("</tr>");
}
html.append("</tbody>");
html.append("</table>");
return html.toString();
}代码运行效果
可配置样式
导出封装
支持图片
支持模板导出
开源sdk:https://github.com/xmindltd/xmind-sdk-js
需要前端实现,因为官方没有提供java版本sdk
每天不断更,精彩不停止,明天见,我是行者
记得留个关注、点赞、评论哟,让我们一起去看星辰大海,品味代码人生
*请认真填写需求信息,我们会在24小时内与您取得联系。