V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
MrMike
V2EX  ›  JavaScript

有用 wkhtmltopdf 生成过 pdf 的朋友请进,请教尺寸不一致问题

  •  
  •   MrMike · 2017-07-30 17:17:14 +08:00 · 2925 次点击
    这是一个创建于 2454 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在 firefox 里面,用 js 获取的元素高度是 112.75 ,但是在用 wkhtmltopdf 生成 pdf 时,js 打印出来的高度却变成了 480 了。这个是怎么回事呢?有没有朋友可以指教下。谢谢。

    7 条回复    2017-07-31 09:55:19 +08:00
    xu1ming
        1
    xu1ming  
       2017-07-30 19:33:27 +08:00 via iPhone
    好像有个 dpi 参数可以调
    zenxds
        2
    zenxds  
       2017-07-30 19:46:35 +08:00   ❤️ 1
    不知道,但是 wkhtmltopdf 的内核版本比较旧一点,前几天自己写了一个工具,基于 chrome headless api,自认为简单好用很多,安利一下 https://www.npmjs.com/package/page2pdf
    codelover2016
        3
    codelover2016  
       2017-07-30 20:26:26 +08:00
    没记错的话,有参数可以控制整个页面的默认大小,pagesice ?
    SolidZORO
        4
    SolidZORO  
       2017-07-30 21:26:59 +08:00
    'macOS' => '/usr/local/bin/wkhtmltopdf -g -l --dpi 74'
    'debian' => '/usr/local/bin/wkhtmltopdf'

    这两者输出是一致的。我调了至少半天,楼主看着办。wkhtmltoX 系列在各平台上差距不小,得微调。
    MrMike
        5
    MrMike  
    OP
       2017-07-30 21:50:55 +08:00
    @SolidZORO
    @xu1ming dpi 用的是默认的 96,没有单独配置。我用 px 换算成 mm,按照 mm = (px * 25.4) / dpi (网上的公式),这样出来的结果还需要再除以 3.8,在生成的 pdf 时,高度才算合理,但是这样的话,不晓得整体的页面高度了,页面也是用的默认设置 A4,按照 A4 的高度计算,生成的 PDF 文件就不对了,中间的内容高度为负数了。。
    CheungKe
        6
    CheungKe  
       2017-07-31 09:36:01 +08:00
    1. wkhtmltopdf 不好用,中文问题没解决
    2. 后面转用 casperjs, 竖排文字排版有限制
    3. @zenxds chrome headless api,没试过,应该是最完美的解决方案
    MrMike
        7
    MrMike  
    OP
       2017-07-31 09:55:19 +08:00
    @CheungKe 中文的问题,可以解决,装上中文的语言包,就解决了,至少我目前还没遇到过乱码的问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   943 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 21:57 · PVG 05:57 · LAX 14:57 · JFK 17:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.