2012-04-03 25 views
2

シンプルなXFDFファイルを使用して埋め込まれた埋め込みPDFがあります。 VS.NET 2010を使用するXFDFドキュメントを読み込んで必要な情報をすべて入力し、ds.WriteXML(XFDFName)を使用してPDFにデータを取り込みます。 XFDFはProcess.Start(XFDFName)を介して記述され、起動されます。これはすべてWinFormsアプリケーションに含まれています。この方法は数年前からチャンピオンのように働いていました。これまでのところ...PDFにXDPを埋め込む

私が遭遇した問題は、Adobe LiveCycleで作成されたファイルのため、データをXFDF形式にエクスポートできなかったことです。私は、エクスポートオプションが(1)XMLか(2)XDPのいずれかであることに気づいた。過去に私はXFDFにエクスポートできました。私は大したことは考えていませんでした。しかし、私はこれらのオプションの両方に苦労しています。いくつかの審議の後、私はXDPフォーマットを使用することに決めました。

私は必要なすべての情報を使ってデータセットを構築していますが、Process.Start(XDPName)を使用して新しく作成したXDPを開くときにエラーが発生します。 Readerが開き、次のエラーが表示されます。"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に使用しようとしましたが、それもうまくいきませんでした。そこで、セクションのXDPにシリアライズされたPDFを貼り付けることにしました。

この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ファイルを持っています。 XDPファイルを作成するために必要なPDFフォームがあります。 XDPの情報は、PDFのすべてのコントロール名と正しく一致します。 しかし、XDPファイルを起動すると、Readerは壊れている/サポートされていないと私に伝えています。私が理解しているように、XDPファイルを起動すると、Readerを使用して適切に起動/設定する必要があります。

大変お手伝いをします。ありがとう。 VB.netで似のことをやって

答えて

0
私もこれが行わ取得中に問題が生じています

....

はチャンクを使用するときに動作するようには思えませんが、それは私がHREFを使用する場合は、作業を行い、文字列として文字列薄暗いENCとして(バイトとしてByVal BT())ローカルファイル...

試験例

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 

機能EncodeByteENC = System.Convert.ToBase64String(BT) 戻りENC エンド機能

0

私はまた、優れた答えをディーンJに感謝したいと思います。私はそれを以前使用していたので、商用のiTextライセンスやLiveCycleサーバーに多くの時間と費用を節約できました。参照コードでは、エスケープされた文字列があります:

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

は、二重引用符の前にバックスラッシュを注意してください。それらはあなたのXMLの中にあるべきではありません。実際にDean JがC#またはPHPでそのコードをすべて持っていたので、引用符を彼のためにエスケープする必要があった可能性があります。

0

これが適切かどうかわかりませんが、VBAのマージサブルーチンを別の機会に使って作業するときにXDPファイルを開くのに矛盾がありました。時にはうまくいくこともあれば、そうでない場合もあります。

結局のところ、Adobe Acrobat(適切ではなくReader)が開かれているか、PDFのデフォルトとして設定されていて、Adobe ReaderではなくXDPを開こうとしていたのです。

次の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> 
関連する問題