可以用Python将PDF图表转换为Excel吗?

0 投票
1 回答
47 浏览
提问于 2025-04-13 01:29

首先,我到现在为止还没找到相关的代码。网上有很多关于如何把Excel数据转成PDF的内容,但反过来的却很少。所以对没有代码表示抱歉。另外,我对PDF也不是很懂,所以可能这件事根本就做不到。

我的问题是,能不能把一个包含图表的PDF文件里的图表数据提取出来,转回Excel里。具体来说,就是想把下面这个图表的数据提取出来,这个图表是在BlackRock英国基金的资料里。能不能用Python把这些数据点和日期对应起来,也就是形成一个时间序列。

enter image description here

https://www.blackrock.com/uk/literature/fact-sheet/blackrock-uk-fund-class-a-accu-gbp-factsheet-gb0005773774-gb-en-individual.pdf

1 个回答

2

从内部的PDF文档来看,你选择的图形并不是一张图片,而是一系列的PDF绘图指令。技术上来说,这些信息是存在的,但它们存储在一个比较抽象的上下文中,所以使用起来非常麻烦,需要花费很多功夫。下面是一个简单的示例:

import pikepdf

doc = pikepdf.Pdf.open('blackrock.pdf')
page = doc.pages[1]
print(page.resources.XObject.Xf5.read_bytes().decode()[:217])

这段代码会输出一系列指令,告诉PDF渲染器如何绘制图形。

q
0 151.2 m
0 0 l
542.23 0 l
542.23 151.2 l
h
W
n
1 w
2 J
0 j
10 M
[]0 d
q
0 151.2 m
541.51 151.2 l
541.51 0.19901 l
0 0.19901 l
0 151.2 l
h
W
n
0.86286 w
1 j
0.75294 0.75294 0.75294 RG
38.93 61.4 m
534.3 61.4 l
S
Q
q

看这些指令,我们可以看到:

  • q - 保存当前的图形状态
  • (x, y) m - 将光标移动到位置x, y,开始绘制新的路径
  • (x, y) l - 从当前位置画一条直线到(x, y)
  • (x, y) l - 同样的指令
  • (x, y) l - 还是同样的指令,看起来是在画外框
  • h - 关闭当前路径
  • W - 修改当前的剪切路径
  • n - 结束路径对象
  • w, J, j, M, d - 设置线宽、线帽样式、连接样式、斜接和虚线
  • q - 再次保存图形状态
  • 等等...
  • (r, g, b) RG - 将颜色改为r, g, b
  • S - 绘制路径的边框
  • Q - 从图形状态堆栈中恢复最近的图形状态

通过解析这些信息,你可以提取出图像中每条线的相对运动,形成一个子像素移动的数组。不过,你还需要获取每条线的结束值,以便将运动缩放到价格上。

这可能吗?当然可以。值得你花时间去做吗?那就看你自己了。

撰写回答