dis*_*lus 4 pdf-generation google-chrome r r-markdown
我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] <- '<font color="green">⇓ </font>'
diff_mat[diff_mat>0] <- '<font color="red">⇑ </font>'
diff_mat[diff_mat == 0] <- '<font color="blue">⇔ </font>'
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")
```
Run Code Online (Sandbox Code Playgroud)
我不能编织字,因为格式丢失,如在rmarkdown word文档中的HTML格式表中所讨论的.生成的HTML正是我想要的.使用另存为单词的HTML可以很好地解决一些问题,我可以打印pdf,但它不如直接从pdf打印好.

当我尝试将其保存为chrome中的pdf时,颜色会丢失.
其他页面,例如我们心爱的网站中的这个问题,使用来自多列的数据替换NA的打印很好
你有什么指示我错过了一个观点或问题所在.
在YAML标题后添加此权限:
<style>
@media print {
font[color="green"] {
color: #00ff00!important;
-webkit-print-color-adjust:exact;
}
font[color="red"] {
color: #ff0000!important;
-webkit-print-color-adjust:exact;
}
}
</style>
Run Code Online (Sandbox Code Playgroud)
问题是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;
}
Run Code Online (Sandbox Code Playgroud)
在里面.这是一个非常"破坏性"的媒体查询,*因为这些设置应用于所有标签,color: #000 !important;意味着"没有你的颜色!" 当您打印文档时.我嘲笑背后的情绪(拯救地球+碳粉/墨水成本),但如果你打印到PDF,它没有任何意义.
遗憾的是,没有用于打印到PDF的超目标媒体查询,因此当您将网页打印为PDF并且这些无意识的,全方位的媒体查询接管时,通用的"打印"应用程序将被应用.
您遇到的问题是,您需要非常具体地定位任何其他标记以覆盖这些设置.这意味着将自己的CSS类添加到您在Rmds中生成的任何内容中,或者使用"Inspect Element"进行调整,直到您全部捕获.
但是,如果您有冒险精神,可以将YAML标题修改为:
output:
html_document:
self_contained: false
Run Code Online (Sandbox Code Playgroud)
渲染到HTML时,它将创建一个目录,其中包含各种组件的子目录,而base64将它们编码为一个大文档.
我命名了我的文档forso.Rmd,这意味着它创建了一个目录forso_files,并将子目录放在其下.
打开主HTML文件并向下滚动,直到看到如下内容:
<script src="forso_files/jquery-1.11.3/jquery.min.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link href="forso_files/bootstrap-3.3.5/css/bootstrap.min.css" rel="stylesheet" />
<script src="forso_files/bootstrap-3.3.5/js/bootstrap.min.js"></script>
<script src="forso_files/bootstrap-3.3.5/shim/html5shiv.min.js"></script>
<script src="forso_files/bootstrap-3.3.5/shim/respond.min.js"></script>
<script src="forso_files/navigation-1.1/tabsets.js"></script>
Run Code Online (Sandbox Code Playgroud)
改变这个:
<link href="forso_files/bootstrap-3.3.5/css/bootstrap.min.css" rel="stylesheet" />
Run Code Online (Sandbox Code Playgroud)
至:
<link href="forso_files/bootstrap-3.3.5/css/bootstrap.css" rel="stylesheet" />
Run Code Online (Sandbox Code Playgroud)
编辑bootstrap.css,删除该color: #000 !important;行并添加该-webkit-print-color-adjust:exact;行.保存其他人的bootstrap.css副本,因为它会在未来的渲染中被压扁(即你需要在每次渲染时将其复制回来).
你不能只是链接到一个单独的CSS文件与较少的脑死印刷媒体查询,因为color: #000 !important;所有标签的影响归功于*目标,你不能只是将其重置为initial或继承`,因为这只会将它们变成黑色.
您的最终(也可能是最佳)选项是制作您自己的R Markdown模板(有关详细信息,请参阅https://github.com/hrbrmstr/markdowntemplates),并避免在其中放置过多的打印媒体查询.
| 归档时间: |
|
| 查看次数: |
1807 次 |
| 最近记录: |