android - 动态 URL PDF 在 WebView 中显示为“无可用预览”
问题描述
只有在访问了几乎所有 Stack Overflow 链接以获得相同的答案之后,我才不得不写这个,
我正在尝试在WebView
. 我知道它WebView
不支持正常显示 PDF,所以我使用其他答案中建议的 G-Drive URL 扩展名。此外,业务团队要求在我们的应用程序本身中打开 PDF,这样我就无法启动Intent
其他 PDF 查看器。我下载了 PdfViewer 库,但它使 APK 的大小大大超出了预期。
这个 URL 实际上是一个 GET 请求。每次我点击请求时,服务器都会根据请求参数在运行时生成 PDF 并立即返回它,而不会将其存储在服务器上。
PDF 网址:
“ http://server_ip_number/pata/retail/v4/reports_pdf?search=Test&min_amount=0.0&max_amount=0.0 ”(出于安全原因不能透露IP地址)
此请求还需要一些用于 auth 的标头,我将在下面详细发布。
这就是我目前正在做的事情;
class AllUsersWebViewActivity : BaseActivity() {
private val pdfActualUrl = "https://drive.google.com/viewerng/viewer?embedded=true&url=http://server_ip_number/pata/retail/v4/reports_pdf?search=Test&min_amount=0.0&max_amount=0.0"
//This random dummy URL opens perfectly, it does not need any headers or GET params, just normal `loadUrl()` works.
private val workingDummyUrl = "https://drive.google.com/viewerng/viewer?embedded=true&url=https://mindorks.s3.ap-south-1.amazonaws.com/courses/MindOrks_Android_Online_Professional_Course-Syllabus.pdf"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_all_users_report_web_view)
wv_web.settings.javaScriptEnabled = true
wv_web.clearCache(true)
wv_web.loadUrl(URLEncoder.encode(pdfUrl, "ISO-8859-1"), mapOf( //map of necessary headers
"Authorization" to "Auth_TOKEN",
"VersionId" to "1.0.0",
"companyID" to "2",
"DeviceId" to "my_device_id",
"token" to "SECURE_TOKEN"
))
}
笔记:
当我在 PostMan 上使用标题和参数点击上述 GET 请求时,它会立即下载 PDF 文件。
DownloadManager
我使用所有标题和参数尝试了相同的 GET 请求, PDF 文件已成功下载
但是当我尝试它时,WebView
它只会显示No Preview Available
.
我究竟做错了什么?
解决方案
您提供的标头最多会影响 Google 的 Web 服务器对https://drive.google.com/viewerng/viewer
请求的行为。Google 不会将这些信息传递给其他服务器http://server_ip_number/pata/retail/v4/reports_pdf
。
推荐阅读
- android - 如何检查切换按钮组?
- php - Laravel Eloquent - pluck() 角色名称
- eclipse - Spring Tool Suite 无响应
- sql-server - 左连接未返回预期结果
- google-cloud-platform - Pubsub 使用错误的密钥签署 JWT 令牌以进行推送
- zig - 为什么zig中的用户定义类型需要是const?
- python - 在 SageMaker 上构建 XGBoost
- typescript - 如何在构造之前定义可以在类上使用的属性(例如,对于工厂方法)?
- r - 错误:“零长度箭头的角度不确定,因此被跳过”
- python - 将一列拆分为两列留下空白