当前位置:  开发笔记 > 前端 > 正文

在Chrome中将html保存为pdf

如何解决《在Chrome中将html保存为pdf》经验,为你挑选了1个好方法。

rmarkdown用来生成HTML报告.我在限制机器上,无法安装tex.所以,我试图生成一个HTML文档,然后将其转换/打印为pdf.示例降价文档是:

---
title: "trials"
author: "Foo Bar"
date: "15 December 2016"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{r cars, echo=FALSE, cache=FALSE, message=FALSE}

library(dplyr, quietly = TRUE)
library(abind, quietly = TRUE)
virginica <- iris %>% filter(Species == "virginica") %>% head() %>% select(-Species)
setosa <- iris %>% filter(Species == "setosa") %>% head() %>% select(-Species)

diff_mat <- virginica - setosa


diff_mat[diff_mat<0] <- ''
diff_mat[diff_mat>0] <- ''
diff_mat[diff_mat == 0] <- ''

datArray <- abind::abind(virginica, diff_mat, along=3)

fin_dat <- apply(datArray,1:2, function(x)paste(x[1],x[2], sep = " "))

knitr::kable(fin_dat, format = "html",
      escape = FALSE, table.attr = "border=1",
      caption = "Changes across species")

```

我不能编织字,因为格式丢失,如在rmarkdown word文档中的HTML格式表中所讨论的.生成的HTML正是我想要的.使用另存为单词的HTML可以很好地解决一些问题,我可以打印pdf,但它不如直接从pdf打印好. 在此输入图像描述

当我尝试将其保存为chrome中的pdf时,颜色会丢失.

在此输入图像描述

打印选项没有问题 在此输入图像描述

其他页面,例如我们心爱的网站中的这个问题,使用来自多列的数据替换NA的打印很好

在此输入图像描述

你有什么指示我错过了一个观点或问题所在.



1> hrbrmstr..:

在YAML标题后添加此权限:


问题是RStudio的默认R降价模板使用Bootstrap,它们的版本bootstrap.min.css有:

@media print {
  *,
  *:before,
  *:after {
    color: #000 !important;
    text-shadow: none !important;
    background: transparent !important;
    -webkit-box-shadow: none !important;
            box-shadow: none !important;
  }

在里面.这是一个非常"破坏性"的媒体查询,*因为这些设置应用于所有标签,color: #000 !important;意味着"没有你的颜色!" 当您打印文档时.我嘲笑背后的情绪(拯救地球+碳粉/墨水成本),但如果你打印到PDF,它没有任何意义.

遗憾的是,没有用于打印到PDF的超目标媒体查询,因此当您将网页打印为PDF并且这些无意识的,全方位的媒体查询接管时,通用的"打印"应用程序将被应用.

您遇到的问题是,您需要非常具体地定位任何其他标记以覆盖这些设置.这意味着将自己的CSS类添加到您在Rmds中生成的任何内容中,或者使用"Inspect Element"进行调整,直到您全部捕获.

但是,如果您有冒险精神,可以将YAML标题修改为:

output:
  html_document:
    self_contained: false

渲染到HTML时,它将创建一个目录,其中包含各种组件的子目录,而base64将它们编码为一个大文档.

我命名了我的文档forso.Rmd,这意味着它创建了一个目录forso_files,并将子目录放在其下.

打开主HTML文件并向下滚动,直到看到如下内容:







改变这个:


至:


编辑bootstrap.css,删除该color: #000 !important;行并添加该-webkit-print-color-adjust:exact;行.保存其他人的bootstrap.css副本,因为它会在未来的渲染中被压扁(即你需要在每次渲染时将其复制回来).

你不能只是链接到一个单独的CSS文件与较少的脑死印刷媒体查询,因为color: #000 !important;所有标签的影响归功于*目标,你不能只是将其重置为initial或继承`,因为这只会将它们变成黑色.

您的最终(也可能是最佳)选项是制作您自己的R Markdown模板(有关详细信息,请参阅https://github.com/hrbrmstr/markdowntemplates),并避免在其中放置过多的打印媒体查询.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有