2017-11-24 163 views
8

Mam aplikację iOS, w której chcę wyświetlić dane z pliku .djvu. Czy jest jakiś sposób, aby przeczytać plik .djvu w Swift lub wewnątrz UIWebview.Jak wyświetlić plik DJVU w UIWebview

Próbowałem również następujące rozwiązania, aby wyświetlić plik djvu w uiwebview, ale to nie pomaga.

1. bezpośrednio otwarty plik DjVu w uiwebview

let urlPage : URL! = URL(string: "http://192.168.13.5:13/myData/5451890-OP.djvu")   
webView.loadRequest(URLRequest(url: urlPage)) 

2. drugie i próbowali przekształcić plik djvu pdf i pokazano, że przekształcone pliku PDF w widoku. Link referencyjny: https://github.com/MadhuriMane/ios-djvu-reader Ale to daje odbicie lustrzane o niskiej jakości.

3. Próbowałem pliku podglądu za pomocą UIDocumentInteractionController() i jest to metoda delegata, ale nie działa.

Proszę sugerować wszelkie możliwe sposoby, aby to zrobić.

+0

możesz przekonwertować pliki djvu na pdf, a następnie załadować w przeglądarce internetowej. –

+0

Próbowałem tego samego. Ale nie można znaleźć żadnego rozwiązania do konwersji pliku djvu do pliku pdf. Czy możesz mi pomóc? –

+0

możesz przekonwertować je online i przesłać na swój serwer hostingowy. http://djvu2pdf.com/ –

Odpowiedz

2

Pamiętając, że pliki .djvu są mniej popularne niż podobne formaty, takie jak EPUB, MOBI, PDF i inne formaty plików eBook, chciałbym zastosować następujące podejście, aby obejść problem.

1) stworzenie serwisu internetowego do konwertowania plików djvu na pdf Np .: http://example.com/djvuToPdf/djvuFile/outputFile

2) Czytaj plik PDF w UIWebView

stworzenie serwisu internetowego Przypuszczam, że masz dostęp do dowolny serwer rozproszony Linux, w moim przypadku Ubuntu 16.04.

Etap pierwszy: Instalacja djvulibre sudo apt-get install djvulibre-bin ghostscript

dwuetapową: Test Run $ djvups inputFile.djvu | ps2pdf - outputFile.pdf. Możesz także użyć polecenia ddjvu. Jednak pliki przekonwertowane za pomocą komendy ddjvu są 10 razy większe niż polecenie djvups. Warto rozważyć użycie --help, aby poznać ustawienia, takie jak mode, quality i tak dalej.

Krok trzeci: Tworzenie usługi sieciowej (aby zachować rzeczy proste, używam PHP, używać niczego w dogodnym [Python golang])

<?php 

$inputFile = $_GET['input_file']; 
$outputFile = $_GET['output_file']; 

// use shell exec to execute the command 
// keep in mind that the conversion takes quite a long time 
shell_exec(sprintf("djvups %s | ps2pdf - %s", $inputFile, $outputFile)); 

$name = $outputFile; 
//file_get_contents is standard function 
$content = file_get_contents($name); 
header('Content-Type: application/pdf'); 
header('Content-Length: '.strlen($content)); 
header('Content-disposition: inline; filename="' . $name . '"'); 
header('Cache-Control: public, must-revalidate, max-age=0'); 
header('Pragma: public'); 
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); 
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); 
echo $content; 


?> 

końcowy etap: load PDF w App

As Apple radzę, zastanów się nad użyciem WKWebView zamiast UIWebView.

if let pdfURL = Bundle.main.url(forResource: "pdfFile", withExtension: "pdf", subdirectory: nil, localization: nil) { 
    do { 
     let data = try Data(contentsOf: pdfURL) 
     let webView = WKWebView(frame: CGRect(x:20,y:20,width:view.frame.size.width-40, height:view.frame.size.height-40)) 
     webView.load(data, mimeType: "application/pdf", characterEncodingName:"", baseURL: pdfURL.deletingLastPathComponent()) 
     view.addSubview(webView) 

    } 
    catch { 
     // catch errors here 
    } 

}