Hast du den Code aus Beitrag #13 so getestet wie ich geschrieben habe?
ja, aber ich bekomme das im Zusammenspiel mit dem "pdf to text" Teil nicht eingebunden.
Folgender Code habe ich zunächst verwendet:
Code:
<html>
<head>
<title>Converting PDF To Text using pdf.js</title>
<style>
html, body { width: 100%; height: 100%; overflow-y: hidden; padding: 0; margin: 0; }
body { font: 13px Helvetica,sans-serif; }
iframe { border: none; width: 100%; height: 100%; }
#output { padding: 10px; box-shadow: 0 0 5px #777; border-radius: 5px; margin: 10px; display:none;}
#processor { height: 70px; }
#error {
margin: 1em 0;
color: #f00;
font-weight: bold;
}
</style>
</head>
<body>
<div id="tts_demo"></div>
<div id="error"></div>
<div id="pdftotext">
<!-- embed the pdftotext web app as an iframe -->
<iframe id="processor" src="../"></iframe>
<!-- a container for the output -->
<div id="output"></div>
</div>
<div>
<!-- the PDF file must be on the same domain as this page -->
<iframe id="input" src="./Predikt_Daniel_4_Lebenslust.pdf"></iframe>
</div>
<!-- the scripts -->
<!-- google tts-script -->
<!-- jquery einbinden -->
<script type="text/javascript" src="./jquery-1.9.1.min.js"></script>
<!-- google-tts einbinden -->
<script type="text/javascript" src="./src/google-tts.js"></script>
<!-- soundmanager einbinden -->
<script type="text/javascript" src="./soundmanager2.js"></script>
<!-- google-tts- setup -->
<!-- google-tts- setup -->
<script type="text/javascript">
$(document).ready(function(){
soundManager.setup({
url: '/',
preferFlash: false,
onready: function () {
alert('test');
if (!window.GoogleTTS) {
$("#error").text("Sorry, the google-tts script couldn't be loaded.");
return;
} else {
var HTML = '\
<div> \
<label for="demo_language">Language:</label> \
<select id="demo_language"> \
<option value="" disabled="disabled">(Select language)</option> \
</select> \
</div> \
';
$("#tts_demo").html(HTML);
}
var googleTTS = new window.GoogleTTS();
// setup language options
$.each(googleTTS.languages(), function (key, value) {
$('#demo_language').append('<option value="' + key + '">' + value + '</option>');
});
// play
$("#demo_play").click(function () {
var currentSentence = '';
function playSentence (sentences) {
if (sentences.length) {
currentSentence = sentences.shift().trim();
if (currentSentence.length) {
googleTTS.play(currentSentence, $("#demo_language").val(), function (err) {
if (err) {
$("#error").text(err.toString());
} else {
window.setTimeout(playSentence(sentences), 3000);
}
});
} else {
playSentence(sentences);
}
} else {
console.log('Finished playing');
}
}
});
// defaults
$("#demo_language").val('de');
// available player
googleTTS.getPlayer(function (err, player) {
if (err) {
return $("#error").text(err.toString());
}
if (player) {
$("#tts_player").text(player.toString());
} else {
$("#tts_player").text('None available');
}
});
}
});
});
</script>
<!-- pdf to text - script -->
<script>
var input = document.getElementById("input");
var processor = document.getElementById("processor");
var output = document.getElementById("output");
window.addEventListener("message", function(event){
if (event.source != processor.contentWindow) return;
switch (event.data){
case "ready":
// if ready read the pdf
var xhr = new XMLHttpRequest;
xhr.open('GET', input.getAttribute("src"), true);
xhr.responseType = "arraybuffer";
xhr.onload = function(event) {
processor.contentWindow.postMessage(this.response, "*");
};
xhr.send();
break;
default:
// copy content to pdf
var status = $("#processor").contents().find("#message").text();
output.textContent = event.data.replace(/\s+/g, " ");
// continuing motification
if (status == "Done!")
{
var sentences = $("#output").val().replace(/([.?!]+ )/g, "$1\n").split(/\s*[\n\r]+\s*/);
playSentence(sentences);
}
else {}
break;
}
}, true);
</script>
--------
Problem 1:
sentences ist hier allerdings leer, was, wenn ich einen alert mache:
Code:
var sentences = $("#output").val().replace(/([.?!]+ )/g, "$1\n").split(/\s*[\n\r]+\s*/);
alert(sentences);
sehr schön deutlich wird.
Problem 2:
das Script für die TTS wird scheinbar gar nicht beachtet, denn nirgendwo im Dokument wird die Auswahlbox für die Spachen angezeigt. (ebensowenig wie der Error), obwohl beides doch hier:
Code:
if (!window.GoogleTTS) {
$("#error").text("Sorry, the google-tts script couldn't be loaded.");
return;
} else {
var HTML = '\
<div> \
<label for="demo_language">Language:</label> \
<select id="demo_language"> \
<option value="" disabled="disabled">(Select language)</option> \
</select> \
</div> \
';
$("#tts_demo").html(HTML);
}
definiert wird.
Kannst du (oder jemand anderes) also bitte nochmal etwas genauer drüber schauen, was nun das Problem ist!?
- - - Aktualisiert - - -
sentences ist leer, was, wenn ich einen alert mache:
Code:
var sentences = $("#output").val().replace(/([.?!]+ )/g, "$1\n").split(/\s*[\n\r]+\s*/);
alert(sentences);
deutlich wird.
auch ein abändernd des Codes auf:
Code:
var sentences = $("#output").text().replace(/([.?!]+ )/g, "$1\n").split(/\s*[\n\r]+\s*/);
alert(sentences);
bringt nicht den Erfolg, das die Sätze nun einzeln vorliegen, vielmehr wird hier der gesamte Text angezeigt.
- - - Aktualisiert - - -
Zum weiteren Testen habe ich den Code wie folgt geändert:
aktueller Code
Code:
<html>
<head>
<title>Converting PDF To Text using pdf.js</title>
<style>
html, body { width: 100%; height: 100%; overflow-y: hidden; padding: 0; margin: 0; }
body { font: 13px Helvetica,sans-serif; }
iframe { border: none; width: 100%; height: 100%; }
#output { padding: 10px; box-shadow: 0 0 5px #777; border-radius: 5px; margin: 10px; display:none;}
#processor { height: 70px; }
#error {
margin: 1em 0;
color: #f00;
font-weight: bold;
}
</style>
</head>
<body>
<div id="tts_demo"></div>
<div id="error"></div>
<div id="pdftotext">
<!-- embed the pdftotext web app as an iframe -->
<iframe id="processor" src="../"></iframe>
<!-- a container for the output -->
<div id="output"></div>
</div>
<div>
<!-- the PDF file must be on the same domain as this page -->
<iframe id="input" src="Predikt_Daniel_4_Lebenslust.pdf"></iframe>
</div>
<!-- the scripts -->
<!-- google tts-script -->
<!-- jquery einbinden -->
<script type="text/javascript" src="./jquery-1.9.1.min.js"></script>
<!-- google-tts einbinden -->
<script type="text/javascript" src="./src/google-tts.js"></script>
<!-- soundmanager einbinden -->
<script type="text/javascript" src="./soundmanager2.js"></script>
<!-- google-tts- setup -->
<!-- google-tts- setup -->
<script type="text/javascript">
$(document).ready(function(){
soundManager.setup({
url: '/',
preferFlash: false,
onready: function() {
if (!window.GoogleTTS) {
$("#error").text("Sorry, the google-tts script couldn't be loaded.");
return;
} else {
var HTML = '\
<div> \
<label for="demo_language">Language:</label> \
<select id="demo_language"> \
<option value="" disabled="disabled">(Select language)</option> \
</select> \
</div> \
';
$("#tts_demo").html(HTML);
}
var googleTTS = new window.GoogleTTS();
// setup language options
$.each(googleTTS.languages(), function(key, value) {
$('#demo_language').append('<option value="' + key + '">' + value + '</option>');
});
// play
$("#demo_play").click(function() {
function playSentence(sentences) {
alert(sentences);
if (sentences.length) {
currentSentence = sentences.shift().trim();
if (currentSentence.length) {
googleTTS.play($("#demo_text").val(), $("#demo_language").val(), function(err) {
if (err) {
$("#error").text(err.toString());
}
else {
window.setTimeout(playSentence(sentences), 3000);
}
});
}
else {
playSentence(sentences);
}
}
else {
console.log('Finished playing');
}
}
});
// defaults
$("#demo_language").val('de');
//$("#demo_text").val('中文');
// available player
googleTTS.getPlayer(function (err, player) {
if (err) {
return $("#error").text(err.toString());
}
if (player) {
$("#tts_player").text(player.toString());
} else {
$("#tts_player").text('None available');
}
});
}
});
});
</script>
<!-- pdf to text - script -->
<script>
var input = document.getElementById("input");
var processor = document.getElementById("processor");
var output = document.getElementById("output");
window.addEventListener("message", function(event){
if (event.source != processor.contentWindow) return;
switch (event.data){
case "ready":
// if ready read the pdf
var xhr = new XMLHttpRequest;
xhr.open('GET', input.getAttribute("src"), true);
xhr.responseType = "arraybuffer";
xhr.onload = function(event) {
processor.contentWindow.postMessage(this.response, "*");
};
xhr.send();
break;
default:
// copy content to pdf
var status = $("#processor").contents().find("#message").text();
output.textContent = event.data.replace(/\s+/g, " ");
// continuing motification
if (status == "Done!")
{
var msg = $("#output").text();
//var sentences = msg.split(/\!|\?|\.|\r\n|\n|\r/mg);
var sentences = msg.replace(/([.?!]+ )/g, "$1\n").split(/\s*[\n\r]+\s*/);
alert('test');
playSentence(sentences);
}
else {}
break;
}
}, true);
</script>
</body>
</html>
jetzt wird zwar die TTS-Engime geladen, doch jetzt wird
NICHT in die Funktion
playSentence()
gesprungen!
das Script kommt bis zum alert('test') und danach passiert scheinbar nichts mehr, denn dass hier:
Code:
function playSentence(sentences) {
alert(sentences);
wird nicht aufgerufen!
- - - Aktualisiert - - -
Habe gerade bemerkt das der Code aus dem Google-TTs-Repo nur offline geht und pdf-to-txt jedoch nur online, daher habe ich auf die Schnelle folgenden Code gebaut:
Code:
<html>
<head>
<title>Converting PDF To Text using pdf.js</title>
<style>
html, body { width: 100%; height: 100%; overflow-y: hidden; padding: 0; margin: 0; }
body { font: 13px Helvetica,sans-serif; }
iframe { border: none; width: 100%; height: 100%; }
#output { padding: 10px; box-shadow: 0 0 5px #777; border-radius: 5px; margin: 10px; display:none;}
#processor { height: 70px; }
#error {
margin: 1em 0;
color: #f00;
font-weight: bold;
}
</style>
</head>
<body>
<div id="tts_demo"></div>
<div id="error"></div>
<div id="pdftotext">
<!-- embed the pdftotext web app as an iframe -->
<iframe id="processor" src="../"></iframe>
<!-- a container for the output -->
<div id="output"></div>
</div>
<div>
<!-- the PDF file must be on the same domain as this page -->
<iframe id="input" src="./Predikt_Daniel_4_Lebenslust.pdf"></iframe>
</div>
<!-- the scripts -->
<!-- jquery einbinden -->
<script type="text/javascript" src="./jquery-1.9.1.min.js"></script>
<!-- pdf to text - script -->
<script>
// modification
var zaehler = 0;
// continuing original
var input = document.getElementById("input");
var processor = document.getElementById("processor");
var output = document.getElementById("output");
window.addEventListener("message", function(event){
if (event.source != processor.contentWindow) return;
switch (event.data){
case "ready":
// if ready read the pdf
var xhr = new XMLHttpRequest;
xhr.open('GET', input.getAttribute("src"), true);
xhr.responseType = "arraybuffer";
xhr.onload = function(event) {
processor.contentWindow.postMessage(this.response, "*");
};
xhr.send();
break;
default:
// copy content to pdf
var status = $("#processor").contents().find("#message").text();
output.textContent = event.data.replace(/\s+/g, " ");
// continuing motification
if (status == "Done!")
{
var msg = $("#output").text();
var myArray = msg.split(/\!|\?|\.|\,|\:|\;|\r\n|\n|\r/mg);
var txtSize = myArray.length;
for(var i=0;i<myArray.length;i++)
{
//alert(myArray[i]);
// jedes element als key-var in localstorage speichern
localStorage.setItem(i, myArray[i]);
}
textlesen(txtSize);
}
else {}
break;
}
}, true);
// added as modification to play text direct after reed
function textlesen(anzahl)
{
$("#tts_demo").html("");
var soundurl="",soundStr="";
//alert('zahler: ' + zaehler + '\n anzahl: '+ anzahl);
if (zaehler >= anzahl)
{
console.log('Finished playing');
zahler = 0;
}
else {
var currentsentence = localStorage.getItem(zaehler);
soundurl = 'http://translate.google.com/translate_tts?ie=utf-8&tl=de&q='+currentsentence+'';
soundStr = '<audio controls autoplay><source src="'+soundurl+'" ></audio>';
alert(soundStr);
$("#tts_demo").html(soundStr);
zaehler = zaehler + 1;
var myVar=setTimeout(function () {textlesen(anzahl)}, 3000);
}
}
</script>
</body>
</html>
allerdings wird dabei nur der erste Satz wiedergegeben, die anderen nicht!
Woran liegt das und wie könnte ich erreichen, das ALLE Sätze wiedergegeben werden?
Bitte helft mir!