2016-05-08 17 views
0

Ich bin auf der Suche nach dem besten Ansatz für die Generierung von Bildern von Text auf der Serverseite (vorzugsweise Node.js). Es muss Dinge wie Paging berücksichtigen (also mehrere Bilder von Text für eine Texteingabe erzeugen, wenn es zu lang ist, um auf eine Seite zu passen). Ich bin auf der Suche nach etwas, das ziemlich genau ist und eine gute Art der Konfiguration ermöglicht.NodeJS Text Layout und Bilderzeugung

Ich habe ein paar Optionen sah:

  1. Verwenden Leinwand. Dieser Ansatz würde für die meisten Anwendungsfälle funktionieren. Ich könnte eine Text-Engine wie textjs für das Layout verwenden. Dies ist jedoch etwas einschränkend, da Canvas keine speziellen Textmetriken hat (z. B. für die genaue Positionierung verwendete Texthöhe). Dies könnte das Paging erschweren.

  2. Verwenden Sie normale HTML mit etwas wie PhantomJS zu generieren und sie ein Bild des Textes erfassen. Während dieser Ansatz für einige Anwendungsfälle funktioniert, ist es schwierig, Dinge wie Paging zu handhaben.

  3. Verwenden Sie eine andere Text-Engine. Ich habe mich umgesehen und einige Optionen gefunden - aber es müsste etwas sein, das ich von Nodejs aus aufrufen könnte (wie ich es wahrscheinlich bei AWS Lambda verwenden werde).

Was würden Sie empfehlen?

Antwort

1

Ich habe kürzlich etwas sehr ähnliches gemacht - auch mit node.js auf Lambda. Meiner Meinung nach ist der beste Ansatz PhantomJS zu verwenden und vielleicht den Umweg zu nehmen, ein PDF zu erstellen.

Mit HTML und CSS können Sie die Ausgabe bequem wie gewünscht formatieren, was einen großen Vorteil gegenüber der komplizierteren Canvas-Methode darstellt. Sie müssen nur darauf achten, dass Sie irgendwo horizontalen Platz hinzufügen, wo Sie den Seitenumbruch erwarten (natürlich hängt dies von Ihrem Anwendungsfall ab und ist möglicherweise nicht notwendig). Nachdem die gerenderte HTML-Seite, die Sie jetzt haben zwei Möglichkeiten:

  • Sie einen PDF erzeugen könnten - die Pflege der Erzeugung von mehreren Seiten übernehmen wird - und dann rastert, dass auf Bilder
  • Oder Sie direkt ein Bild mit Screen Capture erzeugen (example Code) und dann das Bild horizontal teilen

Beide Ansätze funktionierten gut für mich.