Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

193
Visualizações
Almacene la variable de Javascript en la aplicación R Shiny

En este momento tengo una buena aplicación R Shiny que puede crear un pdf a partir de partes de él usando una pieza de javascript. Sin embargo, en este momento solo se descarga automáticamente.

 js <- " $(document).on('shiny:sessioninitialized', function(event) { $('#printPdf_CA').click(function () { domtoimage.toPng(document.getElementById('mainOrder_CA')) .then(function (blob) { var pdf = new jsPDF('l', 'pt', [$('#mainOrder_CA').width(), $('#mainOrder_CA').height()]); pdf.addImage(blob, 'PNG', 0, 0, $('#mainOrder_CA').width(), $('#mainOrder_CA').height()); pdf.save($('#name').val() + '.pdf'); }); }); }); "

Quiero poder almacenarlo localmente (ya sea como un archivo en un directorio relativo O como una variable en la aplicación Shiny) y luego darle al usuario la opción de imprimirlo en pdf (como arriba) O enviarlo por correo electrónico a una dirección elegida (usando el paquete emayili de R). Ya probé Shiny.setInputValue(), pero eso no funcionó en absoluto (incluso el envío de un número desde JavaScript no pareció funcionar, pero tal vez estoy haciendo algo mal aquí.

¡Realmente agradecería su ayuda!

EDITAR Hice que Shiny.setinputValue() funcionara, pero no sé cómo escribirlo en un archivo .pdf temporal desde el campo. También me pregunto si esto todavía se reconoce oficialmente como un pdf o si hubo alguna pérdida de información cuando se movió a R

EDIT 2: Básicamente me las arreglo para enviar el PDF a R como una entrada brillante con el siguiente código ajustado:

 $(document).on('shiny:sessioninitialized', function(event) { var pdf $('#storePDF').click(function () { domtoimage.toPng(document.getElementById('Capture')) .then(function (blob) { pdf = new jsPDF('l', 'pt', [$('#Capture').width(), $('#Capture').height()]); pdf.addImage(blob, 'PNG', 0, 0, $('#Capture').width(), $('#Capture').height()); Shiny.setInputValue('pdf', pdf) }); }); });

Ahora solo necesitaría poder crear un PDF en R a partir de esto. Sin embargo, en R, el archivo resultante es solo una lista de listas y varios componentes (una estructura grande que probablemente describa el PDF de alguna manera).

Imprimir esto en la consola da el siguiente resultado:

 $internal $internal$collections $internal$collections$addImage_images $internal$collections$addImage_images$`0` $internal$collections$addImage_images$`0`$alias [1] 1916164677 $internal$collections$addImage_images$`0`$w [1] 1905 $internal$collections$addImage_images$`0`$h [1] 880 $internal$collections$addImage_images$`0`$cs [1] "DeviceRGB" $internal$collections$addImage_images$`0`$bpc [1] 8 ..... And much more......

¿Hay alguna manera de convertir este tipo de cosas en un pdf?

Editar 3:

Mi solución medio decente para cualquier persona interesada fue simplemente mover la "mancha" a Shiny (Shiny.setInputValue)

que usar el decodificador base64

lea la imagen usando magick::image_read y escriba en el archivo temporal pdf usando magick::image_write

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

La próxima vez que copie de una de mis publicaciones, proporcione el enlace, esto habría sido más fácil.

Puede proceder de la siguiente manera, utilizando la codificación/descodificación base64:

 library(shiny) library(base64enc) js <- " $(document).ready(function(){ $('#printPdf').click(function () { domtoimage.toPng(document.getElementById('frame_print')) .then(function (blob) { var pdf = new jsPDF('l', 'pt', [$('#frame_print').width(), $('#frame_print').height()]); pdf.addImage(blob, 'PNG', 0, 0, $('#frame_print').width(), $('#frame_print').height()); pdf.save('test.pdf'); }); }); $('#getPdf').click(function () { domtoimage.toPng(document.getElementById('frame_get')) .then(function (blob) { var pdf = new jsPDF('l', 'pt', [$('#frame_get').width(), $('#frame_get').height()]); pdf.addImage(blob, 'PNG', 0, 0, $('#frame_get').width(), $('#frame_get').height()); var b64 = pdf.output('datauristring'); Shiny.setInputValue('b64pdf', b64); }); }); }); " ui <- fluidPage( tags$head( tags$script(src = "https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.min.js"), tags$script(src = "https://cdnjs.cloudflare.com/ajax/libs/dom-to-image/2.6.0/dom-to-image.min.js"), tags$script(js) ), br(), actionButton("printPdf", "PRINT", class = "btn-primary"), div( id = "frame_print", style = "border: 2px solid black;", h3("Click on the button to print me as PDF") ), br(), actionButton("getPdf", "GET", class = "btn-info"), div( id = "frame_get", style = "border: 2px solid red;", h3("Click on the button to get me as PDF") ), br(), conditionalPanel( "input.b64pdf !== undefined", downloadButton("dwnld") ) ) server <- function(input, output, session){ observeEvent(input[["getPdf"]], { showNotification( "PDF base64 string stored in `input$b64pdf`.", type = "message" ) }) output[["dwnld"]] <- downloadHandler( filename = "Test.pdf", content = function(file){ mybase64 <- input[["b64pdf"]] conn <- file(file, open = "wb") base64decode(substr(mybase64, 51L, nchar(mybase64)), output = conn) close(conn) } ) } shinyApp(ui, server)
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda