내 프로젝트에 새로운 문제가 있습니다. pdfmake를 통해 pdf 파일을 만들고 싶습니다. 나는 this tutorial을 따르고 있었고 모든 것이 올바르게 작동했지만 '&'기호의 '변형'은 예외였습니다. 내 'var docDefinition'에서 나는 mysql 데이터베이스로부터 내용을 얻고있다. 일부 기업 이름은 '&'- 기호로되어 있습니다. php 내에서 엔터프라이즈 이름을 호출하면 '&'- 로그인이 올바르게 표시됩니다. 하지만 javascript 내에서 base64로 변환하면 생성 된 pdf에 '앰퍼샌드'만 표시됩니다. 'ö', 'ä'등과 같은 다른 기호가 올바르게 표시됩니다. 아이디어가 있으십니까?& ~ & base64 + Javascript
@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 파일을 저장
다음업데이트 ### 내 코드 'generatePDF.blade.php'의 미리보기입니다 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)를 통해 확인하고 볼 수 있도록, 그 '$'- 기호 나는 s는 변환되지 않고 "ampersand ($ amp;)"로 변환됩니다. 블레이드 문제를 어떻게 해결할 수 있습니까?
는 다음 링크를 시도 할 수 https://stackoverflow.com/questions/3700326/decode-amp-back-to-in-javascript –
감사 @Andreas, 나는 내 문제에 대한 codesnippet을 추가했습니다. –
고마워요 @RahulLekurwale, 그 게시물을 이미 보았습니다. 도와주지 않았습니까 = ( –