1

ローカル データから pdf を生成しようとしています。

ArrayBuffer() および Uint8Array オブジェクトに問題がありました。解決策は、インターネットで見つけた js 実装を追加することでした。

今、この行にエラーがあります:

E/Web Console(21515): Uncaught TypeError: Illegal constructor at file:///android_asset/www/libs/jspdf.js:973

これは行です:

blob = new Blob([array], {type: "application/pdf"});

BlobBuilder.js と Blob.js を追加しました (jspdf の例のように)。

一般的に、jspdfでそれを行うことは可能ですか? (私はjspdfで多くの問題を見つけました)

どうすればこの問題を解決できますか?

ブラウザー、アンドロイド、iOS で PDF を生成するにはどうすればよいですか?

助けてくれてありがとう、良い一日を:-)

4

2 に答える 2

1

Blob コンストラクターは android では機能しません (すべての Web ブラウザーをサポートしていません)。簡単な解決策は、Phonegap filewriter を使用して PDF ファイルを作成することです。以下は、jsPDF.jsファイルへの変更です。

output = function (type, options) {
            var undef, data, length, array, i, blob;
            switch (type) {
            case undef:
                return buildDocument();
            case 'save':
                if (navigator.getUserMedia) {
                    if (window.URL === undefined) {
                        return API.output('dataurlnewwindow');
                    } else if (window.URL.createObjectURL === undefined) {
                        return API.output('dataurlnewwindow');
                    }
                }
                data = buildDocument();
                write(data, options);                    
                break;
            case 'datauristring':
            case 'dataurlstring':
                return 'data:application/pdf;base64,' + btoa(buildDocument());
            case 'datauri':
            case 'dataurl':
                document.location.href = 'data:application/pdf;base64,' + btoa(buildDocument());
                break;
            case 'dataurlnewwindow':
                window.open('data:application/pdf;base64,' + btoa(buildDocument()));
                break;
            default:
                throw new Error('Output type "' + type + '" is not supported.');
            }
            // @TODO: Add different output options
        };

「cordova plugin add org.apache.cordova.file」として CLI から cordova file plugin をプロジェクトに追加します。

次に、以下のように phonegap filewriter API を使用してwrite()関数を実装します。

write = function (data, filename) {
    var PERSISTENT = window.PERSISTENT || LocalFileSystem.PERSISTENT;

window.requestFileSystem(PERSISTENT, 0, gotFS, fail);

function gotFS(fileSystem) {
    fileSystem.root.getFile(filename, {create: true, exclusive: false}, gotFileEntry, fail);
}

function gotFileEntry(fileEntry) {
    fileEntry.createWriter(gotFileWriter, fail);
}

function gotFileWriter(writer) {
    writer.write(data);
}

function fail(error) {
    console.log(error.code);
 }
}
于 2013-11-19T13:22:53.270 に答える