私のプロジェクトでは新しい問題があります。私はpdfmake経由でpdfファイルを作成したい。私はthis tutorialをフォローしていましたが、「&」の「変換」を除いてすべて正常に動作します。私の 'var docDefinition'では、mysqlデータベースからコンテンツを取得しています。 「&」という名前のエンタープライズ名がいくつかあります。私がphp内の企業名を呼ぶと、 '&' - サインが正しく表示されます。しかし、javascript内でbase64に変換すると、生成されたpdfには「アンパサンド」だけが表示されます。 'ö'、 'ä'などのその他の記号は正しく表示されます。 アイデア&〜&base64 + Javascript
はここを更新し###私のコード 'generatePDF.blade.php' の抜粋です:
@section('scripts')
<script type="text/javascript">
...
// Create the PDF
var docDefinition = {
pageSize: 'A4',
pageOrientation: 'portrait',
...
content: [
{ text: 'Ausführende Firma: '},
'{{ $report->user->enterprise->enterprise_name }}',
...
],
};
そしてチュートリアルからのもの: // base64で文字列 にPDFファイルを保存しますvar pdfstr; 試み{pdfMake.createPdf(docDefinition).getDataUrl(関数(結果){ pdfstr =結果、 はconsole.log( '結果:' + pdfstr);
var pdfAsArray = convertDataURIToBinary(pdfstr);
console.log('Array: ' + pdfAsArray);
PDFJS.getDocument(pdfAsArray).then(function getPdf(pdf) {
console.log('pdf var: ' + pdf.getPage(1));
//
// Fetch the first page
//
pdf.getPage(1).then(function getPdfPage(page) {
var scale = 1;
var viewport = page.getViewport(scale);
//
// Prepare canvas using PDF page dimensions
//
var canvas = $("#pdfviewer").get(0);
var context = canvas.getContext('2d');
// Check device pixel ratio and then if the browser is doubleing them
console.log('Pixelratio is', window.devicePixelRatio);
console.log('The browser is doubleing the pixels:', context.webkitBackingStorePixelRatio);
var factor = 1;
if (window.devicePixelRatio >= 2 && context.webkitBackingStorePixelRatio < 2 || context.webkitBackingStorePixelRatio == undefined) {
factor = 2;
}
//canvas.height = viewport.height*factor;
//canvas.width = viewport.width*factor;
canvas.setAttribute('width', viewport.width*factor);
canvas.setAttribute('height', viewport.height*factor);
// context.scale(factor, factor);
context.transform(devicePixelRatio,0,0,devicePixelRatio,0,0);
//
// Render PDF page into canvas context
//
var renderContext = {
canvasContext: context,
viewport: viewport,
};
page.render(renderContext);
// $('#containerPDFViewer').modal({ backdrop: 'static' }); //disable backdrop so user need to make choice
});
});
});
}
catch (e) {
throw e;
}
var BASE64_MARKER = ';base64,';
function convertDataURIToBinary(dataURI) {
var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length;
var base64 = dataURI.substring(base64Index);
var raw = window.atob(base64);
var rawLength = raw.length;
var array = new Uint8Array(new ArrayBuffer(rawLength));
for (var i = 0; i < rawLength; i++) {
array[i] = raw.charCodeAt(i);
// array[i] = raw.codePointAt(i);
}
return array;
}
###更新2
私は、私の問題はjavascriptの部分とは関係がありますが、私が作業しているlaravelフレームワークを使っていることに気づいています。 私のデータをmySQLから取得しているときブレードビュー(両方ともUTF-8)でも問題ありませんが、純粋なブレードではなくjavascriptでエラーが発生するので、dd($ myvar-> value)でチェックしましたので、それが '$' - 記号i変換されずに "アンパサンド($ amp;)"に変換されます。そのブレードの問題をどのように解決できますか?
あなたは次のリンクを試すことができます https://stackoverflow.com/questions/3700326/decode-amp-back-to-in-javascript –
私の問題のコードニッペルを追加しました。 –
ありがとう@RahulLekurwale、私はすでにその投稿を見ました。私を助けなかった=( –