ASP调用Python的wkhtmltopdf函数传参报错及cookie参数问题
在经典ASP中调用Python以使用wkhtmltopdf工具,已在htmlToPdf函数中定义了名为option的默认参数集合。调用该函数时希望仅修改page-size和cookie参数值、保留其他默认参数,但触发TypeError:htmlToPdf()收到意外关键字参数additional_options。尝试单独传递page-size可成功,但cookie参数无法接受字符串格式,且需支持多cookie值。
函数定义代码
def htmlToPdf(self, html_file, pdf_file, additional_options=None): path_wkhtmltopdf = r'C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe' option = { 'quiet': True, 'page-size': 'A4', 'cookie':[('login', 'token1=7040D304-34A5-444F-A10D-6942ABEC9B9F&token2=6E8405C7-B6BE-41F6-A5D3-0A20574A6849')], 'margin-top': '0.0in', 'margin-right': '0.0in', 'margin-bottom': '0.0in', 'margin-left': '0.0in', } if additional_options: option.update(additional_options) print(option)
函数调用代码
result = htmlToPdf(html_file, r'c:\Web\Pdf1.pdf',additional_options={'page-size':'A3','cookie': [('login', 'token1=1111111-34A5-444F-A10D-6942ABEC9B9F&token2=222222-B6BE-41F6-A5D3-0A20574A6849')]}) print(result)
报错信息
Traceback (most recent call last):
File "c:\PythonAsp\code.py", line 19, in
result=htmlToPdf(html_file, r'c:\print\Pdf1.pdf',additional_options={'page-size':'A3','cookie': [('login', 'token1=111111-34A5-444F-A10D-6942ABEC9B9F&token2=222222-B6BE-41F6-A5D3-0A20574A6849')]})
TypeError: htmlToPdf() got an unexpected keyword argument 'additional_options'
1. 修复additional_options参数报错
函数定义中的self表明这是类的成员方法,直接当作普通函数调用会导致参数位置错位:第一个传入的html_file会被当作self,后续参数全部偏移,最终additional_options变成未定义的关键字参数。
解决方式二选一:
- 作为类方法调用:先实例化类,再通过实例调用函数
# 假设函数所属类为HtmlConverter converter = HtmlConverter() result = converter.htmlToPdf( html_file, r'c:\Web\Pdf1.pdf', additional_options={ 'page-size':'A3', 'cookie': [('login', 'token1=1111111-34A5-444F-A10D-6942ABEC9B9F&token2=222222-B6BE-41F6-A5D3-0A20574A6849')] } ) - 改为普通函数:删除函数定义中的
self参数,直接作为独立函数调用def htmlToPdf(html_file, pdf_file, additional_options=None): # 原函数内部逻辑保持不变
2. 处理多Cookie参数
wkhtmltopdf的cookie参数要求传入元组列表格式,每个元组对应一个Cookie的键值对,支持多个独立Cookie:
# 示例:传入两个不同的Cookie additional_options={ 'page-size':'A3', 'cookie': [ ('login', 'token1=1111111-34A5-444F-A10D-6942ABEC9B9F'), ('user_session', 'id=12345&expire=20241231') ] }
如果是单个Cookie包含多个参数(如示例中的token1和token2),直接将完整字符串作为元组的第二个值即可,无需拆分,这符合Cookie的格式规范。
内容的提问来源于stack exchange,提问作者Hafize Turk

