1

私のプロジェクトでは、「SaveAs PDF」機能を追加する必要があります。クライアント エンドでこれを行う純粋な JavaScript ソリューションを探していましたが、少なくとも今のところ実装できないと言われました。

jsPDF は現在まだ限定バージョンであり、グラフなどはサポートされていません。だから今、クライアントエンドからデータを受け取り、生成されたPDFファイルまたはユーザーがディスクに保存するためのリンクを送り返す、サーバーWebサービスをセットアップするための安定したオープンソースの無料ソリューションを探しています。

クライアントからのデータはクライアント ユーザーによって決定されます。つまり、ページ全体ではありません。ユーザーは、マップ、テーブル、またはそれらすべてを PDF ファイルに保存することを選択できます。

推奨事項はありますか?

PS: Windows環境で

4

2 に答える 2

2

ReportLabToolkitをチェックしてみてください。PDFを作成するためのオープンソースのPythonライブラリが含まれています。(必要なサーバー側言語を指定しませんでしたが、Pythonはかなり広くサポートされています。)

Javascriptでコーディングできるものが必要な場合、1つのオプションはPhantomJSです。このツールを使用すると、コマンドラインからヘッドレスWebkitブラウザーを実行でき、特にWebページをPDFとしてレンダリングおよび保存できます。Slippyはこのアプローチを使用しているため、そのプロジェクトからサンプルコードを取得できる可能性があります。PDF作成のスクリプトは、PythonよりもPhantomJSの方がおそらくはるかに高速ですが、はるかに遅くなる可能性があり(Webkitインスタンスを起動する必要があります)、サーバーのインストールが複雑になる可能性があります。

于 2011-10-02T19:49:38.683 に答える
1

サーバーに iframe で送信する JavaScript でこの関数を作成しました。

function download(url, datas){
    if(url && datas){ 
        var inputs = '', value,
            iframe = '<iframe name="iframeDownload" id="iframeDownload" width=0 height=0></iframe>';

        $(iframe).appendTo('body');

        datas.forEach(function(data){ 
            name = encodeURI(data.get('name'));
            value = encodeURI(data.get('value'));

            inputs+='<input name="'+name+'" value="'+value+'"/>'; 
        });

        $('<form action="'+url+'" method="post" target="iframeDownload">'+inputs+'</form>').appendTo('body').submit().remove(); // .appendTo and remove() are needed for firefox

        $(iframe).remove();
    };
};

データを送信できるように、入力名と値をエンコードしています。私のサーバーでは、php を使用しているので、これをデコードするには、rawurldecode が必要です。入力の名前を「fileName」および「file」として定義すると、次のように記述できます。

$fileName = rawurldecode($_POST['fileName']);
$file = rawurldecode($_POST['file']);

その後、ダウンロードを強制するには、正しいヘッダーを送信する必要があります。私はこの機能を使用しています:

function download($filename, $file) {
    header('Content-disposition: attachment; filename="'.$filename.'"');
    header('Content-Type: application/force-download');
    header('Content-Length: '. filesize($file));
    readfile($file);
}

サーバー側で作成されたために JavaScript からファイルを送信する必要がない場合は、ダウンロード関数にファイルのパスを追加するだけです。


PHP を使用している場合は、fpdf を使用して pdf を生成できます。

于 2011-10-02T20:09:05.900 に答える