### 実現したいこと
javascript vexFlowで作成したSVGデータをPDFにできること
発生している問題・分からないこと
PDFとして出力するところまではできたが、上記添付画像のように楽譜の表記が崩れる
該当のソースコード
javascript
1// vexFlowで五線譜作成 2const stave = new Stave(10, 40, 500); 3 4const renderer = new Renderer(div, Renderer.Backends.SVG); 5renderer.resize(600, 200); 6const context = renderer.getContext(); 7 8stave.addClef("treble").addTimeSignature("4/4"); 9 10stave.setContext(context).draw(); 11 12const notes = [ 13 new StaveNote({ keys: ["c/5"], duration: "q" }), 14 new StaveNote({ keys: ["d/4"], duration: "q" }), 15 new StaveNote({ keys: ["b/4"], duration: "qr" }), 16 new StaveNote({ keys: ["c/4", "e/4", "g/4"], duration: "q" }), 17] 18 19const notes2 = [ 20 new StaveNote({ keys: ["c/4"], duration: "w" }) 21] 22 23const voice1 = new Voice({ num_beats: 4, beat_value: 4 }) 24const voice2 = new Voice({ num_beats: 4, beat_value: 4 }) 25 26const voices = [ 27 voice1.addTickables(notes), 28 voice2.addTickables(notes2) 29] 30new Formatter().joinVoices(voices).format(voices, 350) 31 32voices.forEach(function (v) { 33 v.draw(context, stave) 34}); 35 36// ボタンをクリックしたら、PDFとしてダウンロードする 37document.getElementById('pdf').addEventListener('click', async () => { 38 const svgElement = div.querySelector("svg"); 39 svgElement.setAttribute("viewBox", `0 0 ${svgElement.getBBox().width} ${svgElement.getBBox().height}`); 40 svgElement.setAttribute("width", svgElement.width.animVal.valueAsString); 41 svgElement.setAttribute("height", svgElement.height.animVal.valueAsString); 42 const svgData = new XMLSerializer().serializeToString(svgElement); 43 44 const pdfDoc = await PDFDocument.create(); 45 const page = pdfDoc.addPage([1000, 1000]); 46 page.drawSvgPath(svgData, { x: 10, y: 900, color: rgb(0, 0, 0), scale: 1.0, }); 47 const pdfBytes = await pdfDoc.save(); 48 const blob = new Blob([pdfBytes], { type: "application/pdf" }); 49 const url = URL.createObjectURL(blob); 50 const a = document.createElement("a"); 51 a.href = url; 52 a.download = "sheet_music.pdf"; 53 a.click(); 54});
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
X軸やY軸の数字を修正して試してみましたが改善されませんでした。
補足
特になし
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。