26

私はまだrに慣れていないので、単純なロジックであるべきものに困惑しています。imageOutput ウィジェットで 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")
))

サンプルサーバー.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 を表示する方法が必要です..

4

3 に答える 3

32

Shiny UI に PDF ビューアー (Web ブラウザーのデフォルトの PDF ビューアー、たとえば mozilla の pdf.js) を埋め込むには、src が PDF へのパスとなる iframe を使用できます。

インターフェイスに iframe を含めるには、次の 2 つの方法があります。

iframeUi では、次のように絶対 src 属性を持つタグを直接追加できます。

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

または、サーバーの ui から URL を取得iframeし、入力 URL を含むタグを記述して、UI の htmlOutput に HTML コードを返します。

うい:
textInput("pdfurl", "PDF URL")
htmlOutput('pdfviewer')

サーバー:

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

ページが HTTP(S) プロトコルで読み込まれる場合 (Shiny アプリの場合)、セキュリティ上の理由から、ローカル ファイルを「file:」URL でフレーム化できないことに注意してください。locals pdf を表示する場合は、http(s):URL を使用してアクセスする必要があるため、それらを www ディレクトリ (ローカル Web サーバー) に保存し、URL を使用してファイルにアクセスする必要がありhttp(s):ます (URL は のようなものになりますhttp://localhost/.../mypdf.pdf)。私の例の2番目の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 :

shinyServer(function(input, output, session) {

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

})

PDF ビューアのある Web ページ:

ここに画像の説明を入力

この助けを願っています。

于 2014-01-09T15:55:15.987 に答える
7

server.R および ui.R スクリプトを含む元のディレクトリに www というフォルダーを作成します。PDF を www/ フォルダーに配置し、以下のコードのようなものを使用します。

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")
    )
  )
))
于 2017-08-09T21:28:43.430 に答える
3

Fabian N.の回答に追加。

次の 2 つの重要な点があります。

  1. Rstudio から R Shiny Web アプリケーションを作成してください。「Run App」として実行していることを確認してください。そうしないと、「www」フォルダ内のファイルにアクセスできません!

ここに画像の説明を入力

  1. Web アプリケーション ディレクトリに「www」フォルダを作成してください。
于 2019-03-05T18:34:46.060 に答える