Динамически добавление номера в PDF или сделать кнопку «Отправить» изменить свой URL на основе этого номера

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

  •  03-10-2019
  •  | 
  •  

Вопрос

Я обслуживаю PDFS от SQL DB и представляя их в браузере. Я пытаюсь выяснить способ динамически встроить номер в PDF, чтобы RECORDID для этой записи PDFS SQL доступен для меня, когда пользователь подает данные XML-формы. Пользователь ударяет кнопку «Отправить» в форме, и форма отправляет свои данные XML на свою страницу «Доставка». Если есть какой-то способ изменить URL-адрес подачи на лету, я мог бы сделать строку запроса, чтобы передать себе recordid. Я не генерирую PDF в коде, его созданный вручную, а затем загружено на мой сайт.

Редактировать

Пользователь дан ссылку someServer.com/pdfLink.aspx?formID=5 Они идут туда, и что страницы выдвигают PDF из БД и отображают его. Это подтягивает акробат в браузере в полный размер, поэтому моя страница ASPX не контролирует подачу заполненной формы, Acrobat. Пользователь заполняет форму и ударяет кнопку «Отправить» в форме. Эта кнопка «Отправка» была создана при проектировании формы, чтобы указать на другую страницу someSite.com/pdfSubmit.aspx Кнопка «Отправить» сообщает данные XML на этой странице, и я могу обработать ее. Мне нужен запись в строке запроса для someSite.com/pdfSubmit.aspx страница. Для этого мне нужно будет изменить PDF, чтобы либо добавить recordID и строку запроса к URL-адресу кнопки «Отправить» или встраивать его в PDF ELSE. Большой вопрос в том, как я могу изменить PDF незадолго до того, как я покажу его через someServer.com/pdfLink.aspx?formID=5 сделать один из этих двух вариантов.

Это было полезно?

Решение 3

При попытке предложений @ Plinth я понял, что пришлось измениться из представления XML (поскольку его данные были непосредственно в PDF. Итак, я изменил форму, чтобы представить в виде XDP, который имеет XML-данные + встроенные PDF. Когда я сделал это и просмотрел RAW XDP. что форма представлена, я бегал по этому поводу.

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

Обратите внимание на 2-й до последней строки. Он автоматически включает URL PDF, который имел значение FORMID, которое мне нужно. Итак, все, что мне нужно было сделать, это получить XDP вместо чистого XML-поста из формы, и это дает мне все, что мне нужно.

Другие советы

Встраивание номера в PDF не совсем кошер, но есть некоторые вещи, которые вы можете сделать, это будет почтить спецификацию.

Текущий PDF SPEC говорит, что «последняя строка файла должна содержать только в конце файла

%%EOF

Но есть какая-то комната для Wiggle - подробности реализации говорят, что это технически не должно быть последней строкой файла, но должна появиться только в последнем 1К и, вообще говоря, если вы тоже не справитесь с вещами Много, большинству совместимых читателей даже не мигают. Если бы мне пришлось это сделать, я был бы склонен добавить новую строку (если нет ни одного), то A% (который представляет собой комментарий 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. Добавить запись в форму в то время, когда отправленная страница изначально отображается

  2. Можете ли вы обработать форму отправки, а затем выполнить ответы .redirect или Server.transfer на правильную страницу с помощью параметра RECOREDID, добавленной в QueryString

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top