wkhtmltopdfλ₯Ό μ¬μ©νμ¬ c3 μ°¨νΈκ° μλ htmlμμ PDF λ¬Έμλ₯Ό μμ±ν λ μ΅μ λ²μ μ c3(0.3.0)μ wkhtmltopdfμμ "κ²½κ³ : undefined:0 TypeError: 'undefined' is not a function" μ€λ₯λ₯Ό μ립λλ€. κ²°κ³Ό PDFμλ μ°¨νΈ λμ κ³΅λ°±μ΄ νμλ©λλ€.
μ°¨νΈλ₯Ό μ μνκ² μμ±νλ λ° μ¬μ©λλ μ΄μ λ²μ μ c3μ λλ€. λλ μ΄κ²μ μν λ° λ§λ μ°¨νΈ μ νμΌλ‘ μ¬ννμ΅λλ€.
wkhtmltopdfκ° ν¬ν¨λ μ 체 html, css λ° javascript ν¨ν€μ§λ λ€μ μμΉμ μμ΅λλ€.
http://burgan.whitevector.com/images/bug_report.zip
wkhtmltopdfμ μ 체 μΆλ ₯:
shark@virshark :~/bug_report$ sh μμ±_pdf.sh
νμ΄μ§ λ‘λ μ€(1/6)
κ²½κ³ : undefined:0 TypeError: 'undefined'λ ν¨μκ° μλλλ€.
νμ΄μ§ μ (2/6)
λ§ν¬ ν΄κ²°(4/6)
λ¨Έλ¦¬κΈ λ° λ°λ₯κΈ λ‘λ(5/6)
νμ΄μ§ μΈμ(6/6)
μλ£
λλμ΄ λλ¬Έμ μ©μμ wkhtmltopdf
μ¬μ© QtWebKit
μλ λ¬Έμ κ° Function.prototype.bind
, C3μ μ λ²μ μμ μ¬μ©λλ λ°©λ²μ. phantomjs λ΄λ³΄λ΄κΈ°λ₯Ό μμ±ν λ λΉμ·ν λ¬Έμ λ₯Ό μ§μ
Function.prototype.bind = Function.prototype.bind || function (thisp) {
var fn = this;
return function () {
return fn.apply(thisp, arguments);
};
};
wkhtmltopdf
μ΅μνμ§ μμ§λ§ λ λλ§λλ νμ΄μ§μ 컨ν
μ€νΈ λ΄μμ ν΄λΉ μ½λλ₯Ό μ€νν΄μΌ ν©λλ€.
κ°μ¬ν©λλ€! λ€λ₯Έ μλ°μ€ν¬λ¦½νΈλ³΄λ€ λ¨Όμ μ΄ 6μ€μ μ½μ νλ©΄ λ¬Έμ κ° ν΄κ²°λ©λλ€.
κ°μ¬ ν΄μ! μ΄ λ¬Έμ λ ν΄κ²°λ κ² κ°μΌλ μ’ λ£ν΄ μ£ΌμΈμ.
@yuvii
@yuvii λΉμ μ κ΅μ₯ν©λλ€!
vega / wkhtmltopdf
κ°μ λ¬Έμ κ° λ°μνμ΅λλ€. @yuvii μ μ루μ
μ 맀λ ₯μ²λΌ μλνμ΅λλ€. μ λ§ κ°μ¬ν©λλ€!
@yuvii λΉμ μ μμ λλ€!
@yuvii κ°μ¬ν©λλ€!!!!!
Google μ§μμ κ²½μ° @yuviiλ fullcalendarλ‘ λ΄ μΈλ λ¬Έμ λ₯Ό ν΄κ²°νμ΅λλ€. λλ ν΄κ²°μ±
μ μ°Ύλ λ° λͺ μκ°μ 보λλ€.
κ°μ¬ν©λλ€.
λλ¨νλ€ @yuvii . Google Maps APIκ° λ³κ²½λμμ λ λμΌν λ¬Έμ κ° λ°μνμ΅λλ€.
κ³ λ§μ, μ΄κ²μ λ΄ django pdfkit λ¬Έμ λ₯Ό μμ ν ν΄κ²°νμ΅λλ€!
@yuvii κ°μ¬ν©λλ€. λλ μ루μ
μ μ°Ύλ λ° λͺ μκ°μ 보λμ΅λλ€.
Fabric.js > Html > wkhtmltopdf > .pdf νμΌλ‘ μΊλ²μ€μ 그리기
λΈλΌμ°μ μ HTMLμ μ ννμ§λ§ μΆλ ₯ .pdf νμΌμ λΉ μΊλ²μ€κ° μμμ΅λλ€.
fabric.jsμ λμΌν λ¬Έμ κ° μλ κ² κ°μ΅λλ€.
λλμ΄ λλ¬Έμ μ©μμ
wkhtmltopdf
μ¬μ©QtWebKit
μλ λ¬Έμ κ°Function.prototype.bind
, C3μ μ λ²μ μμ μ¬μ©λλ λ°©λ²μ. phantomjs λ΄λ³΄λ΄κΈ°λ₯Ό μμ±ν λ λΉμ·ν λ¬Έμ λ₯Ό μ§μ Function.prototype.bind = Function.prototype.bind || function (thisp) { var fn = this; return function () { return fn.apply(thisp, arguments); }; };
wkhtmltopdf
μ΅μνμ§ μμ§λ§ λ λλ§λλ νμ΄μ§μ 컨ν μ€νΈ λ΄μμ ν΄λΉ μ½λλ₯Ό μ€νν΄μΌ ν©λλ€.
λλΆμ ν루λ₯Ό ꡬνμ΅λλ€. C3jsμμ μ μκ² ν¨κ³Όμ μ΄μμ΅λλ€. μ°¨νΈ μ»¨ν μ΄λ λλΉλ₯Ό μ€μ νλ κ²μ΄ μ€μν©λλ€.
μ΄ λκΈμ λλμ΅λλ€. μ λ λ μ΄μ μ½λ©μ νμ§ μκ³ κ·Έ μΈμμ λ λ¬μ§λ§ μ΄λ°κΈ μ΄ νμ΄μ§λ₯Ό λ°©λ¬Ένμ¬ μ κ° νμ λ¬Έμ μ λν΄ μ°Ύμ ν΄κ²°μ± μ΄ 5λ λμ _λ§μ μ¬λλ€μκ² λμμ΄ λμλ€λ μ¬μ€μ κ²½μΈμ¬ μμ μ§μΌλ³΄κ³ μμ΅λλ€. λ―Έμ³€μ΄
λλμ΄ λλ¬Έμ μ©μμ
wkhtmltopdf
μ¬μ©QtWebKit
μλ λ¬Έμ κ°Function.prototype.bind
, C3μ μ λ²μ μμ μ¬μ©λλ λ°©λ²μ. phantomjs λ΄λ³΄λ΄κΈ°λ₯Ό μμ±ν λ λΉμ·ν λ¬Έμ λ₯Ό μ§μ Function.prototype.bind = Function.prototype.bind || function (thisp) { var fn = this; return function () { return fn.apply(thisp, arguments); }; };
wkhtmltopdf
μ΅μνμ§ μμ§λ§ λ λλ§λλ νμ΄μ§μ 컨ν μ€νΈ λ΄μμ ν΄λΉ μ½λλ₯Ό μ€νν΄μΌ ν©λλ€.
Holly Molly, λΉμ μ μμν λ΄ λ§μμ νΉλ³ν μ리λ₯Ό κ°μ§ κ²μ λλ€. Highchart κ·Έλνλ μΉ λΈλΌμ°μ μμ μ λλ‘ μλνμ§λ§ Wkhtmltopdfλ₯Ό μ¬μ©νμ¬ PDFλ‘ μ λλ‘ λ³νλμ§ μμμ΅λλ€. λκ΅°κ°κ° κ°μ λ¬Έμ λ₯Ό κ²ͺκ³ μλ€λ©΄ νμ΄μ°¨νΈ μ€ν¬λ¦½νΈλ₯Ό νΈμΆνκΈ° μ μ ν΄λΉ κΈ°λ₯μ μΆκ°νκΈ°λ§ νλ©΄ λ©λλ€. λ§μΉ¨λ΄ 4μκ° λ§μ ν΄κ²°μ± μ μ°Ύμμ΅λλ€. λν Wkhtmltopdf λ° Highchartλ‘ λ¬Έμ λ₯Ό λλ²κΉ ν μ μμΌλ €λ©΄ "wkhtmltopdf.exe --javascript-delay 10000 --no-stop-slow-scripts --enable-javascript --debug-javascript" μΈμλ₯Ό μΆκ°νλ κ²μ μμ§ λ§μμμ€.
λλμ΄ λλ¬Έμ μ©μμ
wkhtmltopdf
μ¬μ©QtWebKit
μλ λ¬Έμ κ°Function.prototype.bind
, C3μ μ λ²μ μμ μ¬μ©λλ λ°©λ²μ. phantomjs λ΄λ³΄λ΄κΈ°λ₯Ό μμ±ν λ λΉμ·ν λ¬Έμ λ₯Ό μ§μ Function.prototype.bind = Function.prototype.bind || function (thisp) { var fn = this; return function () { return fn.apply(thisp, arguments); }; };
wkhtmltopdf
μ΅μνμ§ μμ§λ§ λ λλ§λλ νμ΄μ§μ 컨ν μ€νΈ λ΄μμ ν΄λΉ μ½λλ₯Ό μ€νν΄μΌ ν©λλ€.
κ°μ¬ν©λλ€. λ°©κΈ 6μ€ μ΄μμ μ°κ²°νλλ° hight μ°¨νΈμμ μλνκ³ κ±°μ 3~4μκ° λμ λλ²κΉ νμ΅λλ€.
λλμ΄ λλ¬Έμ μ©μμ
wkhtmltopdf
μ¬μ©QtWebKit
μλ λ¬Έμ κ°Function.prototype.bind
, C3μ μ λ²μ μμ μ¬μ©λλ λ°©λ²μ. phantomjs λ΄λ³΄λ΄κΈ°λ₯Ό μμ±ν λ λΉμ·ν λ¬Έμ λ₯Ό μ§μ Function.prototype.bind = Function.prototype.bind || function (thisp) { var fn = this; return function () { return fn.apply(thisp, arguments); }; };
wkhtmltopdf
μ΅μνμ§ μμ§λ§ λ λλ§λλ νμ΄μ§μ 컨ν μ€νΈ λ΄μμ ν΄λΉ μ½λλ₯Ό μ€νν΄μΌ ν©λλ€.
λ΄ ν루λ₯Ό μ μ₯νμ΅λλ€. κ°μ΄ λ©°μΉ κ³ μνμ΄μ :+1:
κ°μ₯ μ μ©ν λκΈ
λλμ΄ λλ¬Έμ μ©μμ
wkhtmltopdf
μ¬μ©QtWebKit
μλ λ¬Έμ κ°Function.prototype.bind
, C3μ μ λ²μ μμ μ¬μ©λλ λ°©λ²μ. phantomjs λ΄λ³΄λ΄κΈ°λ₯Ό μμ±ν λ λΉμ·ν λ¬Έμ λ₯Ό μ§μ wkhtmltopdf
μ΅μνμ§ μμ§λ§ λ λλ§λλ νμ΄μ§μ 컨ν μ€νΈ λ΄μμ ν΄λΉ μ½λλ₯Ό μ€νν΄μΌ ν©λλ€.