الرقم إلحاق ديناميكيًا بـ PDF أو إنشاء زر إرسال قم بتغيير عنوان URL الخاص به استنادًا إلى هذا الرقم

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

  •  03-10-2019
  •  | 
  •  

سؤال

أنا أقدم ملفات PDF من SQL DB وتقديمها في المتصفح. أحاول اكتشاف طريقة لتضمين رقم في PDF ديناميكيًا بحيث يكون سجل RecordId لسجل PDFS SQL متاحًا لي عندما يقدم المستخدم بيانات نموذج XML. يضرب المستخدم زر إرسال في النموذج ويقدم النموذج بيانات XML الخاصة به إلى صفحة التقديم الخاصة بي. إذا كانت هناك طريقة لتغيير عنوان URL للتقديم أثناء الطيران ، فيمكنني القيام بسلسلة استعلام لتمرير نفسي بـ RecordId. أنا لا أقوم بإنشاء ملف PDF في الكود ، حيث يتم إنشاؤه باليد ثم تحميله على موقعي.

يحرر

يتم إعطاء المستخدم رابط someServer.com/pdfLink.aspx?formID=5 يذهبون إلى هناك وأن الصفحات تسحب PDF من DB ويعرضونها. هذا يسحب Acrobat في المتصفح بالحجم الكامل حتى لا تتحكم صفحة ASPX الخاصة بي في إرسال النموذج المكتمل ، Acrobat هو. يقوم المستخدم بملء النموذج ويضرب زر الإرسال في النموذج. تم إعداد زر الإرسال هذا في وقت تصميم النموذج للإشارة إلى صفحة أخرى someSite.com/pdfSubmit.aspx ينشر زر الإرسال بيانات XML إلى تلك الصفحة ويمكنني معالجتها. أحتاج إلى RecordId في سلسلة الاستعلام ل someSite.com/pdfSubmit.aspx صفحة. للقيام بذلك ، سأحتاج إلى تعديل PDF إما لإضافة RecordId وسلسلة الاستعلام إلى عنوان URL إرسال زر إرسال ، أو تضمينه في PDF Else Ware. السؤال الكبير هو كيف يمكنني تعديل PDF قبل عرضه عبرها مباشرة someServer.com/pdfLink.aspx?formID=5 للقيام أي من هذين الخيارين.

هل كانت مفيدة؟

المحلول 3

أثناء محاولة اقتراح @plinth ، أدركت أنه كان عليّ أن أتغير من تقديم XML (نظرًا لأن بياناته كانت على PDF مباشرة. لذلك قمت بتغيير النموذج إلى إرسال XDP الذي يحتوي على بيانات XML + PDF المضمنة. أن النموذج المقدم ركض عبر هذا.

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

لاحظ السطر الثاني إلى الأخير. ويتضمن تلقائيًا عنوان URL الخاص بـ PDF والذي كان له قيمة صيفية التي احتاجها. لذلك كل ما كان علي فعله هو الحصول على XDP بدلاً من منشور XML النقي من النموذج وهو ما يعطيني كل ما أحتاجه.

نصائح أخرى

إن تضمين رقم في PDF ليس بالضبط Kosher ، ولكن هناك بعض الأشياء التي يمكنك القيام بها والتي ستكرم المواصفات.

تقول مواصفات PDF الحالية أن "السطر الأخير من الملف يجب أن يحتوي فقط على علامة نهاية الملف

%%EOF

ولكن هناك بعض غرفة التذبذب - تفاصيل التنفيذ تقول أنه لا يجب أن يكون السطر الأخير من الملف ، ولكن يجب أن يظهر فقط في آخر 1K ، وبشكل عام ، إذا لم تقم بالخروج بالأشياء أيضًا كثيرًا ، لن يغمض معظم القراء المتوافقة. إذا اضطررت إلى القيام بذلك ، فسوف أميل إلى إضافة سطر جديد (إذا لم يكن هناك واحد) ، ثم ٪ (وهو تعليق PDF) ، علامة لإعلامني بأنه لي ، وأخيراً الرقم. لذلك شيء مثل:

// 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 شيئًا مثل "myapplicationDocumentIdentifier:" أو بعض الشيء الذي سيجعل من السهل تحديد مساراتك.

QueryString للقراءة فقط بحيث لا يمكنك تغييره ديناميكيًا في وقت التشغيل. ومع ذلك يمكنك:

  1. أضف recordID إلى النموذج في وقت تقديم صفحة الإرسال في البداية

  2. هل يمكنك معالجة نموذج إرسال ثم القيام باستجابة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top