MS Word 2007+ - czy może zakodować hiperłącza przy użyciu typu akcji PDF „Uruchom” zamiast „URI” podczas publikowania pliku „.docx” w pliku PDF?

9

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 Launchzamiast URI(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” URIhiperłącza do plików na ich Launchodpowiedniki?

Opracowana wersja:

Mam dwa dokumenty Worda; doc1.docxoraz doc2.docx(oba skompilowane z MS Word 2007).

W doc1.docxumieszczam hiperłącze do wersji PDF mojego drugiego dokumentu ( doc2.pdf) - teraz mam:

Właściwości hiperłącza <code> doc2.pdf </code> w <code> doc1.docx </code>

Następnie zapisuję doc1.docxplik jako jedno .docxi drugie .pdf- PDFgenerowanie jest obsługiwane przez wbudowanego wydawcę plików PDF w MS Word 2007 przy użyciu następujących opcji:

MS Word 2007 PDF Publikuj właściwości

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.pdfpomocą 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 windowokreś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 windowopcję). 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.pdfza pomocą fileschematu URI: file:///C:/superuser/doc2.pdf- co wydaje mi się uczciwe (wklejenie tego samego URI w Runoknie 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.pdfw notatniku ++ ujawniło, że hiperłącze zostało zakodowane przy użyciu URItypu 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 URItypu 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.pdfplik w osobnym oknie / innym wystąpieniu Adobe Reader X - ponownie zakładając, że odznaczyłem Open cross-document links in same windowopcję (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 Launchzamiast 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” URIhiperłącza plików na ich Launchodpowiedniki?

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.

Lasse Christiansen
źródło
2
Nie jestem pewien, czy komentarze „uderzają” pytanie, ale warto je przeczytać.
Tanner Faulkner,
1
Dziękuję za twoje pytanie. Sam w sobie zawiera wiele szczegółów i jedno możliwe rozwiązanie. Czy udało ci się znaleźć lepszy sposób na zrobienie tego? Zastąpienie akcji działa dobrze.
Farish
1
@Farish Niestety nie. Do tej pory korzystanie z postprocesora było dla mnie rozwiązaniem. Jeśli kiedyś znajdę lepszy sposób, opublikuję aktualizację tutaj :)
Lasse Christiansen

Odpowiedzi:

2

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:

  1. Upewnij się, że otwarte dokumenty krzyżowe .. nie są zaznaczone. (jak powiedziałeś)
  2. Wyłącz tryb chroniony: Edytuj »Preferencje» Ogólne
  3. Wyszukaj i zamień /Type/Action/S/URI/URIza /Type/Action/S/Launch/F(pomocą odpowiedniego edytora szesnastkowego

Nie 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.

Bob Brown
źródło
Cieszę się, że działa przy użyciu „postprocesora”. Ponieważ zamieściłem pytanie, nadal nie znalazłem lepszego rozwiązania, więc będę również korzystać z etapu przetwarzania końcowego, dopóki nie będzie lepszego rozwiązania. Dziękuję za wkład :)
Lasse Christiansen
0

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 ( .

Karan
źródło
0

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.

Bob Brown
źródło
0

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).

  1. Utwórz gdzieś nowy folder, który będzie folderem do transportu (folder „The Parent”).

  2. Utwórz lub umieść podfoldery z ich plikami w obiekcie nadrzędnym.

  3. Teraz otwórz dokument Word 2007, który będzie twoim „dokumentem indeksowym”. Przed wstawieniem jakichkolwiek linków zapisz ten plik w swoim „rodzicu”.

  4. 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.

  5. Zapisz plik Word, który będzie teraz działał jako „dokument indeksu”

  6. 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.

  7. 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 (

  8. 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.

Bob Brown
źródło