Динамически добавлять номер в PDF или сделать кнопку отправки изменить свой URL на основе этого номера - PullRequest
0 голосов
/ 04 мая 2010

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

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

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

Ответы [ 3 ]

1 голос
/ 04 мая 2010

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

В текущей спецификации PDF сказано, что «последняя строка файла должна содержать только маркер конца файла

%%EOF

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

0 голосов
/ 04 мая 2010

Пробуя предложение @ plinth, я понял, что должен был отказаться от отправки XML (поскольку его данные были непосредственно в PDF. Поэтому я изменил форму для отправки в виде XDP, в котором есть данные XML + встроенный PDF. необработанный 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-сообщения из формы, и оно дает мне все, что мне нужно.

0 голосов
/ 04 мая 2010

Строка запроса доступна только для чтения, поэтому вы не можете динамически изменять ее во время выполнения. Однако вы можете:

  1. Добавить идентификатор записи в форму во время первоначального отображения страницы отправки

  2. Можете ли вы обработать форму отправки и затем выполнить Response.Redirect или Server.Transfer на правильную страницу с параметром recordid, добавленным в строку запроса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...