将HTML转换为PDF
把HTML文件或您粘贴的代码转成分好页的PDF,效果与网页完全一致:flexbox、grid、渐变、图片和排版全部保留。
- 转换完成后立即删除
- 加密传输,立即删除
- 无需注册,无水印
使用方法
添加HTML
拖放.html文件,或把代码粘贴到文本框中。
设置页面
页面尺寸、方向和边距——以真正的打印CSS生效。
转换并下载
渲染和分页效果与“打印 → 另存为PDF”完全一致,文字真实可选中。
页面能访问什么,以及CSS控制什么
转换过程无法访问网络,也不运行脚本,两者都是出于安全考虑,而不是功能缺失。一个会去抓取提交页面所请求的任何内容的转换器,很容易被人利用去访问只有我们服务器才能访问的地址;而一个会运行脚本的转换器,就是在运行陌生人的代码。所以链接到CDN的样式表不会加载,使用普通网址的图片不会显示,网页字体会被悄悄替换,而依靠JavaScript绘制的页面,转换结果就是脚本运行前标记本身的内容。解决方法永远相同:把CSS内联到style块中,把图片嵌入为data URI。浏览器本身就提供这种功能——Firefox中的“网页另存为 → 网页,完整”,或“另存为MHTML”——保存为单个文件的网页能够忠实转换。
真正决定结果的是打印CSS,这是第二个值得了解的要点。页面按打印方式排版,所以@media print块会生效,而普通的屏幕样式表未必生效——这就是为什么有打印规则隐藏导航的页面能转换得很漂亮,而没有这条规则的页面会把整个网站的外框一起带进来。@page控制纸张:尺寸、方向和边距都从中读取。break-before、break-after和break-inside: avoid决定在哪里分页,所以不能拆开的表格、必须从新页开始的章节,全都在您的掌控之中。
背景是最常见的遗漏。浏览器默认不打印背景颜色和背景图片,所以除非样式表写了-webkit-print-color-adjust: exact,深色页眉可能会转换成白色——只需一行,就能决定文档是带品牌风格的还是光秃秃的。文字仍是真实文字,链接仍是可用的链接,如果标记中使用了真正的标题元素,标题还能成为PDF书签。
如果我们的服务器无法连接,页面会告诉您,并在本地重建文档,这会保留文字、图片和简单布局,但会简化任何需要真正排版计算的内容——包括grid、flexbox、浮动和定位。简单的文档几乎可以原样转换;精心设计的则不行。
如果您需要的是别的
要转换在线URL——本页面刻意不做的事——在我们服务器上运行的同一套渲染也能在您的电脑上运行:chrome --headless --disable-gpu --print-to-pdf=out.pdf https://example.com会在网络畅通的情况下加载页面,脚本也照常运行。区别仅此而已,而这正是使用它的理由。
如果要真正掌控页眉、页脚、页码和边距,WeasyPrint和Prince完整实现了CSS Paged Media规范:由@top-center定义的每页重复页眉、页码计数器、脚注,以及能解析为页码的交叉引用。WeasyPrint是免费的,大多数文档生成流程用的都是它。Chrome几乎不支持这些,所以页脚要显示“第3页,共12页”的生成报告,需要用它们其中之一,而不是本工具。
常见问题
效果会和我的网页完全一样吗?
会——结果与“打印 → 另存为PDF”生成的完全一致。flexbox、grid、浮动、渐变、阴影、SVG和网页字体排版,都与屏幕上看到的一模一样。
我的HTML会被存储吗?
文件会通过加密连接发送到我们的服务器,转换后在PDF生成的那一刻即被删除——不存储、不记录、不分享。万一服务器无法连接,工具会改用自带的转换器,并告知您。
会执行JavaScript吗?
不会,这是有意为之——页面只根据标记和样式渲染。在服务器端运行不受信任的脚本会造成安全漏洞,而值得转换的文档,本也不该需要在运行时才拼装出来。
可以使用外部图片或样式表吗?
不可以——出于安全考虑,转换过程与网络隔离。请把CSS内联,并把图片嵌入为data URI;所有内容自成一体的页面都能完美渲染。
文字可以选中吗?
可以。PDF包含真正的矢量文字和图形——不是截图——所以任意缩放都清晰锐利,而且可以选中、搜索和复制。
分页位置是怎么决定的?
由真正的打印CSS决定:内容跨页流动,代码中的page-break-before、page-break-after和page-break-inside规则,会像浏览器打印时一样被严格遵循。
小贴士: 不执行脚本,转换过程也无法访问网络——请内联样式,并把图片嵌入为data URI。无法抓取在线URL;请先把网页保存为文件。如果我们的服务器无法连接,浏览器备用方案会保留文字和简单布局,但会简化高级CSS。