Pdf.js: Feature: Doppelseitenansicht

Erstellt am 2. Okt. 2011  ·  29Kommentare  ·  Quelle: mozilla/pdf.js

Funktionsanforderung: Fügen Sie Schaltflächen für die zweiseitige Ansicht hinzu
Außerdem wäre es schön, eine Schaltfläche für 100% und "Seitenanpassung" in der Symbolleiste zu haben.

1-ux 1-viewer 2-feature

Hilfreichster Kommentar

Sie können es mit dem Preview-Build unter http://54.67.70.0 : 8877 / 5e5412c2765c9bd / web / viewer.html testen.

Erstaunlich, danke. Um es zu testen, muss man "Grid Scrolling" auswählen und den Zoom auf 100% verringern. Ergebnisse:

  1. Einstellungen: Beim Öffnen einer neuen PDF-Datei werden die Einstellungen für das Scrollen im Raster und das Anzeigen der Seitenleiste gespeichert. Die Zoomstufe wird jedoch nicht gespeichert (beim Öffnen einer neuen PDF-Datei wird standardmäßig automatisch gezoomt, dies gilt jedoch auch für Standard-PDFs.)
  2. Leistung: Getestet mit einigen PDFs mit viel Text und großen Bildern. Scheint die gleiche Leistung wie Standard-PDFs zu haben, jedoch ist Standard-PDFs in vielen Fällen langsamer als z. B. Foxit-PDF-Reader, da nicht genügend Seiten "vorgelesen" werden. Dies bedeutet, dass das Laderad beim schnellen Scrollen kurz sichtbar ist. Außerdem werden bereits gelesene Seiten im RAM nicht "gespeichert". Wenn Sie wieder nach oben scrollen, wird das Laderad wieder angezeigt. Aber wie gesagt, dies scheint ein Problem des allgemeinen Standards pdf.js zu sein.
  3. Kompatibilität: Getestete Nicht-A4-Größen, ein PDF mit unterschiedlichen Seitengrößen. Bei einem nicht standardmäßigen PDF fehlte ein Header-Bild, dies geschah jedoch auch mit dem Standard-PDF.
  4. Technisch: Wie bei meinem Standard-FF funktioniert alles (Subpixel-Schriftwiedergabe, Hardwarebeschleunigung ...). Funktioniert auch: PDF / A & PDFs mit Javascript-Aktionen. Nicht funktionierend sind PDFs mit Texteingabeelementen, aber auch dies funktioniert nicht mit den Standard-pdf.js ("das PDF enthält Formeldaten. Die Bearbeitung von Forumulars wird nicht unterstützt").
  5. Stress: 50 PDFs und einige Folter-PDFs mit Tausenden von Seiten getestet.

Vielleicht würde ich es anders benennen (zB "Multiple Page View", aber ich bin kein Muttersprachler. Ich habe einfach nicht direkt erkannt, was diese Einstellung bewirkt).

Fazit: Die Grid-Scrolling-Version funktioniert genau wie die Standard-Nicht-Grid-pdf.js. Es gibt einige Probleme mit pdf.js im Allgemeinen, die verbessert werden könnten, aber nichts im Zusammenhang mit der Raster-Scrolling-PR. Die Grid-Scrolling-Version ist absolut großartig. Es wäre einfach fantastisch, wenn sich die "Kopfzeile" automatisch ausblenden würde. Im PDF-Viewer von Chrome wird diese Leiste nur einige Sekunden lang angezeigt, wenn sich die Maus bewegt oder der Bildschirm berührt wird. Abgesehen davon denke ich bereits darüber nach, wie ich diese Grid-Scrolling-Version als meinen Standard-PDF-Reader verwenden kann, bis sie in FF Stable verfügbar ist;)

Alle 29 Kommentare

Über die 100% und Seitenanpassung ist dies etwas, was Adobe Reader tut, und ich stimme zu, dass es schön wäre, es in PDF.js zu haben.

Auch bei der zweiseitigen Ansicht stimme ich dem zu.

+1

Haben Sie in den letzten ~ 4 Jahren überhaupt daran gearbeitet?

Da diesbezüglich noch einige Verwirrung herrscht, möchte ich dies etwas näher erläutern. Es gab eine Work-in-Progress-Pull-Anfrage dafür, aber das Hauptproblem war, dass es sich um eine Menge Code handelte, da der Viewer zu diesem Zeitpunkt nicht sehr modular war und wir keine Integrationstests dafür hatten. Wir haben noch keine Integrationstests für den Viewer, daher müssen alle Tests manuell durchgeführt werden. Es scheint vielleicht nicht so, aber dies ist tatsächlich eine schwer zu unterstützende Funktion. Was passiert, wenn die Seiten zu breit sind? Was passiert mit Seiten unterschiedlicher Größe?

Dieses Problem ist aus einem bestimmten Grund offen. Wir halten es immer noch für eine nützliche Funktion, aber jemand muss Zeit finden, um daran zu arbeiten. Wenn jemand bereit ist, daran zu arbeiten, müssen wir zuerst eine Form von automatisierten Tests für den Betrachter durchführen, da sonst das Risiko von Einführungsregressionen groß ist.

+1

Bitte verwenden Sie den + 1-Reaktionsknopf von GitHub, anstatt hier +1 Kommentare hinzuzufügen. Mit der + 1-Reaktionsschaltfläche können wir nach Problemen mit vielen +1 filtern und Probleme besser priorisieren.

in Ordnung. Ich habe den Reaktionsknopf anstelle des Kommentars verwendet. Vielen Dank

Ich würde das mögen, damit ich die Art und Weise unterstützen kann, wie ich tatsächlich über Bücher denke. Vor dem Hypertext gab es ein bisschen Geländer bei Büchern, weil sie "linear" waren. Einige Leute befürworteten sogar, Kopien eines Buches zu bekommen, damit man sie auseinander schneiden und ein riesiges Poster des gesamten Buches aufkleben konnte. Es war ein frühes Projekt namens "Digital Shakespeare", bei dem alle seine Stücke in einem Postskriptum codiert waren, damit man über seine Arbeit "fliegen" konnte. Dies ist ein wenig zu formlos für mich, daher besteht meine Konvention darin, an Sätze von zehn Seiten zu denken, die in 5 Doppelseiten gruppiert sind, die wie die Flecken auf den fünf Seiten eines Würfels angeordnet sind, z. B.:

[0 | 1] [2 | 3]
`` [4 | 5]
[6 | 7] [8 | 9]

Jetzt gibt es ein hohes Niveau, um diese zu nehmen und sie in Hunderte zu setzen.

Der Punkt ist, dass ich vielleicht die Möglichkeit habe, dies und mehr mit pdf.js zu tun, aber ich brauche zuerst zwei Seiten.

👍

@ Timvandermeij Danke für dein Update. Ich hoffe auch sehr, dass eine Beta davon funktioniert!

Was muss ich tun, damit Sie diese Funktion hinzufügen? WAS?

Der nächste Schritt besteht darin, automatisierte Integrationstests hinzuzufügen: # 6505

Es ist "ein guter Anfängerfehler, da dies nicht viel Wissen über die Codebasis von PDF.j erfordert, um daran zu arbeiten. Vielleicht haben Mitwirkende aus anderen JS-Projekten Erfahrung mit Integrationstests, um uns dabei zu helfen. Der erste Schritt besteht darin, auszuwählen und hinzuzufügen das Framework für Integrationstests. "

Gibt es einen Grund, warum diese Funktion in pdf.js selbst implementiert werden sollte? Die Implementierung in einer auf pdf.js basierenden Reader-App ist trivial und birgt kein Risiko, den Renderer durcheinander zu bringen. Lassen Sie pdf.js einzelne Seiten so behandeln, wie es gewohnt ist, verwenden Sie zwei (oder bei Bedarf mehr) Canvas-Elemente in der gewünschten Geometrie und starten Sie.

Das Schreiben einer vereinfachten Demo dauerte nicht länger als ein paar Minuten, basierend auf dem vorherigen / nächsten Beispiel von pdf.js:

https://jsfiddle.net/Yetangitu/1egqfefu/4/

Navigieren Sie mit den Schaltflächen oder durch Klicken auf die linke / rechte Seite ...

@tfer hier ist dein 'Ludicrous Mode' Viewer: https://jsfiddle.net/Yetangitu/ht04sp3b/

(Skalierungsfaktor erhöhen, Anzeige auf großem Monitor, Gewinn!)

Soweit ich sehen kann, müssen pds.js kein mehrseitiges Rendern unterstützen, dies kann auf einer höheren Ebene angemessen gehandhabt werden.

@yurydelendik Inwiefern ist diese Lösung verwirrend? Ich verwende es, um einen PDF-Viewer für Nextcloud / Owncloud zu erstellen. Es funktioniert einwandfrei.

image

image

image

Inwiefern ist diese Lösung verwirrend?

Es passt nicht in unseren Demo-Viewer.

https://jsfiddle.net/Yetangitu/1egqfefu/4/

@Yetangitu Das Schreiben eines benutzerdefinierten Viewers mit Doppelseitenanzeige basierend auf unseren Beispielen ist für mich vollkommen in Ordnung, aber es ist keine PR, die wir akzeptieren können. Sollen wir dieses Problem schließen, indem wir darauf verweisen, dass Ihre oben vorgeschlagene Lösung dieses Problem behoben hat? Wenn nicht, erklären / zeigen Sie bitte, wie Ihr Code auf den Demo-Viewer angewendet werden kann.

Bitte schließen Sie dieses Problem nicht! Unzählige andere Probleme wurden mit einer Lösung geöffnet und geschlossen, die das zentrale Problem nicht behebt: PDFjs benötigt dringend eine integrierte Methode für die 2-Seiten-Ansicht. Viele PDF-Dateien wie Zeitschriftenartikel, Handbücher usw. sehen in einer 1-Seiten-Ansicht gut aus. Aber ALLE BÜCHER sind seit Gutenberg so konzipiert, dass sie als LR-Layouts angesehen werden können. Ich verwende @Snuffleupagus 'PR # 3723 auf einer Produktionsstätte, und obwohl es

@yurydelendik es war nicht als vollständige Lösung gedacht, nur als Hinweis für diejenigen, die seit vielen Jahren nach einem verbreitungsfähigen JS PDF-Viewer suchen. Es könnte in den Demo-Viewer integriert werden, aber das würde ein bisschen Arbeit kosten. Da der Viewer, den ich baue, wie der EPUB-Viewer, den ich zuvor erstellt habe, aussehen und handeln soll (dh horizontal, so buchartig wie möglich usw.), unterscheidet er sich erheblich vom Demo-Viewer, ist es also nicht eine einfache Sache des Pattens der spreizfähigen Bits in.

Ich denke, dass diese Art von Funktionalität in eine Viewer-Anwendung gehört, nicht in die grundlegende PDF-Dekodierungs- / Rendering-Bibliothek, die pdf.js ist, daher meine Reaktion auf dieses pdf.js-Problem.

Ich werde die PDF-fähige Version von Reader in ein paar Tagen für diejenigen veröffentlichen, die das Konzept ausprobieren möchten. Da Reader eine Nextcloud / Owncloud-App ist, müssen Sie irgendwo eine davon zur Hand haben ...

@yurydelendik was ist der Link zu deinem EPUB-Viewer. Es wäre großartig, wenn es eine einfache JS-Bibliothek gäbe, die standardmäßig enthalten sein könnte, um es den Leuten zu erleichtern, EPUB so anzuzeigen, wie sie derzeit PDFs anzeigen. Vielleicht ist dies ein neues Problem (oder ein neues Projekt).

Es ist 2018 und das ist seit 7 Jahren im Umlauf. Whoa! Irgendwelche Updates / Timelines dazu noch?

Die Pull-Anfrage über Ihrem Kommentar implementiert dies. Jeder kann uns gerne beim Testen helfen, um sicherzustellen, dass nichts kaputt geht.

Zu Ihrer Information, die Reader-App für Nextcloud & Owncloud unterstützt jetzt PDF, einschließlich des von mir erwähnten 2-Seiten-Modus (Spread-Modus). Es kann auf Github gefunden werden:

https://github.com/Yetangitu/owncloud-apps/tree/master/files_reader

und im Nextcloud App Repository:

https://apps.nextcloud.com/apps/files_reader

Es wird bald auch im Owncloud-Repo erscheinen.

image

Die Pull-Anfrage über Ihrem Kommentar implementiert dies. Jeder kann uns gerne beim Testen helfen, um sicherzustellen, dass nichts kaputt geht.

Eifrig zu testen, was brauchst du? Gibt es einen binären Blob oder eine kompilierte SW, die wir testen können? Warum testen Sie es nicht über den nächtlichen Beta-Master-Zyklus?

Zu Ihrer Information, die Reader-App für Nextcloud & Owncloud unterstützt jetzt PDF

Cool, jetzt müssen wir nur noch herausfinden, wie dies als eigenständiger Viewer ausgeführt wird. Sumatra kann auch 2 Seiten anzeigen, hat jedoch kein Subpixel-Rendering. FF hat Subpixel-Rendering, aber keine 2-Seiten-Standardansicht. Derzeit gibt es unter Windows keinen verwendbaren Open Source PDF-Viewer: /

Sie können es mit dem Preview-Build unter http://54.67.70.0 : 8877 / 5e5412c2765c9bd / web / viewer.html testen. Weitere Informationen finden Sie unter # 9208.

Sie können es mit dem Preview-Build unter http://54.67.70.0 : 8877 / 5e5412c2765c9bd / web / viewer.html testen.

Erstaunlich, danke. Um es zu testen, muss man "Grid Scrolling" auswählen und den Zoom auf 100% verringern. Ergebnisse:

  1. Einstellungen: Beim Öffnen einer neuen PDF-Datei werden die Einstellungen für das Scrollen im Raster und das Anzeigen der Seitenleiste gespeichert. Die Zoomstufe wird jedoch nicht gespeichert (beim Öffnen einer neuen PDF-Datei wird standardmäßig automatisch gezoomt, dies gilt jedoch auch für Standard-PDFs.)
  2. Leistung: Getestet mit einigen PDFs mit viel Text und großen Bildern. Scheint die gleiche Leistung wie Standard-PDFs zu haben, jedoch ist Standard-PDFs in vielen Fällen langsamer als z. B. Foxit-PDF-Reader, da nicht genügend Seiten "vorgelesen" werden. Dies bedeutet, dass das Laderad beim schnellen Scrollen kurz sichtbar ist. Außerdem werden bereits gelesene Seiten im RAM nicht "gespeichert". Wenn Sie wieder nach oben scrollen, wird das Laderad wieder angezeigt. Aber wie gesagt, dies scheint ein Problem des allgemeinen Standards pdf.js zu sein.
  3. Kompatibilität: Getestete Nicht-A4-Größen, ein PDF mit unterschiedlichen Seitengrößen. Bei einem nicht standardmäßigen PDF fehlte ein Header-Bild, dies geschah jedoch auch mit dem Standard-PDF.
  4. Technisch: Wie bei meinem Standard-FF funktioniert alles (Subpixel-Schriftwiedergabe, Hardwarebeschleunigung ...). Funktioniert auch: PDF / A & PDFs mit Javascript-Aktionen. Nicht funktionierend sind PDFs mit Texteingabeelementen, aber auch dies funktioniert nicht mit den Standard-pdf.js ("das PDF enthält Formeldaten. Die Bearbeitung von Forumulars wird nicht unterstützt").
  5. Stress: 50 PDFs und einige Folter-PDFs mit Tausenden von Seiten getestet.

Vielleicht würde ich es anders benennen (zB "Multiple Page View", aber ich bin kein Muttersprachler. Ich habe einfach nicht direkt erkannt, was diese Einstellung bewirkt).

Fazit: Die Grid-Scrolling-Version funktioniert genau wie die Standard-Nicht-Grid-pdf.js. Es gibt einige Probleme mit pdf.js im Allgemeinen, die verbessert werden könnten, aber nichts im Zusammenhang mit der Raster-Scrolling-PR. Die Grid-Scrolling-Version ist absolut großartig. Es wäre einfach fantastisch, wenn sich die "Kopfzeile" automatisch ausblenden würde. Im PDF-Viewer von Chrome wird diese Leiste nur einige Sekunden lang angezeigt, wenn sich die Maus bewegt oder der Bildschirm berührt wird. Abgesehen davon denke ich bereits darüber nach, wie ich diese Grid-Scrolling-Version als meinen Standard-PDF-Reader verwenden kann, bis sie in FF Stable verfügbar ist;)

Für diejenigen, die nach einem schnellen, sauberen Hack suchen, fügen Sie einfach etwas CSS-Magie hinzu (viewer.html):

<style>
#viewer {
  margin-left:20px;
}
div.page {
  float:left;
}
</style>

Stellen Sie den Zoom auf ca. 75% ein (= zweiseitige Ansicht auf meinem 1440x900-Bildschirm)

Gibt es einen Grund, warum diese Funktion in pdf.js selbst implementiert werden sollte? Die Implementierung in einer auf pdf.js basierenden Reader-App ist trivial und birgt kein Risiko, den Renderer durcheinander zu bringen.

Ja, ich stimme zu, ich muss nicht im pdf.js-Code sein ...

Für diejenigen, die nach einem schnellen, sauberen Hack suchen, fügen Sie einfach etwas CSS-Magie hinzu (viewer.html) ...

Danke für die Arbeit.

Könnte jemand eine Erweiterung schreiben, die @icedmans Workaroud injiziert? Damit man die 1p / 2p-Ansicht mit einem Klick umschalten kann? Ich habe eine Erweiterung "Kill Sticky", die die Seite lokal einfügt / modifiziert, so dass dies machbar sein sollte.

Vielen Dank

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

patelsumit5192 picture patelsumit5192  ·  3Kommentare

sujit-baniya picture sujit-baniya  ·  3Kommentare

azetutu picture azetutu  ·  4Kommentare

PeterNerlich picture PeterNerlich  ·  3Kommentare

SehyunPark picture SehyunPark  ·  3Kommentare