2017-01-12 111 views
3

我使用來生成HTML報告。我在受限制的機器上,無法安裝tex。所以,我試圖生成一個HTML文檔,然後將其轉換/打印爲pdf。這個例子降價文件是:在html中將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">&dArr; </font>' 
diff_mat[diff_mat>0] <- '<font color="red">&uArr; </font>' 
diff_mat[diff_mat == 0] <- '<font color="blue">&hArr; </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") 

``` 

我不能織字無論是作爲在HTML formatted tables in rmarkdown word document討論的格式都將丟失。生成的HTML正是我想要的。使用保存在Word中的HTML語言大多數都可以處理,但我可以打印PDF,但不如直接從PDF打印。 enter image description here

當我嘗試將其保存爲PDF格式的PDF時,顏色丟失。

enter image description here

有一個在打印選項沒有任何問題 如我們敬愛的網站Replace NA's using data from Multiple Columns打印精細

enter image description here

這個問題enter image description here

其他網頁你有任何指針哪裏我錯過了一個觀點或問題出在哪裏。

回答

4

的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> 

的問題是,RStudio的默認[R降價模板使用自舉和他們的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中生成的任何內容,或者使用「檢查元素」來獲得舒適感,直到您抓住所有內容爲止。

然而,如果你喜歡冒險的感覺,你可以修改YAML標題是:

output: 
    html_document: 
    self_contained: false 

當您呈現到HTML,它會在各個組件VS 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> 

更改此:

<link href="forso_files/bootstrap-3.3.5/css/bootstrap.min.css" rel="stylesheet" /> 

到:

<link href="forso_files/bootstrap-3.3.5/css/bootstrap.css" rel="stylesheet" /> 

編輯bootstrap.css,取出color: #000 !important;行並添加-webkit-print-color-adjust:exact;行。因爲它會在未來的渲染中被壓縮(即你需要在每個渲染中複製它),所以保存bootstrap.css的副本。

你不能所有的標籤由於只是鏈接到一個不太腦死亡印刷媒體查詢一個單獨的CSS文件,因爲color: #000 !important;影響到*目標,你不能只是將其重置爲initial或inherit`,因爲這將把它們變成黑色。

您的最終(也許是最好的)選項是製作您自己的R Markdown模板(有關更多信息,請參閱https://github.com/hrbrmstr/markdowntemplates),並避免在其中放置頂級的打印介質查詢。

+1

謝謝!這是我在SO中讀到的最深入的答案之一。 – discipulus