2013-10-19 10 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

で\\のパスに '' /使用することができます私は、現時点では何も既製コンポーネントが存在しないと思います。もちろん、Webページにpdfを表示することもできます。それがwebapgeでできる場合は、光沢がそれを行うために適応することができます。 https://github.com/mozilla/pdf.js – xiaodai

答えて

15

PDFビューアを埋め込むあなたのWebブラウザ、例えばmozilla上のpdf.js)をShiny UI内に置くと、srcにあなたのPDFへのパスとなるiframeを使うことができます。あなたが直接怒鳴るとして絶対src属性でiframeタグを追加することができUIで

:ここ

はあなたのインターフェイスではiframeを含むように2つの貴様の通りである

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

またはURLを取得しますサーバーのUIから、入力されたURLにiframeタグを書き、UIのhtmlOutputにHTMLコードを返す:

宇井:
textInput("pdfurl", "PDF URL")
htmlOutput('pdfviewer')

サーバー:ページがHTTP(S)がロードされていることを

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

注プロトコル(シャイニーアプリの場合)あなたは地元の人々を額装することができないセキュリティ上の理由は、彼らの「ファイルとファイル: "URL。 URLをhttp(s):としてローカルに表示する場合は、wwwディレクトリ(ローカルWebサーバー)に保存し、http(s):のファイルにアクセスする必要があります(URLはhttp://localhost/.../mypdf.pdfのようになります)私の例の2番目のiframeのように。

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

}) 

Webページ

Ui.R(その後、あなたがそれをフォーマットする必要があり、直接FileInputクラスを使用することはできません) :

enter image description here

は、このヘルプを願っています。

+1

を参照してくださいFYI:この方法を使用した経験では、実際にPDFを表示するには、ブラウザでShinyアプリケーションを開く必要があります。 RStudioウィンドウには表示されません。 – moman822

0

server.Rとui.Rスクリプトを含む元のディレクトリにwwwという名前のフォルダを作成します。 UIで

shinyServer(function(input, output) { 

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

:server.Rで

:以下のコードのようなものを使用し、その後、WWW /フォルダにPDFを置きます。R:

shinyUI(fluidPage(

    titlePanel("Display a PDF"), 

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

    mainPanel(
     uiOutput("pdfview") 
    ) 
) 
)) 
関連する問題