开源wkhtmltopdf使用心得 (四)

修改wkhtmltox源码,使得转PDF、Image时支持中文路径和中文名称的转换
1.VS2010配置QT5.5.0开发环境或者VS2010配置QT5.5.0开发环境

2.找到pdf_c_binding.cc将下列语句
a.修改
CAPI(int) wkhtmltopdf_set_global_setting(wkhtmltopdf_global_settings * settings, const char * name, const char * value) {
    return reinterpret_cast<settings::PdfGlobal *>(settings)->set(name, QString::fromUtf8(value));
}
改为
CAPI(int) wkhtmltopdf_set_global_setting(wkhtmltopdf_global_settings * settings, const char * name, const char * value) {
    return reinterpret_cast<settings::PdfGlobal *>(settings)->set(name, QString::fromLocal8Bit(value));
}
修改后重新编译生成wkhtmltox.lib和wkhtmltox.dll,支持保存到本地的中文路径和中文名称

b.修改
CAPI(int) wkhtmltopdf_set_object_setting(wkhtmltopdf_object_settings * settings, const char * name, const char * value) {
    return reinterpret_cast<settings::PdfObject *>(settings)->set(name, QString::fromUtf8(value));
}

CAPI(int) wkhtmltopdf_set_object_setting(wkhtmltopdf_object_settings * settings, const char * name, const char * value) {
    return reinterpret_cast<settings::PdfObject *>(settings)->set(name, QString::fromLocal8Bit(value));
}
修改后重新编译生成wkhtmltox.lib和wkhtmltox.dll,支持中文名称的本地html和网上html保存到本地

3. 找到image_c_binding.cc 将下列语句
a.修改
CAPI(int) wkhtmltoimage_set_global_setting(wkhtmltoimage_global_settings * settings, const char * name, const char * value) {
    return reinterpret_cast<settings::ImageGlobal *>(settings)->set(name, QString::fromUtf8(value));
}

CAPI(int) wkhtmltoimage_set_global_setting(wkhtmltoimage_global_settings * settings, const char * name, const char * value) {
    return reinterpret_cast<settings::ImageGlobal *>(settings)->set(name, QString::fromLocal8Bit(value));
}
修改后重新编译生成wkhtmltox.lib和wkhtmltox.dll,支持保存到本地的中文路径和中文名称

4. 关于网页转为image 输出内容为乱码问题
找到image_c_binding.cc与 image_c_binding_p.hh将下列语句,在头文件中添加
#include <QHash>
MyImageConverter类中添加
QHash<QString, QByteArray> utf8StringCache;
a.修改
CAPI(const char *) wkhtmltoimage_phase_description(wkhtmltoimage_converter * converter, int phase) {
    return reinterpret_cast<MyImageConverter *>(converter)->converter.phaseDescription(phase).toUtf8().constData();
}

CAPI(const char *) wkhtmltoimage_phase_description(wkhtmltoimage_converter * converter, int phase) {
    MyImageConverter* conv = reinterpret_cast<MyImageConverter *>(converter);
    QString pd = conv->converter.phaseDescription(phase);

    if (!conv->utf8StringCache.contains(pd))
    {
        return conv->utf8StringCache.insert(pd, pd.toUtf8()).value().constData();
    }
    else
        return conv->utf8StringCache[pd].constData();
}
b.修改
CAPI(const char *) wkhtmltoimage_progress_string(wkhtmltoimage_converter * converter) {
    return reinterpret_cast<MyImageConverter *>(converter)->converter.progressString().toUtf8().constData();
}

CAPI(const char *) wkhtmltoimage_progress_string(wkhtmltoimage_converter * converter) {
    MyImageConverter* conv = reinterpret_cast<MyImageConverter *>(converter);
    QString pd = conv->converter.phaseDescription(phase);

    if (!conv->utf8StringCache.contains(pd))
    {
        return conv->utf8StringCache.insert(pd, pd.toUtf8()).value().constData();
    }
    else
        return conv->utf8StringCache[pd].constData();
}

修改后重新编译生成wkhtmltox.lib和wkhtmltox.dll,即可以解决该问题

转载于:https://www.cnblogs.com/zxqdlenovo/p/5923631.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值