我在项目中通过snappy使用wkhtmltopdf。在我的本地机器上输出是正确的: https://www.dropbox.com/s/ml9cp2pa6d8wja5/Zaznaczenie_100.png?dl=0
但是当我将项目部署到服务器时,pdf看起来非常不同,可能视口的宽度不同: https://www.dropbox.com/s/8g0c29bzaxltyb9/170311_123139_4775.jpg?dl=0
两个系统使用完全相同的配置来生成pdf。
我的问题是:
我手动设置输出页面的宽度和高度(分别为21厘米和50厘米)。我尝试了不同的DPI参数组合,但似乎没有效果。
我正在使用wkhtmltpdf PHP包装器 - snappy - 但我检查过并在控制台中获得相同的输出,因此问题是wkhtmltopdf
- 相关,而不是snappy。
答案 0 :(得分:0)
PDF输出中看起来不同的主要内容之一是字体。 wkhtmltopdf要求在操作系统上安装字体,方式与浏览器要求的方式相同。字体间距和大小的差异可能会影响页面的布局。您应首先查看您尝试在源文件中使用哪些字体并在服务器上安装这些字体。一个好的开始是从here或从服务器的发行版存储库安装Microsoft的核心字体。
另一种方法是在源文件样式表中使用@font-face
指令链接到URL中的字体,而不在服务器上安装它们:
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v15/CWB0XYA8bzo0kSThX0UTuA.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
}
对于Google的网络字体,您可以改为导入其样式表:
<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet" />
要检查的另一件事是工作站和服务器上的wkhtmltopdf版本。运行wkhtmltopdf --version
会告诉您当前安装的版本。可能是您的服务器运行的是wkhtmltopdf的过时版本。安装具有所需功能的wkhtmltopdf的最新版本的最简单方法是从here,您可以在其中下载任何发行版的静态链接Linux二进制文件。
要尝试的最后一件事是使用不同的--margin-top
,--margin-right
,--margin-bottom
和--margin-left
参数。还有一个名为--viewport-size
的标志可能有助于提供更好的结果。
wkhtmltopdf --viewport-size 1024x768 page.html output.pdf
但是,如果您在工作站和服务器上使用相同版本的wkhtmltopdf,那么这些配置选项应该没有区别,正如您所说,您已经在两者上使用相同的配置。
答案 1 :(得分:0)
为了备份Candy Gumdrop,我们尝试了边距,但我们的回答结果是管理员在生产服务器上重用了32位的wkhtmltopdf副本,而不是我使用的64位版本。 “wkhtmltopdf --version”的整个结果需要匹配,而不仅仅是版本号。