número añada de forma dinámica a PDF o hacer presenten botón cambio de su dirección URL en base a ese número

StackOverflow https://stackoverflow.com/questions/2765486

  •  03-10-2019
  •  | 
  •  

Pregunta

estoy sirviendo archivos PDF a partir de una base de datos SQL y su presentación en el navegador. Estoy tratando de encontrar una manera de incorporar un número en el PDF de forma dinámica para que el recordID para ese registro PDF SQL está disponible para mí cuando el usuario presenta los datos de formularios XML. El usuario pulsa el botón de enviar en el formulario y el formulario envía sus datos XML a mi página de presentación. Si hay alguna manera de cambiar la URL presentación sobre la marcha entonces podría hacer una cadena de consulta para pasar mi auto la recordID. No estoy generar el PDF en el código, su ser creado por la mano y luego se suben a mi sitio.

Editar

El usuario se le da un enlace someServer.com/pdfLink.aspx?formID=5 que ir allí y que las páginas tira de un PDF a partir de la base de datos y la muestra. Esto detiene acróbata en el navegador de tamaño completo, así que mi página aspx no está en control de enviar el formulario completado, es Acrobat. El usuario rellena el formulario y oprime el botón de enviar el formulario. Este botón de enviar se creó en el tiempo de diseño de formularios a punto a otra página someSite.com/pdfSubmit.aspx El enviar mensajes de botón los datos XML a esa página y puedo procesarlo. Necesito el recordID en la cadena de consulta de la página someSite.com/pdfSubmit.aspx. Para ello necesitaría modificar el PDF para agregar el recordID y cadena de consulta a los de someter botón de enviar URL o incrustarlo en el PDF demás mercancías. La gran pregunta es cómo puedo modificar el PDF justo antes de que se exhiba a través de someServer.com/pdfLink.aspx?formID=5 hacer cualquiera de estas dos opciones.

¿Fue útil?

Solución 3

Al tratar @ sugerencia del zócalo me di cuenta que tenía que cambiar de presentación XML (ya que sus datos estaban en el PDF directamente. Así que cambió la forma de presentar como XDP que tiene datos XML + incrustado PDF. Cuando hice esto y ver XDP la prima que la forma presentada me encontré con esto.

  <?xml version="1.0" encoding="UTF-8" ?> 
  <?xfa generator="XFA2_4" APIVersion="3.0.8262.0"?> 
  <xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/" timeStamp="2010-05-04T15:15:00Z" uuid="6d0944c8-1573-442c-9c85-11e372bd38c3">
    <xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">
      <xfa:data>
         <form1>
           <TextField1>TestMe</TextField1> 
         </form1>
       </xfa:data>
    </xfa:datasets>
    <pdf href="ViewPDF.aspx?formID=10" xmlns="http://ns.adobe.com/xdp/pdf/" /> 
 </xdp:xdp>

Aviso de la segunda a la última línea. Incluye automáticamente la URL del PDF que tenía el valor formid que necesitaba. Así que todo lo que tenía que hacer era conseguir el XDP en lugar de mensaje XML puro a partir de la forma y me da todo lo que necesitaba.

Otros consejos

La incorporación de un número en PDF no es exactamente kosher, pero hay algunas cosas que usted puede hacer que honrará a la especificación.

La especificación PDF actual dice que "La última línea del archivo debe contener sólo el marcador de fin de archivo

%%EOF

pero hay un margen de maniobra - los detalles de implementación decir que técnicamente no tiene por qué ser la última línea del archivo, pero sólo tiene que aparecer en el último 1K y, en general, si no lo hace lodo con demasiado las cosas, los lectores más compatibles serán ni siquiera parpadear. Si tuviera que hacer esto, yo me inclinaría a añadir un salto de línea (si no hay uno), entonces un% (que es un comentario PDF), un marcador para que me haga saber que de la mía, y finalmente el número. Así que algo como:

// assume we already know it ends with %%EOF
void AppendNumberToPdf(Stream stm, int number, bool addNewline)
{
    stm.Seek(0, SeekOrigin.End); // go to EOF
    StreamWriter writer = new StreamWriter(stm, new ASCIIEncoding(), 1024);
    writer.WriteLine(string.Format("{0}% {1} {2}", (addNewLine ? "\n" : ""), kMyMarkerString, number));
    writer.Flush();
}

kMyMarkerString debe ser algo como "MyApplicationDocumentIdentifier:". O alguna cosa que hará que sea fácil identificar sus pistas

El cadena de consulta es de sólo lectura por lo que no puede cambiar dinámicamente en tiempo de ejecución. Sin embargo puede que:

  1. Agregue el recordID a la forma en el momento de la página se procesa inicialmente presentar

  2. Se puede procesar la forma presente y luego hacer un Response.Redirect o Server.Transfer a la página correcta con el parámetro recordID añadido a la cadena de consulta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top