2017-01-12 12 views
3

Я использую для создания HTML-отчета. Я на ограниченной машине, не могу установить tex. Итак, я пытался сгенерировать HTML-документ, а затем конвертировать/распечатывать его в pdf. В этом документе пример уценки является:Сохранение html в pdf в chrome

--- 
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 - это именно то, что я хотел. HTML для слова, используя save, как в слове, работает в основном с некоторыми проблемами, и я могу печатать PDF, но это не так хорошо, как непосредственно печатается из pdf. enter image description here

, когда я пытаюсь сохранить его как PDF в хром, цвет теряется.

enter image description here

Там нет никаких проблем в параметрах печати enter image description here

Других страницы, такие как этот вопрос в нашем любимом сайте Replace NA's using data from Multiple Columns печатает отлично

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> 

Проблема заключается в том, что шаблоны уценки по умолчанию R RStudio используют 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 файл и прокрутите вниз, пока не появится что-то вроде:

<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" /> 

Edit bootstrap.css, удалить color: #000 !important; и добавьте линию -webkit-print-color-adjust:exact;. СОХРАНИТЕ КОПИЮ bootstrap.css ELSEWHERE, так как он будет раздавлен в будущих рендерах (т. Е. Вам нужно будет скопировать его на каждый рендер).

Вы не можете просто ссылку на отдельный CSS файл с менее мозгом мертвым запросом печатных СМИ, так как color: #000 !important; воздействия всех метками благодаря * цели, и вы не можете просто сбросить его initial или inherit`, потому что воля просто превратите их в черный цвет.

Ваш последний (и, вероятно, лучший) вариант состоит в том, чтобы создать собственный шаблон R Markdown (см. https://github.com/hrbrmstr/markdowntemplates для получения дополнительной информации) и не размещать в нем избыточные архивные запросы на печать.

+1

Спасибо! Это один из самых подробных ответов, которые я прочитал в SO. – discipulus