0
  1. 我正在尝试对生成的图进行base64编码matplotlib并将它们写入 GAE 上的 html 页面。

  2. 之后,数字化地块

  3. xhtml2pdf最后,使用库将 html 页面转换为 pdf 。

如果绘图是由jqplot. 但是,一旦切换到matplotlib,我就会遇到一个名为 的错误Incorrect padding,我不知道如何解决。感谢您的任何建议。

步骤1

蟒蛇代码:

import matplotlib
import matplotlib.pyplot as plt
import StringIO
import urllib, base64

plt.figure(1)
plt.hist([2,3,4,5,6,7], bins=3)
fig = plt.gcf()
imgdata = StringIO.StringIO()
fig.savefig(imgdata, format='png')
imgdata.seek(0)  # rewind the data
uri_1 = 'data:image/png;base64,'
uri_2 = urllib.quote(base64.b64encode(imgdata.buf))
uri_2 += "=" * ((4 - len(uri_2 ) % 4) % 4)
uri_3 = uri_1 + uri_2
uri_4 = '<img id="chart1" src = "%s"/>' % (uri_3)

第2步

Javascript

var n_plot = $('img[id^="chart"]').size();
i=1;
var imgData = [];
while(i <= n_plot){
    //sometimes the plots are generated under jqplot
    try{
        imgData.push($('#chart'+i).jqplotToImageStr({}));
        i=i+1    
    }
   // This case is generated by matplotlib
    catch(e){
    imgData.push($('#chart'+i).attr('src'));
        i=i+1    
    }
}

imgData_json = JSON.stringify(imgData)

第 3 步

Python

pdf = pisa.CreatePDF(imgData_json, file(filename, "wb"))
4

1 回答 1

1

那就是问题所在:

uri_2 += "=" * ((4 - len(uri_2 ) % 4) % 4)

为什么你认为 url 需要额外的填充?如果需要,输出b64encode将已经被填充,添加额外的填充只会混淆解码器。有些人可能会忽略额外的填充,但大多数只会产生错误。

哦,对于数据 url,也不需要引用字符串 - base64 不包含真正需要转义的字符。仅当您需要在常规 url 中使用 base64 时才需要这样做,因为+并且=可能会导致问题,但对于数据 url,情况并非如此。

于 2013-07-16T23:30:29.970 回答