2013-02-21 14 views
7

Czy istnieje sposób uzyskania rzeczywistej wysokości treści PDF załadowanej w ramce iframe?Jak uzyskać wysokość załadowania dokumentu PDF w iframe?

Mam problem z przewijaniem treści PDF w urządzeniu iPAD? Mogę uzyskać wysokość zawartości treści, aby przewinąć pomyślnie, ale tylko dla stron HTML.

this.contentWindow.document.body.scrollHeight 

ale dla pliku PDF nie zwraca dokładnej wysokości dokumentu PDF? Czy jest jakiś sposób, aby to uzyskać?

Dzięki

Peter

+0

* dokładna wysokość dokumentu PDF * poszczególne strony PDF mogą mieć różne wymiary. To nie ma nic wspólnego z wysokością dokumentu. – mkl

Odpowiedz

0

Czy view=fit pdf pracę opcji przeglądarka, co staramy się osiągnąć (Set auto height for iframe):

<iframe src="Path/MyPDF.pdf#view=fit"></iframe> 

Również w tym ustawieniu wysokości na auto przed próbą rozwiązania uzyskać wysokość (https://stackoverflow.com/a/11864824/1803682):

objIframe = document.getElementById('theIframeId');  
objIframe.style.height = 'auto'; 

document.body.scrollHeight 

Wreszcie - na blogu można przeczytać: http://dev.magnolia-cms.com/blog/2012/05/strategies-for-the-iframe-on-the-ipad-problem/ i iScroll4.

+0

Flaga 'viewFit' służy do tego, w jaki sposób wtyczka powinna powiększać plik PDF, w tym przypadku mówimy, aby dopasować strony do szerokości lub wysokości widoku. Nawet w linku zaakceptowana odpowiedź pokazuje element iframe z paskiem przewijania! Jak to jest akceptowane? Css wysokości 'auto' nie będzie działać, ponieważ wtyczka nie komunikuje, jak duża zawartość jest do przeglądarki (więc będzie" automatycznie "do * domyślnie * tak). Jeśli uda ci się go uruchomić, edytuj [to skrzypce] (http://jsfiddle.net/QmLv5/2/). Zasadniczo, tylko okno powinno przewijać (nie pdf), jeśli chcesz wyodrębnić wysokość w ten sposób – Hashbrown

+0

@Hashbrown Wydaje się głupie, aby myśleć, że jedynym rozwiązaniem jest coś w stylu iScroll4, biorąc pod uwagę wszechobecne pliki pdf. – Matthew

-1

Można to rozwiązać za pomocą JQuery.

Pozwala nam zakładać, że masz iframe następująco z identyfikatorem

<iframe src="name.pdf" id="pdf_frame"></iframe> 

teraz za pomocą jQuery możemy uczynić wysokość iframe jako auto, ile trzeba, aby wyświetlić pdf wewnątrz iframe.

$('#pdf_frame').css('height','auto'); 

można uzyskać wysokość jak

document.body.scrollHeight 
+4

Nie wiem, jak to działało dla Ciebie i dla tych, którzy Cię awansowali. Nie pracują dla mnie i nie widzę powodu, dla którego ten kod zadziała. –

2

Odpowiedź jest nr (niestety).

Ponieważ na poziomie elementu, PDF object/embed s auto nie rosną do podjęcia większej wysokości, jeżeli dokument pokazany potrzebuje, więc ich prawdziwą wysokość nie jest narażona na DOM.

Nawet jeśli zadzwonisz PDF bezpośrednio, określając go jako źródło w iframe zobaczysz, że iframe ma układ DOM jak każdy inny stronie z object lub embed z pdf w body tak.

Wewnątrz tego elementu "PDF" znajduje się odpowiednie terytorium wtyczki PDF i nie można uzyskać do niego dostępu pod numerem javascript. Może istnieć jakaś wtyczka przeglądarki lub przeglądarki, która pozwoli ci na interakcję z nią, ale nie słyszałam o niej.

+1

Właściwie jest jedno rozwiązanie (które zwykle działa) przez @ noam. Potrzebuje trochę modyfikacji, ale generalnie jest dobra. –

+1

To jest niesamowite, jestem jedną z osób, które faworyzowały to pytanie, ponieważ potrzebowałem rozwiązania. Po tym, jak nigdy go nie znalazłem i nie rozumiałem dlaczego, zostawiłem to tutaj. Myślę, że biblioteka JS renderuje sam PDF, więc tak to wie. Ale zgodnie z pytaniem dotyczącym "iframe" nie odpowiada. – Hashbrown

+0

Wygląd. Używamy pdf-js do pobierania pageCount i pageHeight. Teraz możemy poznać wysokość dokumentu. Następnie ustawiamy tę wartość na iframe.style.height i to wszystko. Wiem, że to nie jest prawdziwa odpowiedź, a odpowiedź brzmi "poprawna". Ale pdf-js to całkiem dobry "hack". –

5

Testowałem to na moim iPadzie i działa, może to może być dobre dla ciebie też. Istnieje projekt HTML5 js autorstwa mozilla, który renderuje plik pdf i wyświetla je, a także można uzyskać widok strony w pliku pdf. https://mozillalabs.com/en-US/pdfjs/ https://github.com/mozilla/pdf.js/blob/master/examples/helloworld/hello.js

PDFJS.getDocument('helloworld.pdf').then(function(pdf) { 
    // Using promise to fetch the page 
    pdf.getPage(1).then(function(page) { 
    var scale = 1.5; 
    var viewport = page.getViewport(scale); 

    // 
    // Prepare canvas using PDF page dimensions 
    // 
    var canvas = document.getElementById('the-canvas'); 
    var context = canvas.getContext('2d'); 
    canvas.height = viewport.height; 
    canvas.width = viewport.width; 

    // 
    // Render PDF page into canvas context 
    // 
    var renderContext = { 
     canvasContext: context, 
     viewport: viewport 
    }; 
    page.render(renderContext); 
    }); 
}); 
+0

To działa! Dzięki. Ale jeden problem tutaj, to rozwiązanie nie jest w 100% przeglądarką (stary IE patrzę na ciebie). Niezbędne jest również dodanie wykrywania przeglądarki. Ale to naprawiony problem dla iPada. –

2

Peter, nie ma sposobu, można uzyskać wysokość PDF w iFrame na iOS Safari, ponieważ nie ma Adobe Reader safari dostępne dla urządzeń przenośnych firmy Apple wtyczki. Możesz użyć HTML 5-Canvas do renderowania PDF i bibliotek po stronie klienta open source, takich jak pdfjs ... etc ...

Bez tego jedynym sposobem, w jaki możesz uzyskać wysokość [lub szerokość] od serwera, użyj iTextSharp. dll rodzaj komponentu i uzyskać wysokość/szerokość strony pdf, które później można pomnożyć przez liczbę stron, to wszystko, co możesz zrobić łatwo po stronie serwera. Wykorzystaj pobraną wysokość/szerokość, aby nadać styl iFrame, a następnie nadaj mu atrybut atrybutu PDF atrybutu iFrame. iFrame się rozciągnie, a otrzymasz efekt przewijania.

LUB

Jeśli masz jakieś narzędzie lub składnik, który może konwertować pliki PDF do obrazu, a następnie po prostu rzucać obrazy z serwera na HTML, z javascript można mieć kontrolę nad coraz atrybutów. Mamy MS-SSRS dla potrzeb raportowania, dla niewielkiej części aplikacji dostępnej na iPadzie otrzymujemy obrazy z MS-SSRS zamiast PDF. Powodem, dla którego przyjęliśmy tę opcję, jest to, że jeśli liczba stron wzrośnie, wówczas struktura po stronie klienta, jak PDF-JS, zginie, aby renderować na płótnie.

Masz różne opcje obsługi formatu PDF na iPadzie.

+0

dziękuję za odpowiedź, ale pdf-js jest dobry, ponieważ używamy pdf-js tylko, aby uzyskać "wysokość" pdf, wszystkie renderowania dzieje się przez rodzimy iPad pdf displayer. –

Powiązane problemy