2013-07-02 39 views
9

Używam Acrobat XI Próbowałem wyjście A plik tekstowy jak tenJak napisać plik tekstowy w formacie JavaScript

var cMyC = "abc"; 
var doc = this.createDataObject({cName: "test.txt", cValue: cMyC}); 
this.exportDataObject({cName: "test.txt", nLaunch:0}); 

To działa, ale chciałbym, aby zapewniono stałą ścieżkę i nie okno jest wyskakujące, aby poprosić użytkownika o wybór ścieżki zapisu

Czy istnieje sposób na rozwiązanie problemu? dzięki

Odpowiedz

6

Wszystkie funkcje JavaScript programu Acrobat, które zapisują plik na dysku lokalnym użytkownika, stanowią zagrożenie bezpieczeństwa, więc istnieją pewne ograniczenia dotyczące ich użycia. Te funkcje obejmują doc.saveAs() i wszystkie funkcje eksportowania danych, takie jak doc.exportAsFDF().

Jak można przeczytać here:

Acrobat oferuje nam dwa tryby pracy dla tych funkcji - ze ścieżką bez ścieżki. Jeśli żaden parametr ścieżki nie zostanie przekazany do funkcji , program Acrobat wyświetli okno dialogowe przeglądarki plików. Okno przeglądarki pliku daje użytkownikom kontrolę nad sposobem, w jaki dane są zapisywane w ich systemach na . Jeśli do funkcji jest zapewniona ścieżka, wówczas nie jest wyświetlane żadne okno dialogowe i operacja jest obsługiwana w trybie cichym, tj. Użytkownik jest niekoniecznie świadomy, że dane zostały zapisane na swoim dysku twardym. Jest to problem związany z zabezpieczeniami, więc aby użyć jednej z tych funkcji w trybie cichym, , funkcja musi być wykonywana z uprzywilejowanego kontekstu. Ten numer oznacza, że ​​kod musi znajdować się w zaufanej lokalizacji. Na przykład kod wykonany z okna konsoli, proces wsadowy lub certyfikowany plik PDF jest uprzywilejowany. Gdy dowolna z tych funkcji jest używana z parametrem ścieżki i wykonywana w kontekście nieuprzywilejowanym, program Acrobat wyśle ​​wyjątek w postaci . Uzasadnienie tego ograniczenia polega na tym, że jeśli nie można zaufać kodem , użytkownik musi konkretnie wybrać lokalizację pliku .

Kolejnym ograniczeniem zapisywania danych w systemie użytkownika jest to, że specyfikacja ścieżki musi być Bezpieczną ścieżką. Bezpieczna ścieżka to taka, która nie wskazuje miejsca o ograniczonym dostępie na dysku twardym użytkownika ani dysku , który mógłby stanowić zagrożenie bezpieczeństwa. Przykładami ograniczonych lokalizacji są foldery systemowe i foldery główne dowolnego dysku twardego. Inne foldery, które mogą być ograniczone, zależą od działającego systemu i wrażliwości programistów Acrobata. Żaden z nich nie jest dobrze udokumentowany, dlatego najlepiej używać tych funkcji ostrożnie.

O „Bezpieczne Ścieżki”, API Acrobat JS doc.saveASmethod documentation stany:

Acrobat 6.0 wprowadzono pojęcie bezpiecznej drogi dla JavaScript metod zapisu danych na dysku lokalnym oparciu o ścieżka przeszła do niej przez jeden z jej parametrów. Ścieżka nie może wskazywać na krytyczny folder systemu, na przykład katalog główny, okna lub systemowy. Ścieżka jest również przedmiotem innych nieokreślonych testów. W przypadku wielu metod nazwa pliku musi być zgodna z typem danych, które mają być zapisywane w postaci .Niektóre metody mogą mieć ograniczenie polegające na braku nadpisywania. Te dodatkowe ograniczenia podano w dokumentacji. Ogólnie, gdy ścieżka zostanie uznana za nie bezpieczną, zgłoszony zostanie wyjątek NotAllowedError (patrz Obiekt błędu), a metoda nie powiedzie się.

Na pewno nie można tego zrobić za pomocą metody exportDataObject, ponieważ nie ma parametru path, jak można również czytać here:

Parametr „CNAME” jest wymagany wkład i określa konkretny załącznik pliku , który zostanie wyeksportowany. Zauważ, że nie ma parametru ścieżki . W rzeczywistości jest to wejście "cPath" do tej funkcji, ale numer nie jest już ważny. Jeśli spróbujesz użyć ścieżki w tej funkcji, spowoduje to niepowodzenie i wygeneruje wyjątek. Nie ma znaczenia, z jakiego kontekstu wywoływana jest funkcja , ponieważ parametr "cPath" został całkowicie usunięty z użycia.

Kolejne referencje:

+0

Dzięki za dostarczanie informacji! Próbowałem używać Doc.exportAsText, ale po prostu nie działa. Precyzując: 1) Jak utworzyć obiekt tekstowy, jak zapisać go w pliku tekstowym? dzięki – user782104

+0

Already próbowałem utworzyć raport, utworzyć obiekt danych, ale żaden z nich nie może być zapisany w pliku tekstowym ..... – user782104

4

Oto sposób na wyjście do pliku tekstowego za pomocą stałej ścieżki doc.exportAsText:

// set up output text 
var TEMP_FIELD_NAME = "testHeader" 
var textValue = "test"; 
// add a temporary text field 
var f = this.addField(TEMP_FIELD_NAME, "text", 0, [30,30,100,20]); 
f.value = textValue; 
// export field name and value to defined file 
this.exportAsText({aFields: TEMP_FIELD_NAME, cPath: "test-text.txt"}); 
// remove text field 
this.removeField(TEMP_FIELD_NAME); 

Plik wynikowy tekst będzie mieć dwie linie:

testHeader

Test

2

niemożliwe. Ze względów bezpieczeństwa automatyczne zapisywanie pliku jest niedozwolone.

Jak stwierdzono w SDK:

Beginning with Acrobat 6.0, if the parameter cDIPath is non-null, a NotAllowedError exception is thrown and the method fails. 
If cDIPath is not passed to this method, a file selection dialog box opens to allow the user to select a save path for the embedded data object.