Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用数据uri的html编码图像不适用于xhtml2pdf_Python_Google App Engine_Reportlab_Xhtml2pdf - Fatal编程技术网

Python 使用数据uri的html编码图像不适用于xhtml2pdf

Python 使用数据uri的html编码图像不适用于xhtml2pdf,python,google-app-engine,reportlab,xhtml2pdf,Python,Google App Engine,Reportlab,Xhtml2pdf,我正试图在google app engine上使用xhtml2pdf生成PDF。我已经完成了大部分工作,包括将图像嵌入到模板中。然而,这只适用于可公开访问的图像(xhtml2pdf蚀刻图像以嵌入它们)。我需要能够保持一些图像的私有性。因此,我希望能够使用数据uri方案将一些图像直接嵌入到html中。遗憾的是,我在执行此操作时出错: 所讨论的html标记是: <img src='data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAg

我正试图在google app engine上使用xhtml2pdf生成PDF。我已经完成了大部分工作,包括将图像嵌入到模板中。然而,这只适用于可公开访问的图像(xhtml2pdf蚀刻图像以嵌入它们)。我需要能够保持一些图像的私有性。因此,我希望能够使用数据uri方案将一些图像直接嵌入到html中。遗憾的是,我在执行此操作时出错:

所讨论的html标记是:

<img src='data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCACPAOYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4%2BTl5ufo6erx8vP09fb3%2BPn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3%2BPn6/9oADAMBAAIRAxEAPwD3%2BiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoopGZUUszBQOpJoAWiuY1f4geHNFYrdahHvHVVOa4jVPj9oFqxW0hknI70AevUV8%2BXf7Rcm7/RtOUD3NVh%2B0VfZ50%2BOgD6Morw/Rf2hLG4lCalZmIH%2BJa9S0LxjoniGNWsL2N2P8BODQBvUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHN%2BMPGWn%2BD9NN1dtlj9xPU183%2BLvjHrniCV47WU2tseAqHBxXq/wAaPBup%2BJLaGWwBcx9U9a4XwV8Db7UJ1n1smCAH7nc0AeTRwalq9wdiTXEjH0JrpdM%2BF3inU2Hl6dIgPdxivqvQvBeh%2BH4VjsrGMMB99lyTW%2BqqowqgfQUAfLdp8A/EkxHmtHGPc1dP7POt44u4s19MUUAfH%2Bv/AAi8TaErSG1M0a/xR81ydhqepeH9QWWCWWCaNuRnFfdbIrqVZQwPUEV85/HvwnY6bNb6raRrE0xIdVGOaAPTPhb4%2BTxhowjnIF7CMOPWvQa%2BT/gdqMtp43jhUnZKMMK%2BsKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBCARgjNAAAwBilooAKKKKACiiigBGYIpZjgAZJr5U%2BNXjH%2B3/ERsYGzb2p2jHc1738SvEsfhrwjdTbws0qlIxnnNfH0aTatqyry8s8n6k0AesfAPw7Ld%2BIH1R0IhhGAxHevpquX8A%2BG4fDXha1tkQLKyBpD3JrqKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo55o7eF5pWCogySe1JcXEVrbvPM4SNBlmPavnf4ofGFr4TaPozFYclXlB60Acv8XvHD%2BJ9fe1gcm0tztUA8E1q/BLwQ%2Br60urXUX%2BjW5yuR1NefeF/Dl74p1yK0gRn3sN7Y6Cvsjwv4ft/Deh29hboBsUbiO5oA2AAoAHAFLRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABUVxcQ2sLTTyLHGoyWY4FZeveKNL8O2T3N9dRrtHC7uTXzV8Qvi5f%2BJpXtLF2gsgcfKcFqAOm%2BLnxXS9jfRtGl/d9JJFPWvKfCfha%2B8W6zHZ2ysdzfO%2BOgpPDPhPVPFepJBaQuwY/NIRwK%2BrvAXgOy8G6WqIga6YfvJMc0AP8E%2BAtN8HWCpBGr3JHzyEc5rrqKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqO4njtoHmlYKiDJJqSszxDYSanoV3aRMVeSMgEUAeV%2BI/j7p%2Bm3slrp9qbgoSC5PFcDrnx41/UVMdoq2yn%2B71rkdd8AeItL1CZJNPmkUMcOqkg1hSaJqcWd9jOuPVDQBJqWu6prUxe8upZmJ6E11fgX4czeJbtJLyeO2tAcsXYAmuK%2By3cZ/1Mo/4Camjv9St%2BEnnT2BIoA%2Bz/AAxoOieHNPS207yOBy4Iya6AMGGQQR7V8Nw%2BKtdt%2BI9RuF/4Ea3dN%2BK3irTV2pqDuP8Aa5oA%2ByKK%2BSP%2BF2eLc/8AH0PyqK4%2BM3i2eMp9s257igD64aeJPvSoPqwrKv8AxXoem5%2B1ajAhHbcK%2BOrnxt4iu2Jk1Oc59GNZjS6lqMmS08zH3JoA%2Btrr4u%2BErViDfhyP7taHh74haF4knMNjcAv/AHT1r5Eg8L65dn91p9w3/ADXq/wj%2BHmuWevJqN5E9vEnY8ZoA%2Bj6KQDAApaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAY8Mcn341b6iqz6Tp8gIezgbPqgq5RQBkN4X0N87tMtzn/AGBVCb4f%2BGJyS%2BlQZPoK6aigDhLn4Q%2BErkkmwCZ/u1zN7%2Bz9oU8pa3uJIlPavYaKAPE/%2BGd9Lz/x/v8AlTo/2eNJVwXvpCPTFe1UUAecWPwU8KWkSq9u0rDuxrptN8EeHtKAFtpsII7sua6GigCCOztohiO3iUeyipgAowAB9KWigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//Z' width='230' height='143' >

我得到的错误是:

Traceback (most recent call last):
  File "/Users/hamish/dev/kp3/src/libs/xhtml2pdf/tags.py", line 332, in start
    height=None)
  File "/Users/hamish/dev/kp3/src/libs/xhtml2pdf/xhtml2pdf_reportlab.py", line 476, in __init__
    img = self.getImage()
  File "/Users/hamish/dev/kp3/src/libs/xhtml2pdf/xhtml2pdf_reportlab.py", line 497, in getImage
    img = PmlImageReader(StringIO.StringIO(self._imgdata))
  File "/Users/hamish/dev/kp3/src/libs/xhtml2pdf/xhtml2pdf_reportlab.py", line 343, in __init__
    self._image = self._read_image(self.fp)
  File "/Users/hamish/dev/kp3/src/libs/xhtml2pdf/xhtml2pdf_reportlab.py", line 373, in _read_image
    return PILImage.open(fp)
  File "/Library/Python/2.7/site-packages/PIL/Image.py", line 1980, in open
    raise IOError("cannot identify image file")
IOError: cannot identify image file fileName=<StringIO.StringIO instance at 0x10503ca70>
回溯(最近一次呼叫最后一次):
文件“/Users/hamish/dev/kp3/src/libs/xhtml2pdf/tags.py”,第332行,在开始处
高度=无)
文件“/Users/hamish/dev/kp3/src/libs/xhtml2pdf/xhtml2pdf_reportlab.py”,第476行,在__
img=self.getImage()
getImage中的文件“/Users/hamish/dev/kp3/src/libs/xhtml2pdf/xhtml2pdf_reportlab.py”,第497行
img=PmlImageReader(StringIO.StringIO(self.\u imgdata))
文件“/Users/hamish/dev/kp3/src/libs/xhtml2pdf/xhtml2pdf_reportlab.py”,第343行,在__
self.\u image=self.\u read\u image(self.fp)
文件“/Users/hamish/dev/kp3/src/libs/xhtml2pdf/xhtml2pdf_reportlab.py”,第373行,在_read_图像中
返回PILImage.open(fp)
文件“/Library/Python/2.7/site packages/PIL/Image.py”,第1980行,打开
raise IOError(“无法识别图像文件”)
IOError:无法识别图像文件名=

您可以查看/Library/Python/2.7/site-packages/PIL/Image.py的内部,或者甚至可以对其进行一些修改,以了解到底是什么原因造成了不安:

文件“/Library/Python/2.7/site packages/PIL/Image.py”,第1980行,在 打开 raise IOError(“无法识别图像文件”)

假设这是私有文件与公共文件的访问权限问题,请检查这两种访问类型之间的区别

如果您的应用程序静态地为这两种文件提供服务,并且您允许通过app.yaml文件中的application\u readable:true标志进行公共访问,则您需要对私有文件执行相同的操作,并可能使用login:requiredlogin:admin保护它们


如果你的应用程序动态地提供了私有保护,请检查你是如何做到这一点的,如果可能的话,还可以相应地调整xhtml2pdf访问。

嗯,这看起来像是xhtml2pdf问题。事实上,我有很多问题。它不能像浏览器一样处理html。