2017-01-12 7 views
3

Ich verwende , um einen HTML-Bericht zu generieren. Ich bin auf einer eingeschränkten Maschine, kann tex nicht installieren. Also habe ich versucht, ein HTML-Dokument zu generieren und es dann in ein PDF zu konvertieren/zu drucken. Das Beispiel Abschlags Dokument ist:Speichern von HTML nach PDF in Chrom

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

``` 

ich nicht zu Wort stricken kann entweder als die Formatierung verloren, wie in HTML formatted tables in rmarkdown word document diskutiert. Das produzierte HTML ist genau das, was ich wollte. HTML zu Word mit Speichern als in Word funktioniert meist gut mit einigen Problemen und ich kann PDF drucken, aber es ist nicht so gut wie direkt aus PDF gedruckt. enter image description here

Wenn ich versuche, es als PDF in Chrom zu speichern, ist die Farbe verloren.

enter image description here

Es gibt keine Probleme in Druckoptionen enter image description here

Weitere Seiten wie diese Frage in unserer geliebten Website Replace NA's using data from Multiple Columns druckt feine

enter image description here

Haben Sie Hinweise, wo Ich vermisse einen Punkt oder wo das Problem ist.

Antwort

4

dieses Recht nach dem Header YAML hinzufügen:

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

Das Problem ist, dass RStudio die Standard-R Abschlags Vorlagen verwenden Bootstrap und ihre Version von bootstrap.min.css hat: darin

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

. Das ist eine ziemlich "destruktive" Medienabfrage, da die * Ursache diese Einstellungen auf alle Tags und color: #000 !important; bedeutet "keine Farbe für DICH!" wenn Sie ein Dokument drucken. Ich finde die Stimmung dahinter (die Kosten für den Planeten + Toner/Tinte sparen), aber wenn Sie als PDF drucken, macht das überhaupt keinen Sinn.

Leider gibt es keine hyper-zielgerichteten Medienabfragen für das Drucken in PDF, so dass die generischen "Drucken" angewendet werden, wenn Sie Webseiten in PDFs drucken und diese sinnlosen, Catch-All-Medienabfragen übernehmen.

Das Problem für Sie ist, dass Sie sehr spezifisch auf alle anderen Tags ausgerichtet sein müssen, um diese Einstellungen zu überschreiben. Das bedeutet, dass Sie Ihre eigenen CSS-Klassen zu allem, was Sie in Rmds generieren, hinzufügen oder mit "Inspect Element" gemütlich werden, bis Sie alle fangen.

jedoch, wenn Sie etwas Zeit mitbringen können Sie die YAML-Header ändern sein:

output: 
    html_document: 
    self_contained: false 

Wenn Sie HTML machen, um es ein Verzeichnis mit Unterverzeichnissen für die verschiedenen Komponenten vs Base64- erstellen werden kodiere sie in ein großes Dokument.

Ich nannte mein Dokument forso.Rmd, was bedeutet, dass es ein Verzeichnis namens forso_files gemacht und Unterdirektionen unterlegen.

Öffnen Sie die Haupt-HTML-Datei und scrollen Sie nach unten, bis Sie etwas sehen wie:

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

ändern diese:

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

zu:

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

bearbeiten bootstrap.css, entfernen Sie die color: #000 !important; Zeile und fügen Sie die -webkit-print-color-adjust:exact; Zeile hinzu. SPEICHERN SIE EINE KOPIE VON bootstrap.css ELSEWHERE, da sie bei zukünftigen Renderings zerquetscht wird (d. H., Sie müssen sie bei jedem Rendering zurückkopieren).

Sie können nicht nur einen Link zu einer separaten CSS-Datei mit einer weniger hirntot Abfrage Medien drucken, da die color: #000 !important; Auswirkungen Alle Tags dank der * Ziel und Sie können nicht einfach auf initial oder inherit` zurückgesetzt, da dieser Wille dreh sie einfach nur schwarz.

Ihre letzte (und wahrscheinlich beste) Option besteht darin, Ihre eigene R Markdown-Vorlage zu erstellen (siehe https://github.com/hrbrmstr/markdowntemplates für weitere Informationen) und vermeiden Sie übermäßige Druckmedienabfragen darin.

+1

Danke! Dies ist eine der tiefgreifendsten Antworten, die ich in SO gelesen habe. – discipulus