如何在已加载到 PDFView 的 PDF 上实现文本到语音
Posted
技术标签:
【中文标题】如何在已加载到 PDFView 的 PDF 上实现文本到语音【英文标题】:How do I implement text to speech on a PDF that's already loaded to PDFView 【发布时间】:2018-08-20 14:28:32 【问题描述】:我正在尝试在我的应用程序中实现文本转语音。首先,我实现了 PDFview,它允许我从我的设备中选择 PDF 文件并加载它。我想要实现的是,在将此 PDF 加载到 PDFview 后,我想将文本读出来。我如何实现这一目标?
使用传入我的 PDFView 库的相同 Uri 来加载 pdf,以便我可以查看它
public String getRealPathFromURI(Context context, Uri contentURI)
String result;
Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
if(cursor == null)
result = contentURI.getPath();
else
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA);
result = cursor.getString(idx);
cursor.close();
return result;
btnSpeak.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
String parsedText = "";
try
PdfReader pdfReader = new PdfReader(getRealPathFromURI(getContext(), uri));
int n = pdfReader.getNumberOfPages();
for (int i = 0; i < n; i++)
parsedText = parsedText + PdfTextExtractor.getTextFromPage(pdfReader, i + 1).trim() + "\n";
pdfReader.close();
textToSpeech.speak(parsedText, TextToSpeech.QUEUE_FLUSH, null);
catch (Exception ex)
);
上面的代码是我试图做的。
【问题讨论】:
你会 1) 创建一个 TextToSpeech 对象,tts,2) 将 pdf 文件中的所有 txt 从头到尾解析成一个长字符串,以及 3) tts.speak(string)。如果这是您想要做的更具体的事情,那么可以用更精确的要求编辑问题。 我试图将 PDF 中的所有文本解析为一个长字符串。我尝试使用 IText PDFReader 库来做到这一点,但它不起作用,因此 tts 无法读出文本 您可以使用 Log 和 logcat 来确定您是否遇到异常,如果是,是什么。如果您没有收到异常,请通过记录它来检查您是否实际上在 parseText 字符串中获取了任何文本。如果你得到正确的文本,那么问题出在 textToSpeech (可疑)。 实际上我没有从 parsedText 中得到任何文本。我认为这就是问题所在。我尝试了正常的文本,并且 tts 工作正常。它从 PDF 中提取文本有点问题 我真的没有使用 URI 或 PDFReader 类的经验...但是如果您在代码的不同位置应用使用 Log.i(...) 的相同方法来验证事情正在按照你所期望的方式发生,那么你就会发现问题所在。例如,您可以记录 getRealPath() 给出的结果以确保它是正确的......或者您可以在 for 循环中记录以确保它甚至被执行。 【参考方案1】:试试这个:
btnSpeak.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
String parsedText = "We did not get any text from the PDF. You will have to examine why.";
try
PdfReader pdfReader = new PdfReader(getRealPathFromURI(getContext(), uri));
int n = pdfReader.getNumberOfPages();
for (int i = 0; i < n; i++)
parsedText = parsedText + PdfTextExtractor.getTextFromPage(pdfReader, i + 1).trim() + "\n";
pdfReader.close();
catch (Exception ex)
Log.i("XXX", "There was an exception: " + ex);
textToSpeech.speak(parsedText, TextToSpeech.QUEUE_FLUSH, null);
);
【讨论】:
以上是关于如何在已加载到 PDFView 的 PDF 上实现文本到语音的主要内容,如果未能解决你的问题,请参考以下文章
安卓加载展示PDF文件(腾讯X5内核(TbsReaderView)+PDFView)
安卓加载展示PDF文件(腾讯X5内核(TbsReaderView)+PDFView)
如何在 swift 中将 UIImage 中的 PDF 放入 PDFView 中?