我正在使用wkhtmltopdf
将HTML文档转换为我们网站上的PDF文件。我在我的PHP类中使用以下代码:
$htmlData = file_get_contents('http://google.com');
注意:出于测试目的,我做了wkhtmltopdf -q -s letter --no-background --print-media-type --title Test http://google.com /tmp/google.pdf
。
当我在网络浏览器中浏览页面并点击"下载PDF"时,我得到以下输出:
试图弄清楚出了什么问题,我走到了命令行并跑了:
php -a
这完美无缺,所以我想知道PHP是否有问题。我输入了 package com.sqisland.android.versionview;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textViewversionName = (TextView) findViewById(R.id.text);
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
textViewversionName.setText(packageInfo.versionName);
}
catch (PackageManager.NameNotFoundException e) {
}
}
}
并将上面的代码粘贴到命令行中并运行它,它运行得很好。
以下是PDF的外观:
为什么从Apache(通过我的网络浏览器)运行相同的代码会提供与直接在命令行上运行不同的PDF?这些奇怪的角色来自哪里?我怎么能调试这个?
答案 0 :(得分:1)
感谢@Havenard,我发现了问题。我从命令行运行export
并在PHP中通过proc_open
运行并比较输出。
在我的命令行上,我看到了LANG=en_US.UTF8
,但是从PHP中它说LANG="C"
。
解决方案是在LANG
proc_open
值
$pdfConv = proc_open('wkhtmltopdf -q -s letter --no-background --print-media-type --title Test - -', [
0 => array('pipe', 'r'),
1 => array('pipe', 'w'),
2 => array('pipe', 'w')
], $pipes, '/tmp', [
'LANG' => 'en_US.UTF8'
], [
'bypass_shell' => true
]);