it-swarm.com.de

* Bearbeiten * vorhanden * PDF in einem Browser

Ich habe eine Webanwendung, die derzeit eine base64-Darstellung eines PDF vom Server erhält. Ich kann Mozillas pdf.js verwenden, um dies auf einem <canvas> anzuzeigen und mit einem Dropdown durch die Seiten zu wechseln.

Nach allem, was ich gefunden habe und Kann Mozilla pdf.js PDFs ändern? , es ist nicht möglich, die PDF mit pdf.js zu bearbeiten.

Ich habe jsPDF gefunden, und während ich in der Lage bin, die Leinwand zu nehmen und eine .toDataURL() für jede Seite zu machen und ein neues PDF - Dokument damit zu erstellen, gibt es jedoch zwei Probleme:

  1. Das neu erzeugte PDF besteht nur aus einer Reihe von Bildern auf jeder Seite. Daher wird jeder Text im Original PDF nur noch ein Bild sein, wenn ich damit fertig bin.
  2. Ich generiere mit jsPDF ein neues PDF und schicke die base64 davon zurück an pdf.js, um sie auf der Leinwand anzuzeigen. Zwischen diesen Schritten passiert etwas, bei dem die Bilder der Seiten falsch skaliert werden, sodass jede Seite nach jeder Änderung von PDF etwa 3/4 der Leinwand beansprucht. Ich konnte nicht die gleiche Größe/Skala beibehalten.

jsPDF sieht nicht so aus, als hätte es eine Möglichkeit, eine vorhandene PDF-Datei zu laden, sondern erstellt nur neue. pdfmake und PDFKit scheinen auch nur neue PDF -Dateien zu erstellen.


Also meine Frage:

Gibt es irgendetwas, das sowohl das Anzeigen einer PDF-Datei (von base64) als auch das Vornehmen von Änderungen zulässt? Idealerweise würde ich nach Änderungen auf der Leinwand suchen und diese Änderungen dann auf die PDF-Seite zeichnen. Wenn dies abgeschlossen ist, exportieren Sie das in eine base64-Zeichenfolge, um sie an den Server zu senden.

10
neilsimp1

Schnelle Antwort - nein, und es ist sehr unwahrscheinlich, dass Sie eine browserübergreifende Lösung finden. Es ist sehr unwahrscheinlich, dass Sie eine PDF-perfekte Lösung finden. Besser überlegen, ob die Benutzer HTML bearbeiten und das PDF auf dem Server generieren sollen.

Warum - das Format PDF ist gleichzeitig brillant und teuflisch. Brilliant wegen seiner Portabilität, aber teuflisch wegen der internen Struktur und Speichermechanismen. Es gibt kein freundliches "DOM" wie bei HTML. Wenn wir neu anfangen würden, ein portables Dokumentformat zu entwickeln, würden wir uns nicht für PDF entscheiden. Aber PDF hat momentan zu viel Schwung, um weggeworfen zu werden, Punkt.

Jüngere Zuschauer fragen sich vielleicht, wie zum Teufel dieses manische Format zu seiner marktführenden Position kam und woher es kam. Nun, als die Gründerväter von PDF das Design vor XML, JSON, HTML und sogar dem Internet festlegten, arbeiteten sie nicht mit dem heutigen Dokumentenaustausch. Sie arbeiteten an einer besseren Methode zum Codieren von Druckanweisungen - dem PostScript-Druckertreiberkonzept. Es wurde nie erwartet, dass diese bearbeitet wurden, bevor der Drucker sie verbrauchte, und sie waren für andere Zwecke wertlos. Dann bemerkte jemand, dass Sie die PostScript-Zeichenanweisungen auf einem Bildschirm interpretieren konnten, und anschließend entdeckte jemand das fantastische Potenzial, dies als transportables, geräteübergreifendes Anzeigekonzept einzusetzen. Und hier sind wir.

Zurück zur Frage: Um ein PDF auf eine sinnvolle Weise zu bearbeiten, müssen Sie das PDF entpacken und die Komponenten (Bilder, formatierter Text, Seiten) auf dem Anzeigegerät rendern. Lassen Sie dann die Leute mit dem Layout herumspielen. Packen Sie dann das PDF erneut. Sie müssten dies gemäß den PDF - Standards perfekt ausführen, da Sie sonst möglicherweise die nachgeschalteten Konsumenten Ihres bearbeiteten PDF - Dateiabsturzes finden oder nicht in der Lage sind, ihn zu rendern. Sie müssten die verschiedenen Acrobat-Standardebenen und die Verknüpfungen und Aufblähungen berücksichtigen, die die Anbieter des Bearbeitungspakets (Word, Illustrator, InDesign) in die Datei PDF einfügen. Ebenen, Thumbnails usw.

Dann kommen wir zu Farben. Wenn Sie die Spezifikation PDF lesen, werden Sie feststellen, dass es eine Reihe von Farbraumoptionen gibt, für die sich der ursprüngliche PDF Hersteller entscheiden kann. Sie müssten diese in eine angemessene Gerätefarbe auf dem Bildschirm und auf der Rückseite usw. interpretieren.

Und dann Schriften. Schriften können eingebettete Teilmengen sein oder nicht. Um die Wiedergabetreue mit PDF zu wahren, müssen Sie die Glyphen als Vektorgrafiken auf Ihrer Zeichenfläche in dem im PDF definierten Maßstab realisieren. Dies bedeutet meistens die Verwendung einer Art plattformabhängiger Typbibliothek - knifflige plattformübergreifende. Hinzu kommt die Tatsache, dass Sie die Schriftarten für eine angemessene Verwendung lizenzieren müssen, was für die Schriftarten, die die meisten Leute verwenden möchten, um hip und professionell auszusehen, teuer sein kann.

Angesichts der Layering-, Skalierungs- und Rotationsfunktionen in PDF würden Sie wahrscheinlich eine HTML-Zeichenfläche als Zeichenfläche betrachten. Jeder, der es weiß, wird Ihnen sagen, dass Sie in der Welt der Leinwand für Textverarbeitungsfunktionen so ziemlich allein sind.

Nicht unmöglich, aber schwer.

Komponenten, die PDF in einer Anzeige rendern, fungieren weitgehend als Druckertreiber, halten sich sklavisch an die PDF - Zeichenanweisungen und generieren normalerweise ein Raster oder manchmal eine SVG-Grafik. Dies ist eine Einbahnstraße - sie lesen und zeichnen, aber es gibt keinen Sinn für "Anfasser" an den gezeichneten Objekten. Keine Griffe bedeuten keine Manipulation, und diese Jungs haben mit Sicherheit wenig vor, Sie modifizieren und zurückschreiben zu lassen.

Sie werden viele "Save to PDF" -Produkte finden. Auf der Client-Seite tendieren sie dazu, eine Reihe von Pixeln zu erfassen und eine Raster-Grafik in eine Datei mit dem dünnsten Furnier der 'PDF'-Definition zu kopieren. Wenn sie serverbasiert sind, können sie sehr leistungsfähig sein - es gibt viele Tools wie Aspose und ABCPDF, die wirklich PDF Wrangling Server-Side bieten - aber das ist nicht das, wonach Sie in Ihrem OP suchen.

Zusammenfassung - sehr kompliziertes Thema. Wenn sich jemals etwas als potenziell herausstellt, bestehen wahrscheinlich viele Einschränkungen in Bezug auf die PDF - Funktionen, die abgedeckt werden, und somit Einschränkungen in Bezug auf die sichere Bearbeitung.

Wenn Sie nach einer Online-Bearbeitung von Dokumenten suchen, die letztendlich als PDF exportiert werden, können Sie eine HTML-Version der Dokumentquelle behalten und den Benutzer diese mit TinyMCE, CKEditor usw. bearbeiten lassen. Verwenden Sie dann einen der Server. Nebenwerkzeuge, um den gespeicherten Quell-HTML-Code zu übernehmen und als PDF zu rendern. Tools wie ABCPDF rendern HTML originalgetreu, sodass Sie Bilder, Kopf- und Fußzeilen, Seitenzahlen usw. hinzufügen können.

Dies ist eine pragmatische Antwort auf Ihr (angenommenes) Bedürfnis, obwohl es immer noch einige Kompromisse in Bezug auf die Schriftarten (Lizenzierungs-) Probleme, die Unbeholfenheit von browserbasierten Editoren und die allumfassende Verrücktheit des durch einige HTML-Bearbeitungen festgelegten HTML-Codes gibt Komponenten usw. Aber es ist IS lebensfähig.

Letzte Gedanken - überdenken Sie den Umfang dessen, was Sie brauchen. Wenn Sie HTML bearbeiten und auf dem Server in PDF konvertieren können, ist dies ein ausgetretener Weg und Sie finden sowohl kostenlose als auch kommerzielle Komponenten für Client und Server, die dies unterstützen.

Bearbeiten: Wenn Sie die PDF mit Anmerkungen versehen müssen, sind die Dinge viel einfacher. Auf dem Server müssen Sie Bilder der Seiten des Dokuments generieren, diese an den Client senden, sie dem Benutzer anzeigen, sie vom Benutzer markieren lassen, die Koordinaten der Anmerkungen auf dem Server erfassen und a verwenden serverseitige Bibliothek PDF zum Rendern der Anmerkungen in die PDF-Datei. Dies ist möglich, erfordert jedoch verschiedene Fähigkeiten für die serverseitige PDF Bildbearbeitung sowie die clientseitige Präsentation und Erfassung von Anmerkungen.

Bearbeiten: Leser könnten daran interessiert sein, zu erfahren, ob sich das oben gemalte Bild geändert hat. Ab Januar 2019 stehe ich zu dem, was ich geschrieben habe. Lieferanten kommen mit besseren Tools und Bibliotheken auf den Markt, die mehr können als bisher. Sie müssen jedoch noch Ihre Bedürfnisse abschätzen und deren Einschränkungen bestätigen - es wird wahrscheinlich welche geben. Mir ist noch kein Anbieter bekannt, der eine clientseitige, browserübergreifende, geräteübergreifende PDF - Bearbeitungsbibliothek für beliebige PDF - Dateien besitzt - es gibt immer welche Verjährung. Aber ich bin froh, korrigiert zu werden.

20

Für zukünftige Referenz: 

Ich habe zwei Bibliotheken gefunden, mit denen Sie vorhandene PDFs im Browser bis zu einem gewissen Grad bearbeiten können. Der zweite ist noch nicht dokumentiert, daher weiß ich nicht genau, was er tut. Es könnte die Lösung für ein solches Problem in der Zukunft sein.

4
allinonemovie

Da hier andere SO - Fragen gestellt werden und in Anbetracht dessen, wie schnell die Web-Technologie voranschreitet (z. B. WASM), gebe ich die folgende Antwort. PDFNetJS konnte dies alles tun, als die Frage ursprünglich gestellt wurde.

Da das Erfordernis von "Bearbeiten" klargestellt wurde "Grundsätzlich ist es erforderlich, dass Benutzer zuvor hochgeladene PDF-, Hervorhebungs- oder Kreisabschnitte öffnen und diese Anmerkungen anschließend in PDF auf dem Server speichern . "und" Es muss keine Textbearbeitung oder Manipulation des Dokumentenkontingents erfolgen. ", dann ist dies in jedem modernen Browser auf jedem modernen Gerät möglich.

PDFTron PDFNet SDK kann all dies tun. Eine vollwertige, sofort einsatzbereite Dokumentenanzeige wird mit vollständiger Anmerkungsunterstützung bereitgestellt. Es ist auch möglich, das PDF tatsächlich zu bearbeiten (Text ändern/ersetzen, ändern, Bilder extrahieren/hinzufügen/ersetzen usw.). PDF -Dateien werden nicht nur direkt vom Client unterstützt, sondern auch DOCX, PPTX, XLSX, PNG und JPG. Dateien können lokal oder remote geladen werden. Eine langsame Base64-Codierung Decodierung ist nicht erforderlich.

Demo:/- http://www.pdftron.com/webviewer

Beispiele: http://www.pdftron.com/documentation/web/samples/universal-samples

Die ursprüngliche Frage bezog sich auch auf die Unterstützung von Siebel und "PDFNetJS versucht, eine .mem-Datei abzurufen, bei der es sich um einige binäre Daten handelt. Dies kann nicht von der von mir verwendeten Anwendung (Siebel) geliefert werden ist eine Option. ".

Die .mem-Datei ist für PNaCl, das nur Chrome ist, und dies kann deaktiviert werden. PDFTron for Web unterstützt WASM und sogar Emscripten, von denen einer, wenn nicht beide, dann mit Siebel kompatibel sein sollten.

3
Ryan
0
waspinator