Krótka wersja:
- Czy jest jakiś sposób, aby zmusić program MS Word 2007 (lub nowszy) do kodowania względnych hiperłączy do plików (hiperłącze wskazujące np. Inny plik PDF) za pomocą typu akcji
Launch
zamiastURI
(oba typy określone na stronie 653 formatu Adobe Portable Document, PDF Reference, wersja 1.7, szóste wydanie - http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/pdf_reference_1-7.pdf )? Czy może jedynym rozwiązaniem jest wdrożenie postprocesora, który może zmienić wszystkie „niepoprawne”URI
hiperłącza do plików na ichLaunch
odpowiedniki?
Opracowana wersja:
Mam dwa dokumenty Worda; doc1.docx
oraz doc2.docx
(oba skompilowane z MS Word 2007).
W doc1.docx
umieszczam hiperłącze do wersji PDF mojego drugiego dokumentu ( doc2.pdf
) - teraz mam:
Następnie zapisuję doc1.docx
plik jako jedno .docx
i drugie .pdf
- PDF
generowanie jest obsługiwane przez wbudowanego wydawcę plików PDF w MS Word 2007 przy użyciu następujących opcji:
Jak dotąd tak dobrze - mam następującą strukturę folderów:
/superuser
- doc1.docx
- doc1.pdf
- doc2.docx
- doc2.pdf
Następnie otwieram za doc1.pdf
pomocą Adobe Reader X (wersja 10.1.3) i klikam hiperłącze wskazujące na doc2.pdf
. Ponieważ łącze jest względne, zgadłem / założyłem, że Adobe Reader X po prostu otworzy docelowy plik PDF w oddzielnym oknie lub w tym samym wystąpieniu Adobe Reader X (w zależności od opcji Open cross-document links in same window
określonej w:) Edit -> Preferences -> Documents
.
Tak jednak nie jest . Zamiast tego program Adobe Reader X rozwiązuje hiperłącze za pomocą domyślnej przeglądarki (w moim przypadku Google Chrome v21 + na Windows 7 x64) - i dla jasności - to jest problem . Chcę, aby program Adobe Reader X (i większość jego poprzedników) po prostu rozpoznał hiperłącze, otwierając docelowy plik PDF w innym wystąpieniu programu Adobe Reader X (zakładając, że odznaczyłem Open cross-document links in same window
opcję). Powtarzanie tego samego scenariusza przy użyciu mojego (domyślnego) czytnika plików PDF; Sumatra PDF działa zgodnie z oczekiwaniami - Sumatra PDF otwiera docelowy plik PDF w osobnym oknie i pokazuje mi zawartośćdoc2.pdf
. Dlaczego więc nie skorzystać z Sumatry PDF, pytasz? Chciałbym - jednak problem polega na tym, że pracuję nad projektem z potencjalnie dużą liczbą użytkowników końcowych i nie mogę założyć, że wszyscy korzystają z innego czytnika plików PDF niż Adobe Reader X - więc nie ma innej możliwości zastanawianie się, co się dzieje z programem Adobe Reader X.
Aby się tam dostać, zacząłem kopać.
Po pierwsze, patrząc na pasek adresu w Chrome, widać, że Adobe Reader X próbuje rozwiązać doc2.pdf
za pomocą file
schematu URI: file:///C:/superuser/doc2.pdf
- co wydaje mi się uczciwe (wklejenie tego samego URI w Run
oknie dialogowym w Windows 7 powoduje mój domyślny czytnik PDF (Sumatra PDF ), aby otworzyć plik) - ale dlaczego Adobe Reader X prosi domyślną przeglądarkę o obsługę pliku PDF?
Aby odpowiedzieć na to pytanie, kontynuowałem kopanie. Otwarcie doc1.pdf
w notatniku ++ ujawniło, że hiperłącze zostało zakodowane przy użyciu URI
typu akcji (patrz s. 653 i 662 w formacie Adobe Portable Document Format, PDF Reference, wersja 1.7, szósta edycja - http://wwwimages.adobe.com/www.adobe .com / content / dam / Adobe / en / devnet / pdf / pdfs / pdf_reference_1-7.pdf ):
/Type/Action/S/URI/URI(doc2.pdf)
Odwołanie do pliku PDF (p. 662) zawiera następujące informacje na temat URI
typu akcji:
Jednolity identyfikator zasobu (URI) to ciąg znaków, który identyfikuje (rozpoznaje) zasób w Internecie - zazwyczaj plik będący miejscem docelowym łącza hipertekstowego, chociaż może również rozpoznać zapytanie lub inną jednostkę.
Tak więc, co z pierwszej ręki wyglądało na poważny błąd w programie Adobe Reader X, zaczęło wyglądać na uczciwą implementację. Przynajmniej w tym momencie zorientowałem się, dlaczego Adobe Reader X zachowuje się tak, jak to robi - w wyniku czego pojawia się nowe pytanie, na które należy odpowiedzieć: jak poprawnie zakodować hiperłącze pliku (np. Link do doc2.pdf
), tak że wynikowy plik PDF tworzy Adobe Reader X obsłużyć sam link (zamiast prosić domyślną przeglądarkę o wykonanie zadania)?
Aby odpowiedzieć, że jeszcze raz spojrzałem na specyfikację PDF i znalazłem typ akcji Launch
- o tym typie odwołanie do pliku PDF zawiera następujące informacje (s. 659):
Operacja uruchamiania uruchamia aplikację lub otwiera lub drukuje dokument.
Więc wprowadzając następującą zmianę (używając notatnika ++):
Zastępowanie:
/Type/Action/S/URI/URI(doc2.pdf)
Z tym:
/Type/Action/S/Launch/F(doc2.pdf)
... Adobe Reader X następnie rozwiązuje łącze, otwierając doc2.pdf
plik w osobnym oknie / innym wystąpieniu Adobe Reader X - ponownie zakładając, że odznaczyłem Open cross-document links in same window
opcję (hura!).
A teraz do faktycznego / końcowego pytania, którego jeszcze nie udało mi się rozwiązać - czy jest jakiś sposób, aby MS Word 2007 (lub nowszy) kodował względne hiperłącza do plików (hiperłącze wskazujące np. Inny plik PDF) przy użyciu Typ akcji Launch
zamiast URI
(oba typy określone na stronie 653 Adobe Portable Document Format, PDF Reference, wersja 1.7, szósta edycja - http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en /devnet/pdf/pdfs/pdf_reference_1-7.pdf )? Czy może jedynym rozwiązaniem jest implementacja aplikacji postprocesorowej, która może zmienić wszystkie „niepoprawne” URI
hiperłącza plików na ich Launch
odpowiedniki?
Wiem, że może to spowodować wiele „TLDR” - ale jeśli uda ci się tu dotrzeć, naprawdę doceniam twoje zainteresowanie i mam nadzieję, że ty lub ktoś inny może skierować mnie we właściwym kierunku.
Dzięki.
źródło
Odpowiedzi:
Dziękuję za wspaniały artykuł. To działa! Początkowo nie dla mnie, ale potem odkryłem, że musisz wyłączyć „tryb chroniony” w programie adobe X. W ogóle nie mam tego problemu w programie adobe 9. Wydaje mi się, że branża cofa się w kierunku funkcjonalności w nazwa bezpieczeństwa.
W programie Adobe Reader X wykonaj:
/Type/Action/S/URI/URI
za/Type/Action/S/Launch/F(
pomocą odpowiedniego edytora szesnastkowegoNie ma łatwego rozwiązania tego, co chcemy zrobić, a mianowicie umożliwić każdemu użytkownikowi z czytnikiem plików PDF bez ustawień, aby się tym przejmować, poruszać się po folderze.
Ale jeszcze raz dziękuję za całą pracę i światło, które rzuca na ten temat.
źródło
FWIW, nie sądzę, aby linki działały na Sumatrze, jeśli nazwa pliku zawiera spacje (umieszczanie cudzysłowów wokół nazwy nie pomogło, ponieważ Word wydaje się je usuwać podczas tworzenia łącza). Nie wierzę, że można zmienić zachowanie Worda, więc ...
Obejście nr 1: Użyj lepszego kreatora PDF.
Obejście 2: Utwórz pliki PDF przy użyciu programu Word jak zwykle, a następnie użyj edytora szesnastkowego lub narzędzia wiersza polecenia, takiego jak http://stahlforce.com/dev/index.php?tool=rep, aby zastąpić wszystkie wymagane wystąpienia / Type / Action / S / URI / URI ( z / Type / Action / S / Launch / F ( .
źródło
Re. pytanie względnego hiperłącza.
Pomoc MS Office stwierdza, że ustawienie „aktualizuj linki przy zapisywaniu” (przycisk Office / przycisk opcji Word / przycisk zaawansowany / przycisk Web) powoduje, że wstawianie hiperłączy jest względne. Jeśli odznaczone, stają się absolutne. Jednak to ustawienie nie zmieniło moich prób. Tym, co się stało, był punkt, w którym plik został zapisany. Aby utworzyć linki względne, otwieram nowy pusty plik i zapisuję go w odpowiednim folderze przed wstawieniem jakichkolwiek linków. W polu „Wstaw pole hiperłącza” wybierz „istniejący folder”. Folder pokazany w polu to folder właśnie zapisany w drzewie, skierowany w dół - nie w górę. tj. względny
W celu utworzenia linków bezwzględnych otwieram nowy pusty plik i bez zapisywania go wstawiam link. Pole wstawiania pokazuje teraz istniejący folder na najwyższym poziomie. Przejdź do pliku, który chcesz połączyć, a ścieżka pokazana na dole pola to pełna ścieżka z powrotem do C :. . . . . .. (pokazuje literę dysku), tj. bezwzględną.
Najechanie kursorem na łącza w dwóch plikach Word pokazuje w obu przypadkach pełną ścieżkę bezwzględną. Jednak jeśli folder nadrzędny zostanie skopiowany na inny dysk, odnośnik względny otwiera folder na nowym dysku, a link bezwzględny wraca do folderu C: dysk, który chcę zobaczyć. Nie odkryłem jeszcze, jak zrobić oba rodzaje linków w jednym pliku. Ale i tak nie potrzebuję. Udało mi się przekonwertować oba moje pliki MS Word na pdf przy użyciu powyższej modyfikacji edycji szesnastkowej i oba działały, jeden w trybie absolutnym, a drugi względny.
Re. Twoja „metoda subskrypcji edycji heksadecymalnej”
W niektórych przypadkach działało to dobrze. Odkryłem, że muszę się upewnić, że w nazwach docelowych nie ma spacji w tham. Podstawiłem je symbolem podkreślenia. Potem pracowali.
źródło
Zgłębiłem to teraz tak dalece, jak to możliwe. Ponieważ odnosi się bezpośrednio do pierwotnego pytania, przekażę moje ostateczne streszczenie.
Re. łącza bezwzględne i względne w tym samym dokumencie
spójrz na ścieżkę pokazaną na dole pola Wstaw hiperłącze. Jeśli folder najwyższego poziomu jest wybranym folderem, link będzie do niego względny. Aby było to absolutnie konieczne, użyj struktury drzewa w polu „wstaw”, aby wykonać drążenie w górę aż do litery dysku. Domyślnie linki względne są zapisywane po raz pierwszy w folderze „nadrzędnym”.
Kroki tworzenia przenośnego folderu indeksującego
(z dokumentem „indeksowym” prowadzącym do plików w podfolderach).
Utwórz gdzieś nowy folder, który będzie folderem do transportu (folder „The Parent”).
Utwórz lub umieść podfoldery z ich plikami w obiekcie nadrzędnym.
Teraz otwórz dokument Word 2007, który będzie twoim „dokumentem indeksowym”. Przed wstawieniem jakichkolwiek linków zapisz ten plik w swoim „rodzicu”.
Teraz „wstaw hiperłącze”. Pole „wstaw hiperłącze” wyświetli strukturę drzewa folderów / plików w dół od „rodzica”, tj. Krewnego. Aby wykonać bezwzględne łącze, wykonaj wiertło w górę aż do litery dysku.
Zapisz plik Word, który będzie teraz działał jako „dokument indeksu”
Aby przekonwertować „indeks doc” na pdf, otwórz plik słowa i zapisz jako PDF. Ta wersja dokumentu indeksu otworzy pliki docelowe za pośrednictwem przeglądarki, pobierając je lub wyświetlając w przeglądarce jako plik PDF.
Aby dokument „Index.pdf” otworzył łącza w swojej natywnej aplikacji, zmodyfikuj plik za pomocą opisanej wcześniej metody edycji szesnastkowej i zastąp / Type / Action / S / URI / URI (for / Type / Action / S / Launch / F (
3. Ważna uwaga! Przed zmodyfikowaniem pliku .pdf upewnij się, że we wszystkich nazwach folderów i plików nie ma spacji. Zastąp spacje znakiem podkreślenia lub myślnikiem.
źródło