2012-04-03 2 views
2

У меня есть вложенный PDF-файл, который использовался для простого файла XFDF для заполнения. Используя VS.NET 2010, я прочитал в документе XFDF и заполнил всю необходимую информацию и заполнил PDF, используя ds.WriteXML (XFDFName). XFDF записывается и запускается через Process.Start (XFDFName). Все это в приложении WinForms. Этот метод работал как чемпион в течение нескольких лет. До сих пор ...Заполнение PDF с помощью XDP

Проблема, с которой я столкнулся, не удалось экспортировать данные в формат XFDF из-за того, что файл был создан в Adobe LiveCycle. Я заметил, что параметры экспорта были либо (1) XML, либо (2) XDP. Раньше я мог экспортировать в XFDF. Ничего страшного, я думал, просто еще один формат. Тем не менее, я боролся с обоими этими вариантами. После некоторых обсуждений я решил использовать формат XDP.

У меня есть набор данных, построенный со всей необходимой информацией, я получаю сообщение об ошибке при открытии вновь созданного XDP с помощью Process.Start (XDPName). Считыватель открывается, и меня встречает следующая ошибка: "Adobe Reader could not open 'GUID_HERE.xdp' because it is either not a supported file type or because the file has been damaged (for example, it was sent as an email attachment and wasn't correctly decoded)."

Я попытался использовать прямое href в PDF, это тоже не сработало. Поэтому я решил использовать сериализованный PDF-файл в XDP в разделе.

Этот файл XDP выглядит следующим образом (thanks Dean J):

<?xml version='1.0' encoding='UTF-8'?> 
<?xfa generator='AdobeDesigner_V7.0' APIVersion='2.2.4333.0'?> 
<xdp:xdp xmlns:xdp='http://ns.adobe.com/xdp/'> 
    <xfa:datasets xmlns:xfa='http://www.xfa.org/schema/xfa-data/1.0/'> 
     <xfa:data> 
      XML is here - matching the dynamic fields in the PDF. 
     </xfa:data> 
    </xfa:datasets> 
    <pdf xmlns=\"http://ns.adobe.com/xdp/pdf/\"><document> 
     <chunk> 
      Base64 encoded PDF 
     </chunk> 
    </document></pdf> 
</xdp:xdp> 

Я думаю XDP я генерации является фальшивкой - но еще более усложнить вещи - если открыть Читатель выберите Инструменты> Формы> Дополнительно формы Параметры> Управление данными формы> Импорт данных и выбор файла XDP, который я сгенерировал, все поля заполняются так, как я ожидаю.

Так что, в принципе, есть где-то разъединение: У меня есть файл XDP со всей информацией, в которой я нуждаюсь. У меня есть форма PDF, которую мне нужно заполнить файлом XDP. Информация в XDP правильно соответствует всем именам управления из PDF. Но когда я запускаю XDP-файл, Reader сообщает мне, что он сломан/не поддерживается. Насколько я понимаю, когда вы запускаете XDP-файл, он должен правильно запускать/заполнять с помощью Reader, правильно?

Любая информация поможет мне безмерно. Благодарю.

ответ

0

Я также возникли проблемы с получением этого сделать ....

Делать похожую вещь в VB.net

, кажется, не работает при использовании кусок, но он работает, если я использую HREF и локальный файл ...

Тестирование Пример

Public Sub BuildContent(ByVal slno As String) 

    Dim strXML As String 

    Dim fs As System.IO.FileStream = Nothing 
    Dim bw As System.IO.BinaryWriter = Nothing 
    Dim Buffer() As Byte 
    'fs = New System.IO.FileStream("kpiAlert10.pdf", IO.FileMode.Create) 
    'bw = New System.IO.BinaryWriter(fs) 
    'Response.ContentType = "application/vnd.adobe.xdp+xml" 
    ' 
    ' Constant XPD Header 
    ' 
    strXML = "<?xml version='1.0' encoding='UTF-8'?>" 
    strXML = strXML & "<?xfa generator='AdobeDesigner_V7.0' APIVersion='2.2.4333.0'?>" 
    strXML = strXML & "<xdp:xdp xmlns:xdp='http://ns.adobe.com/xdp/'>" 
    strXML = strXML & "<xfa:datasets xmlns:xfa='http://www.xfa.org/schema/xfa-data/1.0/'>" 
    strXML = strXML & "<xfa:data>" 
    ' 
    ' Place code here to get the current Logged in user ID 
    ' and perform a query to the back end database and filter by ID 
    ' then generate the following XML Data using the resultant Recordset ...etc. 
    ' 

    strXML = strXML & "<transaction><kpi><name>Ego ille</name><data><sn>Si manu vacuas</sn><amt>Apros tres et quidem</amt><delta>Mirum est</delta></data></kpi></transaction>" 
    ' 
    ' 
    ' 
    strXML = strXML & "</xfa:data>" 
    strXML = strXML & "</xfa:datasets>" 
    ' 
    ' Point the XPD to the PDF Form created under Adobe LiveCycle Desinger 
    ' 
    Dim contents As String 

    contents = EncodeFile("kpiAlert.pdf") 
    'Buffer = Convert.FromBase64String(contents) 
    strXML = strXML & "<pdf xmlns='http://ns.adobe.com/xdp/pdf/'>" 
    strXML = strXML & "<document>" 
    strXML = strXML & "<chunk>" & contents & "=</chunk>" 
    strXML = strXML & "</document>" 
    strXML = strXML & "</pdf>" 

    'strXML = strXML & "<pdf href='C:/kpiAlert.pdf' xmlns='http://ns.adobe.com/xdp/pdf/' />" 
    ' 
    ' Close the XPD File 
    ' 
    strXML = strXML & "</xdp:xdp>" 

    Using outfile As New StreamWriter("kpiAlert_" & slno & ".pdf") 
     outfile.Write(strXML.ToString()) 
    End Using 

End Sub 

Function EncodeFile(ByVal srcFile As String) As String 

    Dim srcBT As Byte() 
    Dim dest As String 
    Dim sr As New IO.FileStream(srcFile, IO.FileMode.Open) 
    ReDim srcBT(sr.Length) 
    sr.Read(srcBT, 0, sr.Length) 
    sr.Close() 
    dest = EncodeByte(srcBT) 
    Return dest 

End Function 

enter code here 

Функция EncodeByte (ByVal Bt() As Byte) As String Dim прил As String прил = System.Convert.ToBase64String (Ь) Return прил End Function

0

Я также хочу поблагодарить Dean J за отличный ответ. Я использовал его раньше, и он сэкономил много времени и денег на коммерческой лицензии iText или LiveCycle. В коде ссылочного есть строка, которая экранируется:

<pdf xmlns=\"http://ns.adobe.com/xdp/pdf/\"> 

Обратите внимание на обратное косое до двойных кавычек. Это не должно быть в вашем XML, поскольку это сделает его недействительным.Скорее всего, у Dean J действительно был весь этот код на C# или PHP, поэтому кавычки должны были сбежать для него.

0

Не уверен, что это было актуально, но у меня было несогласованность при открытии XDP-файлов при работе над подпрограммой слияния в VBA в разных случаях. Иногда это сработало, иначе бы этого не случилось.

В конце концов я заметил, что это произошло, когда Adobe Acrobat (собственно - не Reader) уже открыт или установлен по умолчанию для PDF, и по какой-либо причине он пытался открыть XDP, а не Adobe Reader.

Следующая XML работает для меня:

<?xml version="1.0" encoding="UTF-8"?> 
<?xfa generator='AdobeDesigner_V7.0' APIVersion='2.2.4333.0'?> 
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/"> 
    <xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/"> 
    <xfa:data> 
     <PlannedCycles>999</PlannedCycles> 
     <cyclenumber>1</cyclenumber> 
     <ConsultantName>Dr Jonathon Hogan-Doran</ConsultantName> 
     <Name>SMITH, Bob</Name> 
     <URN>9795240</URN> 
     <DOB>14/04/1901</DOB> 
     <ward>CDCO</ward> 
     <ht>100</ht> 
     <wt>99</wt> 
     <Diagnosis>Metastatic Adenocarcinoma</Diagnosis> 
     <chemoD1>17/06/2015</chemoD1> 
    </xfa:data> 
    </xfa:datasets> 
    <pdf xmlns="http://ns.adobe.com/xdp/pdf/" href="\\xxxxxxx.gov.au\Medical Oncology\Chemotherapy Scripts\S\SMITH, Bob- (75240) - dob 14.04.1901 - Capecitabine with Bevacizumab - Cycle 1.pdf"/> 
</xdp:xdp> 
Смежные вопросы