2017-05-19 27 views
7

Mam aplikację sieci web, która aktualnie otrzymuje reprezentację formatu base64 pliku PDF z serwera. Jestem w stanie użyć pliku pdf.js Mozilli do wyświetlenia tego na <canvas> i przełączać strony z rozwijanym menu.Edycja * istniejącego * pliku PDF w przeglądarce

Zgodnie ze wszystkim, co udało mi się znaleźć i Can Mozilla's pdf.js modify PDFs?, nie można edytować pliku PDF za pomocą pliku pdf.js.

Znalazłem jsPDF a ja jestem w stanie podjąć płótno i zrobić .toDataURL() z nią na każdej stronie i zbudować nowy dokument PDF z nim, ale istnieją dwa problemy:

  1. W nowo wygenerowany plik PDF będzie po prostu serią zdjęć na każdej stronie, więc każdy tekst w oryginalnym pliku PDF będzie po prostu obrazem, gdy skończę.
  2. Generuję nowy plik PDF z jsPDF, a następnie wysyłam jego bazę64 do pdf.js, aby wyświetlić go na płótnie. Dzieje się coś między tymi krokami, w których obrazy stron są skalowane niepoprawnie, więc każda strona zajmuje około 3/4 obszaru roboczego po każdej nowej zmianie formatu PDF. Nie udało mi się uzyskać tego samego rozmiaru/skali.

jsPDF nie wygląda na to, że ma sposób na załadowanie istniejącego pliku PDF, ale tworzy tylko nowe. pdfmake i PDFKit również wyglądają tak, jakby tworzyły tylko nowe pliki PDF.


Więc moje pytanie:

Czy jest coś, co pozwoli zarówno przeglądania PDF (z base64) i dokonywania w nim zmian? Idealnie byłoby obejrzeć zmiany na płótnie, a następnie narysować tę zmianę na stronie pdf. Po zakończeniu wyeksportuj go do łańcucha base64, aby wysłać go ponownie do serwera.

+1

Możesz rzucić okiem na [PDFNetJS] (https://blog.pdftron.com/2015/11/10/pdfnetjs-html5-pdf-viewer-and-editor/). – ConnorsFan

+0

Widziałem to. To trochę przesada. Zamiast dołączania jednego lub dwóch plików JS wygląda na to, że musisz dołączyć kilka folderów zasobów i ciężko będzie je uruchomić w moim środowisku (aplikacja Siebel). Niemniej jednak próbuję tego, dopóki nie znajdę lepsze rozwiązanie. – neilsimp1

+0

PDFNetJS próbuje pobrać plik .mem, który jest niektórymi danymi binarnymi. To nie może być obsługiwane przez aplikację, której używam (Siebel), więc nie wygląda na to, że jest to opcja. – neilsimp1

Odpowiedz

7

Szybka odpowiedź - nie, a jest mało prawdopodobne, aby znaleźć rozwiązanie dla wielu przeglądarek. Jest bardzo mało prawdopodobne, aby znaleźć rozwiązanie w formacie PDF. Lepiej pomyśleć o tym, aby użytkownicy edytowali HTML i generowali plik PDF na serwerze.

Dlaczego - format PDF jest jednocześnie genialny i diabelski. Genialne ze względu na jego przenośność, ale diabelskie ze względu na wewnętrzną strukturę i mechanizmy przechowywania. Nie ma przyjaznego "DOM" jak w HTML. Gdybyśmy zaczynali od nowa, aby opracować przenośny format dokumentów, nie byłby to plik PDF, który byśmy wybrali. Ale PDF ma obecnie zbyt dużo rozpędu, by go wyrzucić, kropka.

Młodsi widzowie mogą się zastanawiać, jak do diabła ten maniakalny format znalazł się na wiodącej pozycji na rynku i skąd pochodzi. Cóż, kiedy ojcowie założyciele PDF projektowali, przed XML, JSON, HTML, a nawet w Internecie, nie pracowali z myślą o dzisiejszym dzieleniu się dokumentami. Pracowali nad lepszym sposobem kodowania instrukcji drukowania - koncepcji sterownika drukarki PostScript. Nigdy nie oczekiwano, że zostaną poddane edycji, zanim drukarka je pochłonie i nie będą bezwartościowe w żadnym innym celu. Wtedy ktoś zauważył, że można interpretować instrukcje dotyczące rysowania PostScriptu na ekranie, a następnie ktoś zauważył fantastyczny potencjał, aby zastosować to jako przenośną koncepcję wyświetlania na różnych urządzeniach. I oto jesteśmy.

Powrót do pytania - aby edytować plik PDF w dowolny znaczący sposób GUI, należy rozpakować plik PDF i wyrenderować komponenty (obrazy, sformatowany tekst, strony) do urządzenia wyświetlającego; pozwólmy ludziom na bałagan z układem; następnie przepakuj plik PDF. Musiałbyś to zrobić idealnie zgodnie ze standardami PDF. W przeciwnym razie możesz znaleźć dalszych użytkowników w pliku PDF z edycją lub nie możesz ich wyrenderować.Będziesz musiał uwzględnić różne standardowe poziomy Acrobata, a także skróty i nadmuchy, które paczki edytujące (Word, Illustrator, InDesign) wtłaczają do pliku PDF; warstwy, miniatury itp.

Potem dochodzimy do kolorów. Zapoznaj się ze specyfikacją PDF i zobaczysz, że istnieje szereg opcji przestrzeni kolorów, z których oryginalny producent plików PDF może zdecydować się użyć. Będziesz musiał zinterpretować te kolory do rozsądnego koloru urządzenia na ekranie iz powrotem, itp.

A następnie czcionki. Czcionki mogą być podzbiorem osadzonym lub nie. Aby zachować wierność z plikiem PDF, musisz użyć glifów jako grafiki wektorowej na swojej powierzchni rysunkowej w skali zdefiniowanej w pliku PDF. Oznacza to przede wszystkim wykorzystanie biblioteki typu zależnej od platformy - trudnej między platformami. Plus, że będziesz musiał licencjonować czcionki do odpowiedniego użytku, które mogą być drogie dla czcionek, których większość ludzi chce używać, aby wyglądać modnie i profesjonalnie.

W przypadku funkcji warstwowania, skalowania i obracania w formacie PDF najprawdopodobniej będzie się wyświetlać płótno html jako płaszczyznę rysunku. Każdy, kto wie, powie ci, że w świecie płótna jesteś prawie sam w sobie, by móc wykonywać funkcje edycji tekstu.

Nie niemożliwe, ale trudne.

Komponenty, które renderują PDF na wyświetlacz, w dużej mierze działają jako sterowniki drukarki, niewolniczo przestrzegając instrukcji rysunkowych PDF i zwykle generując grafikę rastrową lub niekiedy grafikę SVG. To ulica jednokierunkowa - czytają i rysują, ale nie ma poczucia "uchwytów" do rysowanych obiektów. Brak uchwytów oznacza brak manipulacji, a ci faceci z pewnością nie mają zamiaru pozwalać ci modyfikować i pisać.

Znajdziesz wiele produktów "zapisz do pdf". Po stronie klienta będą pochylać się, by złapać zbiór pikseli i zrzucić grafikę rastrową do pliku z najcieńszą oklejoną definicją "PDF". Tam, gdzie są one oparte na serwerze, mogą być dość potężne - istnieje wiele narzędzi, takich jak Aspose i ABCPDF, które naprawdę oferują pewną liczbę serwerów spinających PDF - ale nie jest to tym, czego szukasz w swoim OP.

Podsumowanie - bardzo skomplikowany temat. Jeśli cokolwiek wyłoni się jako potencjalny, prawdopodobnie będzie miało wiele ograniczeń związanych z zawartymi w nim funkcjami PDF, a zatem ograniczenia dotyczące tego, co może bezpiecznie edytować.

Jeśli szukasz edycji online dokumentów, które zostały ostatecznie wyeksportowane jako pliki PDF, dobrym rozwiązaniem jest zachowanie wersji HTML źródła dokumentu i umożliwienie edycji przez użytkownika za pomocą TinyMCE, CKEditor itp., A następnie skorzystaj z jednego z nich narzędzi po stronie serwera do zapisania źródłowego kodu HTML i renderowania do formatu PDF. Narzędzia takie jak ABCPDF renderują HTML wiernie, pozwalają dodawać obrazy, nagłówki i stopki, numery stron, itp.

Jest to pragmatyczna odpowiedź na twoją (zakładaną) potrzebę, choć wciąż ma pewne kompromisy pod względem czcionki (licencjonowanie), chwiejność redaktorów przeglądarkowych, wszechstronna dziwaczność HTML określona przez niektóre komponenty edytujące HTML itp. Ale jest to wykonalne.

Ostateczne przemyślenia - ponownie przemyśl zakres tego, czego potrzebujesz. Jeśli edycja HTML i konwersja do formatu PDF na serwerze jest dla Ciebie użyteczna, jest to dobrze wydeptana ścieżka, a znajdziesz zarówno darmowe, jak i komercyjne komponenty dla klienta i serwera, które go obsługują.

Edycja: Jeśli chcesz dodać adnotację do pliku PDF, rzeczy są znacznie łatwiejsze. Na serwerze należy wygenerować obrazy stron dokumentu, wysłać je do klienta, wyświetlić je użytkownikowi, pozwolić użytkownikowi oznaczyć je, przechwycić współrzędne adnotacji z powrotem na serwer i użyć biblioteka PDF po stronie serwera, aby wyświetlać adnotacje w pliku PDF. Jest to możliwe do osiągnięcia, ale wymaga różnych umiejętności w zakresie obsługi formatu PDF po stronie serwera, prezentacji po stronie klienta i przechwytywania adnotacji.

+0

Zasadniczo konieczne jest, aby użytkownicy otworzyli poprzednio przesłane sekcje PDF, podświetlenia lub koła, a następnie zapisali te adnotacje w pliku PDF z powrotem na serwerze. Ze względu na konfigurację aplikacji, nie ma nic po stronie serwera, co mogę zrobić, oprócz wysyłania i odbierania pliku base64.Miałem nadzieję, że wziął on plik PDF i narysował na nim obraz podkreśla. Nie ma potrzeby edytowania tekstu ani manipulacji nim. – neilsimp1

+0

Dziękuję za tak dogłębną odpowiedź. Zobaczę, czy nie możemy zmienić tutaj wymagań. Jeśli wkrótce nie znajdę innej odpowiedzi, zaznaczę twoją odpowiedź jako poprawną. – neilsimp1

+0

Howdy! Jeśli chodzi o uzyskanie współrzędnych pola "adnotacji" narysowanego "nad" plikiem PDF (prawdopodobnie w oddzielnym nakładającym się kanwie), czy macie jakieś sugestie, jak dokładnie określić współrzędne PDF X, Y początku zaznaczonego pola (u góry po lewej) wraz z wysokością/szerokością wspomnianego pudełka? Nie muszę przepisywać ich do pliku PDF, wystarczy, że będę mógł je pobrać i zapisać. Z góry dziękuję! :) –