3 Punkte von GN⁺ 2023-10-25 | 1 Kommentare | Auf WhatsApp teilen
  • SumatraPDF ist ein Dokumentenreader für Windows, der mehrere Formate unterstützt, darunter PDF, EPUB, MOBI, CBZ, CBR, FB2, CHM, XPS und DjVu
  • Die Lizenz ist (A)GPLv3; Teile des Codes stehen unter der BSD-Lizenz
  • Weitere Informationen gibt es auf der Website, im Manual und in den Developer Information

1 Kommentare

 
GN⁺ 2023-10-25
Meinungen auf Hacker News
  • Da Adobe die Monetarisierung von Acrobat aggressiver vorantreibt, stelle ich einige PDF-Arbeiten auf Open-Source-Tools um. SumatraPDF ist eines der Tools, die ich nutze; qpdf verwende ich zum Entfernen von Passwörtern, Entsperren und Konvertieren, und unter WSL lässt es sich mit apt-get install qpdf installieren.
    Mit qpdf --decrypt --password="" input.pdf output.pdf kann man das Passwort entfernen. PDF4QT ist ein Open-Source-PDF-Editor zum Löschen, Sortieren und Extrahieren von Seiten, hat aber noch kein Chocolatey-Release und muss daher manuell installiert werden.
    Inkscape und LibreOffice Draw eignen sich zum Bearbeiten von PDFs und Hinzufügen von Text; MuPDF als Kommandozeilen-Tool und Python-Paket zum Parsen, Ausfüllen von Formularen und Hinzufügen von Text; SumatraPDF zum Anzeigen; pdfplumber ist zusammen mit Jupyter Lab nützlich, um PDF-Tabellen in Daten-Pipelines zu extrahieren.

    • Auch mit Firefox kann man PDFs anzeigen, signieren und Text hinzufügen. Nach dem Entsperren kann man durch Drucken als PDF auch das Passwort entfernen.
    • PDFTK und pdfjam sind ebenfalls nützliche Kommandozeilen-Tools. PDFTK wird zum Zusammenführen von PDFs, Extrahieren, Löschen und Duplizieren von Seiten sowie zum Dekomprimieren verwendet, um Text und Daten aus rohen PDF-Befehlen herauszuholen und zu bearbeiten; pdfjam nutzt man für N-up-Druck sowie zum Anpassen von Seitengröße und Rändern.
    • Es hieß zwar, qpdf sei nicht in Chocolatey, aber in einem anderen Windows-Paketmanager, Scoop, ist es enthalten: https://github.com/ScoopInstaller/Main/blob/master/bucket/qp...
    • Für die Tabellenextraktion nutze ich seit Jahren http://tabula.technology/. Es kam auch mit ziemlich komplexen Tabellen gut zurecht und machte kaum Probleme.
    • Tatsächlich verwendet SumatraPDF inzwischen MuPDF. Allerdings gibt es bei der PDF- und E-Book-Rendering-Unterstützung einige Einschränkungen, etwa bei der Verarbeitung von PDF-Formularen oder der Anzeige von Unicode-Zeichen in epub.
  • Ein hervorragender Rückblick des Autors von SumatraPDF: https://blog.kowalczyk.info/article/2f72237a4230410a888acbfc...

    • Die vier Aussagen im Rückblick – „man kann komplexen und relativ fehlerfreien Code auch ohne Tests schreiben“, „es geht auch ohne Code-Reviews“, „wenn niemand die App nutzt, ist es egal, ob sie crasht“, „wenn sie viel genutzt wird, melden die Leute Crashes, und dann behebt man sie“ – widersprechen sich gegenseitig.
      Gemeint ist wohl nicht, dass Tests oder Code-Reviews unnötig seien, sondern eher, dass man die Tests den Nutzern überlassen kann.
      Der Autor testet seinen Code vermutlich auch. Schließlich ist schon das Starten der App eine Form von Test. Wahrscheinlich aber nicht in einer so strengen oder systematischen Weise, dass man von der Sicherheit sprechen könnte, die Regressionstests geben.
      Kaum jemand behauptet ernsthaft, es sei unmöglich, komplexen Code ohne automatisierte Tests zu schreiben. Ich bin ein starker Befürworter automatisierter Tests, habe aber Ende der 90er und Anfang der 2000er einmal einen recht großen Cross-Platform-Renderer ganz ohne automatisierte Tests gebaut; das dauerte lange, und mit jeder Änderung wurde es immer beängstigender.
    • Frühere HN-Diskussionen zum 15-Jahre-Rückblick von SumatraPDF: https://news.ycombinator.com/item?id=27968900 – Juli 2021, 133 Kommentare
      Diskussion zum erneuten Post desselben Artikels 2023: https://news.ycombinator.com/item?id=35065785 – März 2023, 173 Kommentare
    • An der Stelle „Gtk ist hässlich, Qt ist extrem aufgebläht, WxWidgets funktioniert kaum“ wirkt es so, als habe sich der Autor seit den 90ern keine Cross-Platform-Toolkits mehr angesehen.
    • Es war ein interessanter Artikel, und besonders überraschend fand ich die Erwähnung am Ende, Bearbeitungsfunktionen hinzuzufügen. Das klingt wie ein schwarzes Loch, in das Feature-Requests und Bloat endlos hineingezogen werden.
  • Ich wünschte, alle Entwickler von PDF-Readern würden sioyeks Overview-Funktion[0] implementieren. Wenn man mit der Maus über einen Querverweis fährt, wird der referenzierte Inhalt in einem kleinen Vorschaufenster geöffnet.
    Beim Lesen von Lehrbüchern und technischen Papers ist das ein echter Gamechanger; man kann gar nicht genug betonen, wie nützlich das ist.
    [0] https://github.com/ahrm/sioyek#overview

    • Aus Sicht des SumatraPDF-Entwicklers: Ich kenne sioyek und überlege, einige Ideen daraus zu übernehmen. Vielleicht kommt das in die nächste Version.
    • Wikipedia verhält sich ähnlich, das dürfte dir vermutlich bekannt sein. Mich würde interessieren, was hier missverstanden wird.
      Außerdem wäre es doch ein erhebliches Risiko, wenn ein PDF-Reader wegen dieser Funktion beliebigen Remote-Code ausführen würde.
    • Ist das nicht Ted Nelsons Transklusion (transclusion)? Also „dass derselbe Inhalt auf wahrnehmbare Weise an mehr als einem Ort existiert“.
      https://en.m.wikipedia.org/wiki/Transclusion
    • Wirklich großartig. Einige dieser Ideen würde ich gern in meine App Kavita übernehmen.
  • Habe es gerade zum ersten Mal installiert, und die Performance übertrifft nicht nur Adobe Reader, sondern sogar Foxit deutlich. Adobe Reader zu schlagen ist keine große Sache, aber Foxit zu schlagen ist ziemlich beeindruckend.
    Die Installationsgröße beträgt auch nur etwa 10 % dieser Programme. Ich frage mich, was Adobe eigentlich treibt, dass deren Software so unerträglich langsam und mühsam zu benutzen ist.

    • Adobe kümmert sich vermutlich um 100%ige Unterstützung der PDF-Spezifikation und um obskure Feature-Wünsche, die sechs Firmen in einer sehr kleinen Branche unbedingt brauchen.
      Sumatra ist großartig und unter Windows praktisch der einzige PDF-Reader, den ich nutze, hat aber vielleicht nur rund 10 % der Funktionen von Adobe Acrobat. Allerdings sind diese 10 % genau die Funktionen, die fast alle brauchen.
    • Noch beeindruckender ist wohl, dass es ein Projekt eines Einzelentwicklers ist. SumatraPDF ist eines der Paradebeispiele für ein großartiges Softwareprojekt und etwas, woran man sich orientieren kann.
    • Was Adobe macht? Vielleicht arbeiten sie all die Feature-Wunschlisten ab, die jemals eingereicht wurden. Auch die Kommentare hier lauten alle in etwa: „Sumatra ist gut, aber dieses und jenes Feature fehlt.“
    • Seit ich mir die Finger verbrannt habe, als Foxit anfing, Spyware mit auszuliefern, zögere ich, etwas anderes auszuprobieren.
    • https://old.reddit.com/r/geek/comments/ddh5p/comment/c0zfics...
  • Segen über alle, die sich die PDF-Spezifikation angesehen und gedacht haben: „Schön, dafür würde ich gern einen Parser schreiben.“

    • Aus Sicht des Entwicklers von SumatraPDF: Fairerweise muss man sagen, dass ich das PDF-Rendering selbst nicht direkt geschrieben habe. Das ist wirklich keine Kleinigkeit.
      Früher habe ich poppler verwendet und bin dann auf MuPDF umgestiegen. Damals war MuPDF aktiver, und später scheint auch poppler an Tempo gewonnen zu haben.
      Der Kernbestand an PDF-Funktionen ist an sich gar nicht so schlecht zu implementieren. Nach dem, was ich gesehen habe, sind die schlimmen und komplexen Teile die später hinzugefügten XML-artigen Dinge, JavaScript in Formularen, komplexe Vektorgrafikfunktionen wie Vektormaskierung, Unterstützung mehrerer Farbräume und CMYK-Separationen, Font-Handling und Text-Rendering.
      Schwierig ist auch, fehlerhaft erstellte PDFs schnell rendern zu müssen. PDFs lassen sich beim Erstellen leicht kaputtmachen, und Leute machen sie auf jede nur vorstellbare Weise kaputt. Wenn Adobe oder Chrome sie öffnen können, kann man nicht einfach sagen „ungültiges PDF“, daher haben die MuPDF-Entwickler viele Heuristiken hinzugefügt, damit auch beschädigte PDF-Dokumente angezeigt werden.
    • Selbst nachdem man den Parser selbst gebaut hat, ist es interessant herauszufinden, was tatsächlich wo angezeigt werden soll. Besonders bei generierten Dokumenten, mehr noch als bei von Hand erstellten: Um die Position von Elementen zu bestimmen, muss man Matrizen multiplizieren, und um den Textinhalt zu ermitteln, muss man noch einen Parser für extrem maßgeschneiderte Codepoint-Tabellen schreiben.
    • Kein Witz: Gestern habe ich erfahren, dass PDFs Formulare mit JavaScript enthalten können.
      https://tcpdf.org/examples/example_014/
      Ich habe keine Ahnung, wie das überhaupt funktionieren soll.
    • Aus eigener Erfahrung: Die PDF-Spezifikation ist in vielerlei Hinsicht deutlich vernünftiger und besser entworfen als viele „APIs“, die moderne JavaScript-Entwickler bauen.
      Die ursprüngliche Spezifikation ist etwas hässlich, weil sie im Format Bytes sparen wollte und dafür etwa einbuchstabige Dictionary-Keys verwendet, aber es gibt auch wirklich gut durchdachte Teile. Appearance Streams sind hervorragend für Vorwärts- und Rückwärtskompatibilität und wahrscheinlich einer der Hauptgründe, warum nichts PDF ersetzt hat.
    • Einen Parser für PDF-Dateien zu schreiben, die sich an die Spezifikation halten, ist vielleicht gar nicht so schwer. Einen vollständigen Renderer samt Interface zu schreiben ist natürlich definitiv schwierig.
      Da sich viele PDF-Dateien aber nicht an die Spezifikation halten, muss man fehlerhafte PDFs genauso tolerant akzeptieren wie Adobes Parser.
  • Gestern ist ein großes Update für SumatraPDF erschienen [1]. Die Backlog-Liste [2] enthält viele Bugfixes und Verbesserungen.
    [1] https://github.com/sumatrapdfreader/sumatrapdf/releases/tag/...
    [2] https://github.com/sumatrapdfreader/sumatrapdf/issues/3672

    • Über die erweiterten Optionen nutze ich es so als Dark Mode, indem ich eine warme Seitenfarbe und einen dunklen Hintergrund einstelle.
      MainWindowBackground = #191919
      FixedPageUI [
      TextColor = #282828
      BackgroundColor = #ebdbb2
      SelectionColor = #2d938f
      ...
      Bisher habe ich mit AutoHotkey SumatraPDF-settings.txt überschrieben, um zwischen verschiedenen Modi zu wechseln. Ich würde das kleine Skript gern teilen, aber vor Kurzem ist es plötzlich kaputtgegangen.
    • Dark Mode und das Wechseln von Tabs per Tastatur sind großartige Ergänzungen zum besten schlanken PDF-Reader.
    • Ich frage mich, ob die Druckprobleme behoben wurden. Wegen ihnen musste ich immer einen anderen PDF-Viewer verwenden.
  • Wie andere schon gesagt haben, ist Sumatra eines der wenigen reinen Windows-Utilities, die man ständig vermisst, wenn man einen Mac oder Linux nutzt. Besonders beim Ansehen von Schaltplänen, mechanischen und technischen Zeichnungen sowie Datenblättern gibt es zwei einfache Bedienaktionen, die ich täglich vermisse:
    Alt + Scrollen zum Vergrößern/Verkleinern, Rechtsklick + Ziehen zum Verschieben. Ich frage mich, ob es unter Mac oder Linux einen Viewer gibt, der diese beiden Funktionen bietet. Skim auf dem Mac unterstützt Option + Scrollen und Linksklick + Ziehen zum Verschieben, lässt sich aber nicht auf andere Tasten oder Maustasten umstellen.

    • Unter Linux unterstützt Zathura das. Der Unterschied ist, dass Zoomen nicht mit Alt, sondern mit Ctrl funktioniert. Rechtsklick-Ziehen dient zum Verschieben.
      Eine Funktion, die ich wirklich mag: Page Down springt an den oberen Rand der nächsten Seite. Das ist sehr praktisch, wenn man mit einem Zoomfaktor, der nicht exakt zur Seitengröße passt, schnell etwas überfliegen möchte.
    • Ich mag Okular wirklich sehr. Besonders das Theme, mit dem man PDFs auf dunkelrotem Hintergrund mit gelbem Text lesen kann. Auf einem Apple-Silicon-Mac-Mini habe ich es allerdings nicht zum Laufen bekommen. Die aktuelle brew formula für Mac scheint kaputt zu sein.
    • Foxit zoomt mit Ctrl+Scrollen und verschiebt mit Linksklick+Ziehen. Es läuft auf dem Mac, und Linux geht vermutlich auch.
      Das ist vermutlich ähnlich genug. Wenn man es wirklich erzwingen will, gibt es wahrscheinlich Shareware-Apps, die pro Anwendung Tastatur-Emulation und Input-Remapping on the fly erledigen.
      https://www.keyboardmaestro.com/main/ kenne ich als Standardlösung dafür.
    • Ich nutze qpdfview und bin sehr zufrieden damit. Es ist sehr weitgehend anpassbar.
    • Ich vermute, man könnte diese Eingaben mit Karabiner Elements und BetterTouchTool neu mappen, aber nur wenn Skim im Vordergrund ist.
  • Was an SumatraPDF sehr praktisch ist: Wenn eine normale Bilddatei geändert wird, wird sie automatisch neu geladen. Dadurch ist es einfach, grafische Ausgaben in einem Fenster anzuzeigen, indem man sie als Bilddatei speichert.

    • Das gilt nicht nur für Bilder, sondern auch für ganze PDFs. Ich erzeuge beruflich PDFs, und es ist großartig, wenn ich den Aktualisierungsbefehl ausführe und direkt nach Abschluss sofort die Änderungen sehe.
    • Ebenfalls sehr praktisch ist, dass man ein PDF von der Kommandozeile an einen ausgewählten Drucker senden kann. Zumindest unter Windows ist das ein Killer-Feature.
  • Ich mag SumatraPDF wirklich sehr. Ich nutze es seit Jahren, und es ist großartig. Wenn ich LaTeX in vim verwende und das Dokument daneben in Sumatra geöffnet habe, wird es beim Kompilieren sofort aktualisiert.
    Dadurch, dass die Seite sofort neu geladen wird, ist der Workflow sehr reibungslos.

    • Genau. Auch lervag sollte man Respekt zollen. Sein vimtex-Plugin ist ein Monster.
      Vermutlich nutzt du genau das. Es integriert sich standardmäßig mit Sumatra und auch mit MuPDF, Skim und anderen. Das ist daran so schön.
    • Evince unterstützt diese Funktion ebenfalls. Für mich persönlich ist sie absolut unverzichtbar.
      Bevor ich zu Linux gewechselt bin, habe ich Sumatra kurz ausprobiert; es war ziemlich gut und flott.
    • Atril lädt ebenfalls automatisch neu.
  • Während meiner Promotion habe ich Sumatra PDF als Hauptwerkzeug genutzt, um beim Schreiben von Manuskripten und Papers PDF-Änderungen in Echtzeit zu sehen. Die kostenpflichtige Version von Acrobat und die kostenlose Version von Foxit haben zwar mehr Funktionen, sperren aber Dateien, die gerade geändert werden.

    • Ein gutes Beispiel dafür, wie man ein Produkt beschädigen kann, wenn man bei der Implementierung unnötiger Einschränkungen nicht richtig berücksichtigt, wie diese Einschränkungen Nutzer behindern. Ich hoffe, dass Software, die unter Android Ähnliches macht, etwa SafetyNet oder Screenshot-Schutz, genauso bedeutungslos wird wie Acrobat Reader.