2013-10-19 23 views
9

में स्थानीय ड्राइव से पीडीएफ प्रदर्शित करने के लिए मैं अभी भी आर और चमकदार के लिए नया हूं, और मैं अन्यथा सरल तर्क होना चाहिए। मैं imageOutput विजेट्स में पीडीएफ फ़ाइलों को प्रदर्शित करने की कोशिश कर रहा हूं लेकिन बिना किसी किस्मत के। क्या कोई मुझे सही दिशा में चला सकता है?चमकदार

नमूना 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)}) 

}) 

त्रुटियों मैं पाने से अधिकांश की उम्मीद चरित्र वेक्टर तर्क या परमाणु वैक्टर साथ क्या करना है। मुझे पता है कि चमकदार छवियों या भूखंडों को प्रस्तुत करने और प्रदर्शित करने के लिए कम से कम डिज़ाइन किया गया है लेकिन पीडीएफ को पहले से ही स्थानीय ड्राइव पर प्रदर्शित करने का एक तरीका होना चाहिए ..

+0

संबंधित नहीं हो सकते हैं, लेकिन आप उपयोग कर सकते हैं '/' बजाय \\ की खिड़कियों – beroe

+0

मुझे लगता है कि इस समय कोई तैयार घटक है में भी पथ के लिए। लेकिन निश्चित रूप से आप एक वेबपृष्ठ में पीडीएफ प्रदर्शित कर सकते हैं। यदि यह वेबपेज में किया जा सकता है तो चमकदार इसे करने के लिए अनुकूलित किया जा सकता है। Https://github.com/mozilla/pdf.js – xiaodai

उत्तर

15

पीडीएफ व्यूअर को एम्बेड करने के लिए (डिफ़ॉल्ट पीडीएफ दर्शक उदाहरण के लिए मोज़िला पर आपका वेब ब्राउजर, पीडीएफ.जेएस) अपने चमकदार यूई में, आप एक आईफ्रेम का उपयोग कर सकते हैं जो आपके पीडीएफ का स्रोत होगा।

Ui में आप सीधे bellow के रूप में एक पूर्ण src विशेषता के साथ एक iframe टैग जोड़ सकते हैं:

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

या एक URL प्राप्त

यहाँ 2 विभिन्न तरीकों से अपने इंटरफेस में एक iframe शामिल करने के लिए है सर्वर में ui से, इनपुट यूआरएल के साथ iframe टैग लिखने और ui में एक htmlOutput में एचटीएमएल कोड लौट:

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

सर्वर:

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

ध्यान दें कि जब पृष्ठों एक HTTP (एस) प्रोटोकॉल (चमकदार एप्लिकेशन के मामले) सुरक्षा कारणों से आप अपने "फ़ाइल के साथ स्थानीय लोगों फ़ाइलों फंसाया नहीं कर सकते हैं के लिए डाले जाते हैं: "यूआरएल। यदि आप स्थानीय पीडीएफ प्रदर्शित करना चाहते हैं तो आपको http(s): यूआरएल के साथ उन तक पहुंच प्राप्त करनी चाहिए, इसलिए आपको उन्हें अपनी www निर्देशिका (एक स्थानीय वेब सर्वर) में सहेजना होगा और http(s): यूआरएल के साथ फाइलों तक पहुंच (यूआरएल http://localhost/.../mypdf.pdf जैसा होगा) जैसा कि मेरे उदाहरण के दूसरे आईफ्रेम में है। (तो फिर तुम एक 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 = "")) 
    }) 

}) 

पीडीएफ दर्शकों के साथ वेब पृष्ठों :

enter image description here

आशा इस मदद करते हैं।

+1

एक FYI देखें: इस विधि का उपयोग करके मेरे अनुभव में, आपको वास्तव में पीडीएफ देखने के लिए ब्राउज़र में चमकदार ऐप खोलना होगा। यह RStudio विंडो में प्रदर्शित नहीं होता है। – moman822

0

उस मूल निर्देशिका में www नामक फ़ोल्डर बनाएं जिसमें आपका सर्वर है। आर और ui.R स्क्रिप्ट्स। www/फ़ोल्डर में पीडीएफ रखें, फिर नीचे दिए गए कोड की तरह कुछ का उपयोग करें:

server.R में:

shinyServer(function(input, output) { 

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

यूआई में।आर:

shinyUI(fluidPage(

    titlePanel("Display a PDF"), 

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

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