Mikołaj S.

Mikołaj S. Konsultant
Aplikacyjno-Biznesow
y, Software
Development Te...

Temat: Otwieranie PDF'a ze strumienia

Witam,
Mam taki problem, jak otworzyć plik PDF, znajdujący się tablicy bajtów lub w strumieniu. Chodzi o to, żeby nie zapisywać go na dysku przed otwarciem.
Chodzi o aplikacje WinForms.
Sytuacja wygląda tak: Napisałem Windows Service, który robi za serwer udostępniający pliki za pomocą .NET Remoting. Klient odpala metodę na serwerze, która zwraca byte[]. I teraz pojawia sie wspomniany problem.
Kombinowałem z System.Windows.Forms.WebBrowser.
Jest tam atrybut DocumentStream. "Zassałem" więc moja tablice do MemoryStream, wskazałem ten strumień no i zadziałało, z tym, że WebBrowser pokazuje krzaki ;) , tak jakby się tego pdf'a odpaliło w notepadzie.
Zaobserwowałem, że gdy zrobi się WebBrowser.Navigate("plik.pdf#toolbar=0"), co powoduje prawidłowe otwarcie pdf za pomoca plugin'u, DocumentStream jest pusty.Wychodzi mi więc, że nie tędy droga.
Macie jakieś pomysły, jak wyświetlać te pdf'y?
Zostaje kupienie biblioteki, która umie pobrać strumień?

Pozdrawiam

konto usunięte

Temat: Otwieranie PDF'a ze strumienia

watpie czy takie cos jest realizowalne bez wlasnych bibliotek do pdf, moze prosciej przekazywac link do pliku znajdujacego sie na serwerze generujacym/trzymajacym te pdfy i przekazywanie ich jako parametr do wywolania aplikacji otwierajacej pdf?
Mikołaj S.

Mikołaj S. Konsultant
Aplikacyjno-Biznesow
y, Software
Development Te...

Temat: Otwieranie PDF'a ze strumienia

Przekazywanie linku odpada. Gdybym tak chciał otwierać/wyświetlać te pdf'y, nie pisałbym tego serwisu, tylko po prostu bezpośrednio wskazał plik na serwerze przez share. Wtedy użytkownik aplikacji klienckiej musiałby mieć ustawione prawa do pliku. A chodzi o to, żeby nie było żadnego share'a. Tylko lokalny serwis na serwerze ma prawa do plików i nie trzeba się bawić w jakieś ustawianie dostępu. Logika aplikacji tym steruje.

konto usunięte

Temat: Otwieranie PDF'a ze strumienia

W ten sposób wyślesz strumień bitów w przeglądarkę, w ContentType defiunujesz jaki to ma być typ pliku:

Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = “Application/pdf”;
Response.AddHeader(”content-length”, reportStream.Length.ToString());
Response.AddHeader(”content-disposition”, “inline; filename=confirmation.pdf”);
Response.BinaryWrite(reportStream);
Response.Flush();
Response.End();

Jeżeli masz włączona kompresję to ją wyłącz (przynajmniej do testów) bo zderzysz się z tym problemem: http://support.microsoft.com/default.aspx?scid=kb;en-u...
ja się zderzyłem :) Jeżeli będziesz chciał utrzymać kompresję to daj znać napisze ci jak wyłączyć kompresję dla pojedynczych plików.

Pozdrawiam
Grzegorz Wilczyński
Mikołaj S.

Mikołaj S. Konsultant
Aplikacyjno-Biznesow
y, Software
Development Te...

Temat: Otwieranie PDF'a ze strumienia

Wiem jak się wysyła strumień z serwera www do przeglądarki. Jak napisałem, nie chodzi o aplikację ASP.NET, lecz o WinForms. Serwis na serwerze to Windows Service, z którym łącze się za pomocą .NET Remoting, a nie Web Service, czy tez strona aspx na IIS.
Mimo wszystko dziękuje za dobre chęci.

Pozdrawiam

konto usunięte

Temat: Otwieranie PDF'a ze strumienia

pobranie strumienia to dopiero polowa sukcesu. z tego co wiem, nie ma opcji wbudowanej w .net, ktora poradzilaby sobie z przeksztalceniem strumienia byte w pdf(w sensie czytelny pdf - tak jak mowisz wyjda krzaki). Uzywalem kiedys biblioteki PDFCreatorPilot v 1.0. Przy jej pomocy udawalo sie zlozyc pdf (biblioteka kreuje tez pdf ze strumienia, dziala wielostronnie). Dosc dawno to bylo, wielu szczegolow podac juz nie potrafie.

info ze strony producenta:
√ Ability to make PDF document as "in-memory" file or as "binary image" to be used on the Web server (requires a Web License);Piotr Jędrkowiak edytował(a) ten post dnia 22.01.08 o godzinie 10:47

konto usunięte

Temat: Otwieranie PDF'a ze strumienia

Mikołaj Szałkowski:
Jak napisałem, nie chodzi o aplikację ASP.NET, lecz o WinForms. Serwis na serwerze to Windows Service, z którym łącze się za pomocą .NET Remoting,

Sorry nie doczytałem :/
W takim razie skorzystaj z FileStream, tam możesz przekazać bitową tablicę, w najgorszym wypadku użytkownik będzie musiał jawnie zapisać plik na dysk przed otwarciem

Pozdrawiam
Dawid Ireno

Dawid Ireno Software Architect

Temat: Otwieranie PDF'a ze strumienia

Mikołaj, ja miałem podobny problem. Sprawdź długość strumienia przed wysłaniem i po odebraniu przez WebBrowser. Jak wiadomo musi być identyczna. Jeśli chodzi o to co myślę, czyli kodowanie znaków, powinna się w tym akurat przypadku zwiększyć po dotarciu do Twojego WebBrowser. Zakładam oczywiście że rzeczywiście oba pliki w notatniku wyglądają na pierwszy rzut oka podobnie.

Jest też druga opcja, moim zdaniem mało prawdopodobna, że gdzieś w tym WebBrowser ustawia się typ MIME zawartości strumienia i on źle został nadany. Ale zachowanie Twojego WebBrowser nie koniecznie na takie okoliczności wskazuje.

Oczywiście nie pytam czy masz za systemie uruchamiającym aplikację WinForms zainstalowane Adobe Acrobat Reader bo to byłoby za proste:)

Tak czy inaczej do sukcesu na pewno dokładnie tędy droga. Daj znać czy moje wskazówki są pomocne, bo ta sprawa to mnie na prawdę zaciekawiła.

Następna dyskusja:

Strona zapisana jako pdf




Wyślij zaproszenie do