我使用Javascript和Google Drive API来获取PDF,但我无法正确解析文件:页数是正确的,但内容是空白的。
我非常确定帮助浏览器读取 pdf.js 中的 typedarray 的函数可以工作,因为它还用于转换从 HTML 输入标记获取的 PDF。
我找到了这个Q&A,但是这个方法已经没有用了。看来Google改变了API的方法。
我也发现了this,然后我尝试使用
new File()
而不是new Blob()
。可惜还是失败了。
顺便说一下,webViewLink 和 webContentLinl 都可以工作。我可以使用它们下载或预览 PDF。
还有其他方法可以解决这个问题吗?谢谢您的帮助。
这是我的代码
createPicker() {
const view = new window.google.picker.View(window.google.picker.ViewId.DOCS);
view.setMimeTypes('application/pdf');
const picker = new window.google.picker.PickerBuilder()
.enableFeature(window.google.picker.Feature.NAV_HIDDEN)
.enableFeature(window.google.picker.Feature.MULTISELECT_ENABLED)
.setDeveloperKey(process.env.GOOGLE_CONFIG.PICKER_API_KEY)
.setAppId(process.env.GOOGLE_CONFIG.APP_ID)
.setOAuthToken(this.accessToken)
.addView(view)
.addView(new window.google.picker.DocsUploadView())
.setCallback(this.pickerCallback)
.build();
picker.setVisible(true);
},
async pickerCallback(data) {
if (data.action === window.google.picker.Action.PICKED) {
const document = data[window.google.picker.Response.DOCUMENTS][0];
const fileId = document[window.google.picker.Document.ID];
try {
const response = await window.gapi.client.drive.files.get({
fileId,
alt: 'media',
});
const blob = new Blob([response.body], { type: document.mimeType });
const arrayBuffer = await blob.arrayBuffer();
const typedarray = new Uint8Array(arrayBuffer);
// TODO: use pdf.js read file
} catch (error) {
console.error('Error getting file content:', error);
}
}
},