# wkhtmltopdf

# 一、背景

公司有基于HMTL代码转PDF文件的需求,使用了一款名为wkhtmltopdf的开源软件。但是所使用的0.12.4版本存在一些中文字转换Bug。相关Issues:Wrong Japanese/Chinese word is converted in bookmarks.Incorrect Chinese Characters is converted in PDF outline. 。并在上面Issues中找到了解决问题的办法,即修改wkhtmltopdf源码所依赖qt的源码并重新安装。

# 二、解决问题

# 1、下载源码

git clone -b '0.12.4' git@github.com:wkhtmltopdf/wkhtmltopdf.git --recursive

# 2、修改qt源码

diff --git a/src/gui/painting/qprintengine_pdf.cpp b/src/gui/painting/qprintengine_pdf.cpp
index f6d6e1cc34..862984f6ed 100644
--- a/src/gui/painting/qprintengine_pdf.cpp
+++ b/src/gui/painting/qprintengine_pdf.cpp
@@ -1694,7 +1694,10 @@ void QPdfEnginePrivate::printString(const QString &string) {
         for(int j=0; j < 2; ++j) {
             if (part[j] == '(' || part[j] == ')' || part[j] == '\\')
                 array.append('\\');
-            array.append(part[j]);
+            if (part[j] == '\r' )
+                array.append("\\r");
+            else
+                array.append(part[j]);
         }
     }
     array.append(")");
  • 修改源码
git apply fixed_incorrect_chinese_characters.patch.txt

# 3、编译源码

git clone git@github.com:wkhtmltopdf/packaging.git
  • 使用packaging docker编译

    • 构建镜像
    ./build docker-images jessie-amd64
    
    • 编译
    ./build package-docker jessie-amd64 ../wkhtmltopdf