2

これは私が現在持っているものです:

  • ユーザーがフォーム データを送信すると、「PDF のダウンロード」リンクが表示されます。

  • リンクは、その場で XFDF ファイルを生成し、適切なヘッダーなどを設定した後に XFDF ファイルを出力するスクリプトを指しています。

  • XFDF ファイルは、パスワードで保護された PDF を指します。これは、XFDF データを使用してフィールドに入力する汎用 PDF フォームです。

私が欲しいもの:

  • ユーザーが「PDF のダウンロード」リンクをクリックします。

  • XFDF はその場で生成されます (サーバーにファイルは書き込まれません)。

  • PDF と XFDF は、汎用 PDF を使用してサーバー側でマージされます。最終的な PDF の内容は、元の XFDF と同じようにユーザーに出力されます。

  • XFDF も最終的な PDF もサーバーに保存されません。

FDF/XFDF ファイルを処理するためのいくつかのオプションがあるpdftkを見ていましたが、これらはすべて、a) 元の XFDF ファイルがサーバー上にファイルとして存在し、b) 結果の PDF がファイルとして出力されることを前提としています。サーバー上のファイル。

また、pdftk は 4 歳です。

私は疑問に思っていました:

a) そこに pdftk に相当する新しいものはありましたか?

b)新しいpdftkのようなツールを使用するか、pdftkを使用して動的パスを使用して、データがサーバー上にファイル形式で存在する必要がないようにする方法があった場合は?

最近、組み込みの入力/出力ストリームを使用することを学びましたphp://が、使用方法についてはまだ本当に曖昧ですが、これはこれに適した場所でしょうか?

4

3 に答える 3

1

私はkhkremerのアドバイスを受けて、C#で小さな.net exeを作成し、itextsharpライブラリに基づいてxfdfファイルからPDFを作成しました。パススルーを使用して呼び出す必要がありますが、それは素晴らしくて小さいです。私のバージョンには、プロジェクトにその機能が必要だったため、PDFに非表示フィールドを挿入するオプションもあります。

iTextSharp.text.pdfアセンブリへの参照をダウンロードして追加する必要があります。

それが役に立てば幸い!

 using System;
 using System.IO;
 using iTextSharp.text.pdf;

namespace PDFBrain
{
    class Program
    {
        // args:
        // 0 => template
        // 1 => xfdf
        // 2 => outputfile
        // 3 => flatten output file?
        static void Main(string[] args)
        {
            if (args == null)
            {
                Console.Out.WriteLine("No arguments were provided. Exiting.");
                return;
            }

            if (args[0] == "create")
            {
                if (args.Length != 5)
                {
                    Console.Out.WriteLine("Wrong number of arguments were provided. Exiting.");
                    return;
                }
                CreatePDF(args[1], args[2], args[3], args[4]);    
            }

            if (args[0] == "hidden")
            {
                if (args.Length != 3)
                {
                    Console.Out.WriteLine("Wrong number of arguments were provided. Exiting.");
                    return;
                }

                InsertHiddenIdField(args[1], args[2]);
            }

        }


public static void CreatePDF(string templ, string xfdf, string output, string flatten)
    {
        PdfReader template = new PdfReader(templ);

        XfdfReader xfdfReader = new XfdfReader(xfdf);

        PdfStamper stamper = new PdfStamper(template, new FileStream(output, FileMode.Create));
        stamper.AcroFields.SetFields(xfdfReader);

        stamper.FormFlattening = flatten == "true" ? true : false;

        stamper.Writer.CloseStream = false;
        stamper.Close();

    }

    public static void InsertHiddenIdField(string templ, string output)
    {
        PdfReader template = new PdfReader(templ);

        PdfStamper stamper = new PdfStamper(template, new FileStream(output, FileMode.Create));

        TextField clientID = new TextField(stamper.Writer, new iTextSharp.text.Rectangle(10,750,60,770), "hdnClientID");
        clientID.Visibility = BaseField.HIDDEN;

        stamper.AddAnnotation(clientID.GetTextField(),1);

        stamper.Close();            
    }
}

}

于 2011-06-08T04:46:35.320 に答える
0

「Javaからデータにアクセスできます」-言うのは簡単です:)))))

私は Java でコマンド ライン ユーティリティを作成し、サーバー側でその場で動的に (ディスクにファイルを書き込まずに) PDF フォームに入力し、入力された PDF ドキュメントをブラウザーに提供する方法の php の例を作成しました: https://sourceforge .net/projects/pdfformfiller2/

その入力形式は、XFDF よりもはるかに単純です。
PHPの例では、エスケープ(エンコード)機能が提供されています。
これは、Adobe Reader UTF-8 サポートのバグを修正します。

于 2012-05-20T14:33:15.263 に答える
0

それを行う商用アプリケーションがあります (pdfstore.com でいくつか見つけることができます) が、いくつかのプログラミングにより、pdftk が PDF ファイルの処理に使用しているのと同じライブラリを使用して独自のアプリケーションを作成できます: iText ( http://itextpdf.com / ) .NET バージョンの iTextSharp もあります。

これにより、Java または .NET プログラムからデータにアクセスでき、ファイル形式で存在する必要がなくなり、データベースから直接データを取得できます。

新しいバージョンの iText を使用して pdftk を再コンパイルすることもできます。これにより、最新の PDF 処理機能と pdftk の使いやすさを利用できます。ただし、XFDF ファイルは必要です。

于 2010-06-29T10:54:39.720 に答える