Pdf-Datei Größe zu groß erstellt mit jspdf

Ich bin mit jspdf für die Erstellung von PDF innerhalb des Browsers. Ich habe mehrere Diagramme mit svg als Grafik-Daten. Für das hinzufügen von Daten zu pdf ich bin die Konvertierung von svg zu png mit Leinwand und dann Base64-Daten mit canvas.toDataURL Methode. Nach all diesen Umbauten die Größe der Datei, die erstellt wird, indem jspdf ist riesig (etwa 50 MB).
Unten ist der code für die div-chart-Daten und Leinwand.

newdiv = document.createElement("div");
newdiv.className = "big_Con_graph big_Con_graph0";
newdiv.style.height = "0px";
newdiv.id = "big_Con_graph" + id;

unten ist die Abmessungen für die SVG-Grafik zu laden.

document.getElementById("big_Con_graph" + id).style.display = "block";
var big_chartReference = FusionCharts("big_myChartId"+id);
if(big_chartReference != null){
    big_chartReference.dispose();
}
var big_width = "1088";
var big_height = "604";

nun unten ist der code für die Konvertierung der obigen Grafik SVG-Daten und das hinzufügen von PDF.

var elem_graph = $($('.big_Con_graph,big_Con_graph0')[count]).clone(true);
svgString = $(elem_graph).find("span").html();
var img = document.createElement('img');
var DOMURL = self.URL || self.webkitURL || self;
var svg = new Blob([svgString], {type: "image/svg+xml;charset=utf-8"});
var url = DOMURL.createObjectURL(svg);
img.onload = pdfAfterImageLoad(img,pdf,imgLoadSequence,DOMURL,totalReports,reportName);
img.src = url;

dies ist der code für PDFAfterImageLoad Funktion:

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var png = canvas.toDataURL("image/png");
pdf.addImage(png, 'PNG', leftmargin, 120, 485, 270);

Ich bin mit png, also imagequality parameter kann nicht verwendet werden.

Kann mir jemand helfen, verringern Sie die Größe der Datei?

  • Tun Sie umwandeln in base64-weil jspdf erfordert, dass?
  • habe ich nicht dem Bild gespeichert, auf mein Ende, indem Sie die Taste i m erste svg-Daten und deren Konvertierung in png durch die Leinwand,so dass der gesamte Prozess erfordert base64-Daten.auch ich kann nicht speichern Sie alle graph-Daten an den client-Speicher.
  • Ich sehe. Und warum verwenden Sie png statt jpeg? Verwendung von jpeg mit Qualität modifier geholfen hätte (siehe developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/...)
  • ja, aber jpeg gibt schlechte Qualität, genauso wie bei der Qualität parameter auch.auch ich möchte die zoom-in und zoom-out mit pdf ist nicht möglich, mit dem jpeg-Format.
  • Was sind die Dimensionen dieses Bild? Können Sie uns zeigen, was das Bild enthält/funktioniert es gelten für jedes Bild, das Sie hinzufügen? Können Sie zeigen Sie uns den code, den Sie verwenden, um es jspdf? (und die onload-callback verwendet wird, in die falsche Richtung, sollte eine Funktions-Referenz; jetzt ist es ein Anruf mit dem Ergebnis, dass für onload).
  • Vielen Dank für das update. Es immer noch ein bisschen unklar, was die pdfAfterImageLoad tut. Und wie ich oben erwähnte, ist es falsch verwendet. Es ist nun aufgerufen und das Ergebnis (das kann keiner) ist festgelegt, wie die handler-Funktion onload. Auch, wenn das Bild nicht geladen in der Zeit der Methode drawImage wird scheitern unten. Die Zeichenoperationen müssen drin sein (oder aufgerufen) wird der onload-handler-Funktion.
  • habe ich angehängt, die den code für pdfafter Bild laden, da es einfach das Bild auf pdf.nichts anderes
  • Ich Schätze, Sie haben image/jpeg und test möglich und geeignete Qualitäts-parameter!

InformationsquelleAutor Asha Koshti | 2016-06-07
Schreibe einen Kommentar