Thanks for your reaply,
I'm using indexedDB to store files, I'm watching offline-version from pdftron samples, everything is simple to understand, but I dont know how to check files into indexedDB, because I don't know db names and  the open function doesn't work. Followi a code sample:
<!doctype html>
<html manifest="offline-sample.appcache">
<head>
<link href="css/viewer.css" rel="stylesheet" type="text/css">
</head>
    Â
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <!-- include the following meta tags for mobile devices -->
    <!--<meta name="apple-mobile-web-app-capable" content="yes" />-->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
    Â
  Â
<script src="js/jquery-1.7.2.min.js"></script>
<script src="lib/WebViewer.min.js"></script>
<script src="lib/html5/ControlUtils.js"></script>
<script src="lib/html5/CoreControls.js"></script>
    <script src="lib/html5/external/modernizr.custom.js"></script>
    <script type="text/javascript">
      var library = [
        {
          id: "tiger",
          location: "file/tiger.xod",
          thumb: "tiger.png"
        },
        {
          id: "getting_started",
          location: "file/GettingStarted.xod",
          thumb: "GettingStarted.png"
        },
        {
          id: "form_actions",
          location: "file/form-actions.xod",
          thumb: "form_actions.jpg"
        },
        {
          id: "webviewer_developer_guide",
          location: "file/WebViewer_Developer_Guide.xod",
          thumb: "WebViewer_Developer_Guide.jpg"
        },
        {
          id: "form1",
          location: "file/form1.xod",
          thumb: "form1.png"
        },
        {
          id: "webviewer_user_guide",
          location: "file/WebViewer_User_Guide.xod",
          thumb: "WebViewer_User_Guide.jpg"
        }
      ];
      $(function() {
console.log('start function');
        if (!(Modernizr.indexeddb || Modernizr.websqldatabase)) {
          alert('questo browser non supporta offline mode');
          return;
        }
        var docMenu = $('#documentMenu');
        // unfortunately have to use setTimeout to let the Web SQL database intialize
        setTimeout(function() {
          // create list of documents in the library
          for (var i = 0; i < library.length; ++i) {
            (function(i) {
              var docInfo = library[i];
              var docDiv = $('<div>').addClass('doc');
              var thumbContainer = $('<div>').addClass('thumbContainer');
              thumbContainer.append($('<img>').attr('src', docInfo.thumb).addClass('thumbnail'));
              var button = $('<input type="button">');
              // check whether we've already downloaded this document
              checkDownloaded(docInfo.id, function(isDownloaded) {
                if (isDownloaded) {
                  docInfo.downloaded = true;
                  button.attr('value', 'View');
                } else {
                  button.attr('value', 'Download');
                }
                docDiv.append(button);
              });
              button.click(function() {
                if (docInfo.downloaded) {
                  loadViewer(docInfo);
                } else {
                  button.attr('value', 'Downloading...');
                  storeOffline(docInfo, function(err) {
                    if (err) {
                      button.attr('value', 'Error');
                    } else {
                      docInfo.downloaded = true;
                      button.attr('value', 'View');
                    }
                  });
                }
              });
              docDiv.append(thumbContainer);
              docMenu.append(docDiv);
            })(i);
          }
        }, 1000);
        function checkDownloaded(id, onComplete) {
console.log('checkDownloaded');
          var doc = new CoreControls.Document(id);
          doc.initOfflineDB(function() {
            onComplete(doc.isDownloaded());
          });
        }
//invocato dopo il click su download
        function storeOffline(docInfo, onComplete) {
console.log('store offline');
          var cacheHinting = CoreControls.PartRetrievers.CacheHinting;
          var partRetriever = new CoreControls.PartRetrievers.StreamingPartRetriever(docInfo.location, cacheHinting.CACHE);
          var doc = new CoreControls.Document(docInfo.id);
          doc.loadAsync(partRetriever, function(err) {
            if (err) {
              onComplete(err);
              return;
            }
            doc.initOfflineDB(function() {
console.log('initDB');
              doc.storeOffline(function() {
                onComplete();
              });
            });
          });
         Â
                Â
                                                 Â
          /*var dati = {};
dati.version = 1;
Â
dati.open = function() {
console.log("dati open");
  Â
  var request = window.indexedDB.open("dati", this.version);
Â
  request.onupgradeneeded = function(event) {
console.log('OnUpgraded');
    var db = event.target.result;
Â
    if(db.objectStoreNames.contains("utenti")) {
      Â
      db.deleteObjectStore("utenti");
    }
    Â
    var store = db.createObjectStore("utenti", {keyPath: "id"});
  };
Â
  request.onsuccess = function(event) {
    console.log("On Success");
    dati.db = event.target.result;
  };
Â
  request.onerror = function(event) {
    Â
    console.log("Si è verificato un errore nell'apertura del DB");
  };
};*/
          Â
          Â
          //console.log('pre open database');
           /*var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
     var msg;
     Â
      db.transaction(function (tx) {
      tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
       var len = results.rows.length, i;
       msg = "<p>Found rows: " + len + "</p>";
       document.querySelector('#status').innerHTML +=  msg;
       for (i = 0; i < len; i++){
         msg = "<p><b>" + results.rows.item(i).log + "</b></p>";
         document.querySelector('#status').innerHTML +=  msg;
       }
      }, null);
     });*/
     Â
     Â
        }
        function loadViewer(docInfo) {
console.log('loadViewer');
          var viewerElement = $('#viewer');
          viewerElement.empty();
          myWebViewer = new PDFTron.WebViewer({
            type: "html5,html5mobile",
            path: 'lib', // URL path to the WebViewer root folder
            initialDoc: docInfo.location, // URL path to the document
            documentId: docInfo.id,
            startOffline: true, // requires startOffline to be true to view in offline mode
            enableAnnotations: true,
            streaming: false,
            mobileRedirect: false,
//useDownloader:true
          }, viewerElement[0]);
        }
        Â
         console.log("indexedDB open");
                              Â
          var idbSupported = false;
var db;
Â
window.addEventListener("DOMContentLoaded", function(){
console.log("addEventListener");
if("indexedDB" in window) {
console.log("indexedDB supportato");
idbSupported = true;
}
Â
if(idbSupported) {
var openRequest = indexedDB.open("test",1);
Â
openRequest.onupgradeneeded = function(e) {
var thisDB = e.target.result;
if(!thisDB.objectStoreNames.contains("pdf_store")){
thisDB.createObjectStore("pdf_store");
console.log("creato pdf_store table");
}else{
console.log("pdf_store è già esistente");
}
console.log("Upgrading...");
};
Â
openRequest.onsuccess = function(e) {
console.log("Success!");
db = e.target.result;
console.log(db);
//addPdfFiles();
//document.querySelector("#addButton").addEventListener("click", addPdfFiles, false);
};
Â
openRequest.onerror = function(e) {
console.log("Error");
console.dir(e);
};
Â
}else{
return;
}
Â
},false);
        Â
      });
    </script>
  <body>
    <div id="viewer" style="background: #929292"></div>
    <div id="documentMenu">
      <div><h2>Offline Library Sample</h2></div>
    </div>
  </body>
</html>
Some advices? Thanks.
Francesco.
Il giorno mercoledì 13 aprile 2016 02:40:03 UTC+2, Anatoly Kudrevatukh ha scritto:
Hello Francesco,
Based on your description it appears that setting up cashing would be the easiest and browser independent approach
I wouldn't recommend storing files in local storage, as different browsers have different size limits and it is not optimized for file storage in general.
On Tuesday, April 12, 2016 at 9:43:26 AM UTC-7, Francesco Perfetti wrote:
Hi all guys,Â
I'm developing a web app, one of the functionality that I'll have to develop is based on save a lot of pdf file inside local storage.Â
The maximum floor space would be about 700MB.Â
Offline mode in pdftron could help me?Â
is it compatible with IE9?Â
Thank and haave a good day.Â
Francesco.