Dynamisch append Nummer PDF oder macht Taste Änderung die URL einreichen auf der Grundlage dieser Nummer

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

  •  03-10-2019
  •  | 
  •  

Frage

Ich diene PDFs aus einer SQL-Datenbank und sie im Browser präsentieren. Ich versuche, eine Zahl im PDF einzubetten dynamisch so heraus einen Weg zu, dass die recordID für die PDF-Dateien SQL Datensatz mir zur Verfügung steht, wenn der Benutzer trägt die XML-Formulardaten. Der Benutzer trifft die Submit-Button auf dem Formular und das Formular sendet seine XML-Daten zu meiner Vorlage Seite. Wenn es eine Möglichkeit, die Vorlage URL der Änderung on the fly dann könnte ich ein Abfrage-Zeichenfolge tun, um mein Selbst passiere die recordID. Ich bin nicht der PDF in Code zu erzeugen, seine von Hand erstellt werden und dann auf meiner Website hochgeladen.

Bearbeiten

Benutzer wird einen Link someServer.com/pdfLink.aspx?formID=5 sie dorthin zu gehen gegeben und die Seiten zieht ein PDF aus der DB und zeigt es. Dies zieht Akrobat in Browser in voller Größe, so meine aspx Seite das ausgefüllte Formular nicht die Kontrolle über die Einreichung ist, Acrobat ist. Der Benutzer füllt das Formular aus und trifft auf die Schaltfläche in dem Formular. Diese Submit-Button wurde in Form Entwurfszeit Punkt auf einem anderen Seite someSite.com/pdfSubmit.aspx einrichten Der Button setzt die XML-Daten zu dieser Seite einreichen, und ich kann es verarbeiten. Ich brauche die recordID in dem Query-String für die someSite.com/pdfSubmit.aspx Seite. Dazu brauche ich, um die PDF-Datei entweder fügen Sie die recordID und Query-String an die Submit-Button des einreichen URL oder binde sie in der PDF sonst ware zu ändern. Die große Frage ist, wie ändere ich das PDF, kurz bevor ich es über someServer.com/pdfLink.aspx?formID=5 zeigen eine dieser beiden Optionen zu tun.

War es hilfreich?

Lösung 3

Während @ Sockel Vorschlag versucht, mir klar, ich von XML-Vorlage zu ändern hatte (da seine Daten auf dem PDF war direkt. Geändert Also habe ich das Formular als XDP einzureichen, die XML-Daten + eingebettete PDF hat. Als ich das tat und betrachtet die rohe XDP, dass das Formular abgeschickt ich über diese lief.

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

Beachten Sie die 2. bis letzten Zeile. Es schließt automatisch die URL der PDF, die den formid Wert hatte, dass ich brauchte. Also alles, was ich tun musste, war die XDP anstelle von reiner XML Post aus der Form zu bekommen und es gibt mir alles, was ich brauchte.

Andere Tipps

eine Zahl in PDF einbetten ist nicht gerade rein, aber es gibt einige Dinge, die Sie tun können, die die Spezifikation ehren.

Die aktuelle PDF-Spezifikation sagt, dass „Die letzte Zeile der Datei nur der End-of-Datei Marker enthalten soll

%%EOF

, aber es gibt wenig Spielraum - die Details der Implementierung sagen, dass es technisch nicht die letzte Zeile der Datei sein muss, hat aber erst in dem letzten 1K erscheinen und, allgemein gesprochen, wenn Sie nicht tun Dreck zu viel mit den Dingen, die meist kompatible Leser nicht einmal blinken. Wenn ich dies zu tun hätte, würde ich geneigt sein, eine neue Zeile hinzuzufügen (wenn es nicht ein), dann ein% (das ist ein PDF-Kommentar ist), eine Markierung zu lassen Sie mich die Meinen kennen, und schließlich die Nummer. So etwas wie:

// 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 sollte so etwas wie „MyApplicationDocumentIdentifier:“. Oder so, was es einfach, Ihre Spuren zu identifizieren machen

Die Abfragezeichenfolgeflag ist schreibgeschützt, so dass Sie nicht dynamisch zur Laufzeit ändern können. Allerdings können Sie:

  1. Fügen Sie die recordID der Form zum Zeitpunkt der einreichen Seite zunächst gerendert

  2. Können Sie das Formular abschicken verarbeiten und dann ein Response.Redirect oder Server.Transfer auf die richtige Seite mit dem RecordID Parameter des Abfragezeichenfolgeflag hinzugefügt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top