2

単純な XFDF ファイルを使用してデータを入力していた入力 PDF があります。VS.NET 2010 を使用して、XFDF ドキュメントを読み取り、必要なすべての情報を入力し、ds.WriteXML(XFDFName) を使用して PDF を入力します。XFDF は、Process.Start(XFDFName) を介して作成および起動されます。これはすべて WinForms アプリケーションにあります。この方法は、数年前からチャンピオンのように機能しています。今まで...

私が遭遇した問題は、ファイルが Adob​​e LiveCycle で作成されたため、データを XFDF 形式にエクスポートできなかったことです。エクスポート オプションが (1) XML または (2) XDP のいずれかであることに気付きました。以前は、XFDF にエクスポートできました。大したことはないと思いましたが、別の形式です。ただし、私はこれらのオプションの両方に苦労しています。熟慮の末、XDP 形式を使用することにしました。

必要なすべての情報を含むデータセットを構築しました。Process.Start(XDPName) を使用して新しく作成した XDP を開くと、エラーが発生します。Reader が開き、次のエラーが表示されます。正しくデコードされませんでした)。」

私はPDFへのまっすぐなhrefを使用しようとしましたが、それもうまくいきませんでした。そこで、シリアル化された PDF をセクションの XDP に貼り付けることを選択しました。

この XDP ファイルは次のようになります ( 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 は偽物だと思いますが、さらに複雑なことに、Reader を開いて [ツール] > [フォーム] > [その他のフォーム オプション] > [フォーム データの管理] > [データのインポート] をクリックし、生成した XDP ファイルを選択します。フィールドは、期待どおりに入力されます。

基本的に、明らかにどこかに切断があります。必要なすべての情報を含む XDP ファイルがあります。XDP ファイルを入力する必要がある PDF フォームがあります。XDP の情報は、PDF のすべてのコントロール名と適切に一致します。しかし、XDP ファイルを起動すると、Reader から、ファイルが壊れている/サポートされていないと表示されます。私が理解しているように、XDP ファイルを起動すると、Reader を使用して適切に起動/入力する必要がありますね。

どんな情報も私を大いに助けてくれます。ありがとう。

4

3 に答える 3

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 enc As String enc = System.Convert.ToBase64String(bt) リターン enc End 関数

于 2012-04-25T23:57:47.607 に答える
0

また、すばらしい回答をしてくれた Dean J にも感謝します。以前に使用したことがありますが、商用の iText ライセンスや LiveCycle サーバーよりも多くの時間とお金を節約できました。参照されているコードには、エスケープされた文字列があります。

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

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

于 2013-06-18T19:25:55.820 に答える