2013-10-19 7 views
9

나는 여전히 r에 익숙하지 않고 빛나고, 나는 단순한 로직을 사용해야 만한다. imageOutput 위젯에 pdf 파일을 표시하려고하지만 행운이 없습니다. 누군가 올바른 방향으로 나를 조종 할 수 있습니까?로컬 드라이브에서 pdf를 반짝 반짝 빛나다

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

샘플 server.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)}) 

}) 

예상 문자 벡터 인수, 또는 원자 벡터와 함께 할 수 있습니다. 광채가 이미지 또는 플롯을 렌더링하고 표시하기 위해 다소 설계되었지만 이미 로컬 드라이브에있는 PDF를 표시하는 방법이 있어야한다는 것을 알고 있습니다.

+0

이 관련되지 않을 수 있지만, 당신이 사용할 수있는'/'대신 심지어 창문 나는 순간에 어떤 준비가 만든 구성 요소가 없다고 생각 – beroe

+0

에서 \\의 경로에 대해. 그러나 물론 pdf를 웹 페이지에 표시 할 수 있습니다. 그것이 webapge에서 할 수있는 경우에 빛나는은 그것을하기 위하여 적응 될 수있다. https://github.com/mozilla/pdf.js – xiaodai

답변

15

PDF 뷰어를 기본 PDF 뷰어로 포함하려면 웹 브라우저, 예를 들어 mozilla의 pdf.js)를 사용하면 src에 PDF의 경로가 될 iframe을 사용할 수 있습니다.

UI에서 직접 울부 짖는 소리와 같은 절대 src 속성을 가진 iframe 태그를 추가 할 수 있습니다 :

tags$iframe(style="height:600px; width:100%", src="http://localhost/ressources/pdf/R-Intro.pdf")) 

또는 URL을 얻을 여기

는 인터페이스에서 iframe을 포함하는 2 개의 differents 방법입니다

UI를 : : 서버의 UI에서 입력 URL로 iframe 태그를 작성하고 UI에 htmlOutput에 HTML 코드를 반환

서버 :

output$pdfviewer <- renderText({ 
    return(paste('<iframe style="height:600px; width:100%" src="', input$pdfurl, '"></iframe>', sep = "")) 
}) 

주 그 페이지가 당신이 그들의 "파일 주민 파일을 프레임 수없는 보안상의 이유로 HTTP (S) 프로토콜 (반짝이는 응용 프로그램의 경우)로드 할 때 : "URL. URL이 http(s): 인 로컬에 pdf를 표시하려면 www 디렉토리 (로컬 웹 서버)에 저장하고 URL이 http(s): 인 파일에 액세스해야합니다 (URL은 http://localhost/.../mypdf.pdf과 같음) 내 예제의 두 번째 iframe과 같습니다. (그럼 당신은 당신이 그것을 포맷해야, 직접 fileinput 함수를 사용할 수 없습니다)

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 다음 PDF 뷰어와

shinyServer(function(input, output, session) { 

    output$pdfviewer <- renderText({ 
     return(paste('<iframe style="height:600px; width:100%" src="', input$pdfurl, '"></iframe>', sep = "")) 
    }) 

}) 

웹 페이지 :

enter image description here

희망이 도움이됩니다.

+1

FYI :이 방법을 사용한 경험으로 브라우저에서 Shiny 앱을 열어야 실제로 PDF가 표시됩니다. RStudio 창에 표시되지 않습니다. – moman822

0

server.R 및 ui.R 스크립트가 들어있는 원본 디렉토리에 www라는 폴더를 만듭니다. www가/폴더에 PDF를 놓고, 다음 아래 코드 같은 것을 사용 server.R에서

:

shinyServer(function(input, output) { 

    observeEvent(input$generate, { 
    output$pdfview <- renderUI({ 
     tags$iframe(style="height:600px; width:100%", src="foo.pdf") 
    }) 
    }) 
}) 

을 UI에서.R :

shinyUI(fluidPage(

    titlePanel("Display a PDF"), 

    sidebarLayout(
    sidebarPanel(
     actionButton("generate", "Generate PDF") 
    ), 

    mainPanel(
     uiOutput("pdfview") 
    ) 
) 
))