Antes de começar - lista de verificação
O que você está tentando alcançar?
Em nosso projeto ( edição , demonstração ), gostaria de carregar apenas as páginas que estou visualizando e renderizar a primeira página antes de carregar todo o documento.
No meu entendimento, PDF.js suporta cabeçalhos de intervalo e o react-pdf
API descreve que é possível incluir um PDFDataRangeTransport
objeto no file
propriedade. Eu não consigo ver o que fazer para realmente enviar esses cabeçalhos Range!
Descreva as soluções que você tentou
Meio Ambiente
Oi,
Sim, PDFDataRangeTransport deve ser suportado, já que React-PDF apenas passa para pdf.js, não faz muito mais com ele. Encontrei este tópico na criação de objetos PDFDataRangeTransport.
Parece que a maneira mais fácil de obter o comportamento desejado é simplesmente passar um URL como file
prop. Isso deve funcionar bem: https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions#range
Obrigado pela resposta (e pela biblioteca incrível, por falar nisso) @wojtekmaj!
Infelizmente, eu passo a URL como um arquivo de suporte ( fonte , demo ), mas ela só renderiza depois que todo o documento é obtido.
Além disso, a solicitação do arquivo PDF não parece ter cabeçalhos de intervalo.
Talvez esta condicional nunca seja realmente verdadeira se eu passar uma string?
// File is PDFDataRangeTransport
if (file instanceof PDFDataRangeTransport) {
return { range: file };
}
De acordo com os desenvolvedores do PDF.js, o PDF.js não oferece suporte à codificação gzip
de respostas de intervalo , portanto, precisa ser definido explicitamente. De acordo com os documentos PDF.js, você pode definir cabeçalhos personalizados . Como o documento passa o objeto options
para PDFjs.getDocument
, isso deve funcionar:
<Document
options={{
httpHeaders: {
'Accept-Encoding': 'Identity',
}
}}
file={"https://example.com/some.pdf"}
>
No entanto, isso não acontece, então ainda estou investigando o que está acontecendo. Parece provável que seja um problema do pdf.js.
Comentários muito úteis
De acordo com os desenvolvedores do PDF.js, o PDF.js não oferece suporte à codificação
gzip
de respostas de intervalo , portanto, precisa ser definido explicitamente. De acordo com os documentos PDF.js, você pode definir cabeçalhos personalizados . Como o documento passa o objetooptions
paraPDFjs.getDocument
, isso deve funcionar:No entanto, isso não acontece, então ainda estou investigando o que está acontecendo. Parece provável que seja um problema do pdf.js.