una - como unir dos particiones
mostrando un pdf de un disco local en brillante (2)
Todavía soy nuevo y brillante, y estoy perplejo con lo que de otra manera sería lógica simple. Intento mostrar archivos pdf en widgets de imageOutput pero sin suerte. ¿Podría alguien dirigirme en la dirección correcta?
muestra ui.R
shinyUI(pageWithSidebar(
mainPanel(
selectInput("sel_ed",
label = "View outputs for Ecodistrict:",
choices = c(244,245,247,249),
selected = NULL,
multiple = FALSE),
imageOutput("imp_pdf",width="500px",height="500px")
))
servidor de muestra.R
shinyServer(function(input, output, session) {
importance <- function(inputSpecies){
img_dir <- pdf(paste(inputSpecies,"//models//MATL//MATRF_Importance",sep=""))
}
output$imp_pdf <- renderImage({importance(input$sel_ed)})
})
La mayoría de los errores que tengo tienen que ver con los argumentos de vector de caracteres esperados, o vectores atómicos. Sé que el brillo está más o menos diseñado para renderizar Y mostrar imágenes o tramas, pero tiene que haber una forma de mostrar los PDF que ya están en un disco local.
Cree una carpeta llamada www en el directorio original que contiene sus scripts server.R y ui.R. Coloque el PDF en la carpeta www /, luego use algo como el siguiente código:
En server.R:
shinyServer(function(input, output) {
observeEvent(input$generate, {
output$pdfview <- renderUI({
tags$iframe(style="height:600px; width:100%", src="foo.pdf")
})
})
})
En ui.R:
shinyUI(fluidPage(
titlePanel("Display a PDF"),
sidebarLayout(
sidebarPanel(
actionButton("generate", "Generate PDF")
),
mainPanel(
uiOutput("pdfview")
)
)
))
Para incrustar un visor de PDF (el visor de PDF predeterminado de su navegador web, pdf.js en mozilla, por ejemplo) en su interfaz de usuario Shiny, puede usar un iframe que el src será la ruta a su PDF.
Aquí hay 2 formas diferentes de incluir un iframe en su interfaz:
en Ui puedes agregar directamente una etiqueta iframe
con un atributo src absoluto como abajo:
tags$iframe(style="height:600px; width:100%", src="http://localhost/ressources/pdf/R-Intro.pdf"))
O obtenga una URL de la interfaz de usuario en el servidor, escriba la etiqueta iframe
con la URL de entrada y devuelva el código HTML en htmlOutput en la interfaz de usuario:
Ui:
textInput("pdfurl", "PDF URL")
htmlOutput(''pdfviewer'')
Servidor:
output$pdfviewer <- renderText({
return(paste(''<iframe style="height:600px; width:100%" src="'', input$pdfurl, ''"></iframe>'', sep = ""))
})
Tenga en cuenta que cuando las páginas se cargan con un protocolo HTTP (S) (el caso de la aplicación Shiny) por razones de seguridad, no puede enmarcar los archivos locales con sus URL "file:". Si desea visualizar archivos pdf locales, debe acceder a ellos con un http(s):
URL, por lo que debe guardarlos en su directorio www (un servidor web local) y acceder a archivos con sus http(s):
URL ( la URL será algo así como http://localhost/.../mypdf.pdf
) como en el segundo iframe de mi ejemplo. (Entonces no puede usar un FileInput directamente, tiene que formatearlo)
Ui.R:
library(shiny)
row <- function(...) {
tags$div(class="row", ...)
}
col <- function(width, ...) {
tags$div(class=paste0("span", width), ...)
}
shinyUI(bootstrapPage(
headerPanel("PDF VIEWER"),
mainPanel(
tags$div(
class = "container",
row(
col(3, textInput("pdfurl", "PDF URL"))
),
row(
col(6, htmlOutput(''pdfviewer'')),
col(6, tags$iframe(style="height:600px; width:100%", src="http://localhost/ressources/pdf/R-Intro.pdf"))
)
)
)
))
Server.R:
shinyServer(function(input, output, session) {
output$pdfviewer <- renderText({
return(paste(''<iframe style="height:600px; width:100%" src="'', input$pdfurl, ''"></iframe>'', sep = ""))
})
})
Las páginas web con los lectores de PDF:
Espero que esto ayude.