il numero in modo dinamico di accodamento per PDF o fare presentare cambiamento pulsante relativo URL sulla base di quel numero

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

  •  03-10-2019
  •  | 
  •  

Domanda

sto servendo PDF da un db SQL e la loro presentazione nel browser. Sto cercando di trovare un modo per incorporare un numero nel formato PDF in modo dinamico in modo che il recordID per quel record PDF SQL è disponibile a me quando le sottopone utente i dati del modulo XML. L'utente preme il pulsante di invio del modulo e il modulo invia i propri dati XML alla mia pagina di presentazione. Se v'è un certo modo di cambiare l'URL di presentazione al volo poi ho potuto fare una stringa di query di passare la mia auto l'recordID. Non sto generando il PDF in codice, il suo essere creato a mano e poi caricati al mio sito.

Modifica

utente viene assegnato un someServer.com/pdfLink.aspx?formID=5 collegamento vanno lì e che le pagine tira un file PDF dalla DB e lo visualizza. Questo tira su acrobata in del browser a schermo intero in modo dalla mia pagina aspx non ha il controllo di presentare il modulo compilato, Acrobat è. L'utente compila il modulo e colpisce il pulsante di invio in forma. Questo pulsante di invio è stato istituito in fase di progettazione form per punto a un'altra pagina someSite.com/pdfSubmit.aspx L'presentare i messaggi pulsante i dati XML a quella pagina e posso elaborarlo. Ho bisogno del recordID nella stringa di query per la pagina someSite.com/pdfSubmit.aspx. Per fare questo avrei bisogno di modificare il formato PDF per aggiungere l'recordID e stringa di query per il pulsante di invio di presentare URL, o inserirlo nel PDF altro ware. La grande domanda è: come faccio a modificare il PDF appena prima che io lo mostro tramite someServer.com/pdfLink.aspx?formID=5 di fare una di queste due opzioni.

È stato utile?

Soluzione 3

Durante il tentativo @ suggerimento di zoccolo ho capito che dovevo cambiare dalla presentazione XML (dato che i suoi dati erano in formato PDF direttamente. Così ho cambiato il modulo per inviare come XDP che ha i dati XML + PDF incorporato. Quando ho fatto questo e consideravo la XDP grezzo che il modulo presentato mi sono imbattuto in questo.

  <?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>

Si noti il ??secondo all'ultima riga. Esso include automaticamente l'URL del PDF, che aveva il valore formid di cui avevo bisogno. Quindi tutto quello che dovevo fare era ottenere il XDP invece di posta puro XML dalla forma e mi dà tutto quello di cui avevo bisogno.

Altri suggerimenti

Incorporare un numero in PDF non è esattamente kosher, ma ci sono alcune cose che si possono fare che onorerà la spec.

L'attuale specifica PDF dice che "L'ultima riga del file deve contenere solo il marcatore di fine file

%%EOF

ma c'è qualche scappatoia - i dettagli di implementazione dire che non deve tecnicamente essere l'ultima riga del file, ma ha solo per apparire nell'ultimo 1K e, in generale, se non lo fai muck con troppo le cose, la maggior parte dei lettori compatibili saranno nemmeno lampeggiare. Se dovessi fare questo, sarei propenso ad aggiungere una nuova riga (se non esiste), poi un% (che è un commento PDF), un marker per farmi sapere che è mio, e, infine, il numero. Quindi, qualcosa di simile a:

// 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 dovrebbe essere qualcosa come "MyApplicationDocumentIdentifier:". O qualcosa del genere che renderà più facile identificare le tracce

querystring è di sola lettura, quindi non si può cambiare dinamicamente in fase di esecuzione. Tuttavia può voi:

  1. Aggiungi il recordID alla forma, al momento della pagina Invio viene inizialmente reso

  2. Si può elaborare il modulo presentare e poi fare un Response.Redirect o Server.Transfer alla pagina corretta con il parametro recordID aggiunto alla querystring

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top