2016-02-05 5 views
5

Ich versuche, Druckfunktionalität zu einer mehrseitigen PDF-Datei, die in eine Webseite eingebettet ist, die die PDF.js-Bibliothek verwendet, hinzuzufügen. Das ist problematisch, weil ich immer nur eine Seite gerendert habe, wenn ein Benutzer sie anzeigt und die Seite wirklich als Bild in einem Canvas-Element gerendert wird.PDF.js Wie drucken Sie eine mehrseitige PDF?

This question hilft in diesem Fall nicht, da es für eine einzelne Seite PDF ist, wo das Drucken des aktuellen Inhalts der Arbeitsfläche akzeptabel ist. Gleiches mit this question. Ich möchte auch vermeiden, nur das PDF in einem anderen Tab/Fenster zu öffnen und dem Benutzer zu sagen, es selbst zu drucken, was den Zweck des Einbettens in die Seite vereitelt.

Wenn ich durch die Dokumentation von Mozilla schaue, habe ich keine nativen Funktionen gefunden, die nur das PDF drucken, aber ich werde anfangen, mit der renderingIntent herumzuspielen, die so aussieht, als könnte sie 'drucken'.

EDIT: redingIntent scheint nichts zu beeinflussen und die PDF-Standbilder rendert auf die gleiche Weise, ob es auf "Anzeige" oder "Drucken" eingestellt ist.

Antwort

1

Remember PDF.js ist nur eine andere Webseite. ATM, zumindest nicht in den Standard-HTML5-APIs, gibt es keine Möglichkeit für eine Webseite, zufällige Informationen direkt an Drucker zu senden (aber Sie können es zum Cloud-Druckdienst schieben) - Sie können nur drucken, was Sie "sehen". "Sehen" bedeutet, was sich im DOM befindet, und derzeit kann CSS verwendet werden, um Informationen für den Bildschirm oder Drucker auszublenden. Das DOM kann auch die Vorabdruck-/Nachdruck-Ereignisse ändern.

In Ihrem Fall, da Sie Ihre PDF-Ansicht in eingebettet ist, müssen Sie zu fälschen DOM alle PDF-Dateien auf der Haupt-Seite, Seiten/Leinwände haben, so dass sie für den Druck sichtbar machen und verstecken für Bildschirm (siehe zum Beispiel [4]). Es müssen auch einige andere Probleme gelöst werden, die hier off-topic sein könnten: das Entfernen von Rändern und das Nicht-Rastern von Canvas. Firefox beschäftigt sich mit denen über moznomarginboxes [1] und mozPrintCallback [2] - beide werden zur Unterstützung von PDF.js erstellt und nicht von anderen Browsern unterstützt. (Siehe POLYfill auch für letztere [3])