Pdf.js: Recurso: visualização de duas páginas

Criado em 2 out. 2011  ·  29Comentários  ·  Fonte: mozilla/pdf.js

Solicitação de recurso: adicionar botões para visualização de duas páginas
além disso, seria bom ter um botão para 100% e "Ajuste de página" na barra de ferramentas.

1-ux 1-viewer 2-feature

Comentários muito úteis

Você pode testá-lo usando a versão de visualização em http://54.67.70.0 : 8877 / 5e5412c2765c9bd / web / viewer.html.

Incrível, obrigado. Para testá-lo, é necessário selecionar "Grid Scrolling" e diminuir o zoom para 100%. Resultados:

  1. Configurações: as configurações de rolagem em grade e Mostrar barra lateral são lembradas ao abrir um novo PDF, no entanto, o nível de zoom não é lembrado (sempre padronizando para zoom automático ao abrir um novo PDF, mas isso também acontece com o pdf.js padrão)
  2. Desempenho: testado com alguns PDFs com muito texto e imagens grandes. Parece ter o mesmo desempenho do pdf.js padrão, no entanto, o pdf.js padrão é mais lento que, por exemplo, o leitor de pdf foxit em muitos casos, porque não há páginas suficientes para "ler adiante". Isso significa que a roda de carregamento fica brevemente visível ao rolar rapidamente. Além disso, as páginas já lidas não são "lembradas" na RAM. Rolar para cima novamente mostra a roda de carregamento novamente. Mas, como disse, esse parece ser um problema do padrão geral pdf.js.
  3. Compatibilidade: tamanhos não A4 testados, um PDF com tamanhos de páginas diferentes. Em um PDF não padrão, faltava uma imagem de cabeçalho, mas isso também acontecia com o pdf.js. padrão
  4. Técnico: como com meu FF padrão, tudo funciona (renderização de fonte subpixel, aceleração de hardware ...). Também trabalhando: PDF / A e PDFs com ações Javascript. Os PDFs com elementos de entrada de texto não funcionam, mas, novamente, também não funcionam com o pdf.js padrão ("o PDF contém dados de formulário. A edição de fóruns não é suportada").
  5. Estresse: testei 50 PDFs e alguns torturaram com milhares de páginas.

Talvez eu a nomeasse de maneira diferente (por exemplo, "Visualização de várias páginas", mas não sou um falante nativo. Só não percebi diretamente o que essa configuração faz).

Conclusão: a versão de rolagem em grade está funcionando exatamente como o pdf.js. Existem alguns problemas com o pdf.js em geral que poderiam ser melhorados, mas nada relacionado ao PR de rolagem da grade. A versão de rolagem da grade é absolutamente excelente, seria simplesmente fantástico se a "barra de cabeçalho" se ocultasse automaticamente. No visualizador de PDF do Chrome, esta barra só é exibida por alguns segundos quando o mouse se move ou a tela é tocada. Além disso, já estou pensando em como usar essa versão de rolagem em grade como meu leitor de PDF padrão, até que esteja disponível no FF estável;)

Todos 29 comentários

Sobre 100% e ajuste de página, isso é algo que o Adobe Reader faz e eu concordo que seria bom tê-lo em PDF.js.

Quanto à visualização de duas páginas, também concordo com isso.

+1

Algum trabalho nesse sentido nos últimos 4 anos?

Como ainda há alguma confusão sobre isso, deixe-me esclarecer um pouco. Houve uma solicitação pull de trabalho em andamento para isso, mas o principal problema era que havia _muito_ de código porque o visualizador não era muito modular na época e não tínhamos testes de integração para ele. Ainda não temos testes de integração para o visualizador, então todos os testes disso devem acontecer manualmente. Pode não parecer, mas na verdade é um recurso difícil de suportar. O que acontecerá quando as páginas forem muito largas? O que acontecerá com páginas de tamanhos diferentes?

Este problema está aberto por um motivo. Ainda o consideramos um recurso útil, mas alguém precisa encontrar tempo para trabalhar nisso. Se alguém estiver disposto a trabalhar nisso, primeiro precisamos ter algum tipo de teste automatizado para o visualizador, caso contrário, o risco de regressões de introdução será grande.

+1

Use o botão de reação +1 do GitHub em vez de adicionar comentários +1 aqui. Usar o botão de reação +1 nos permite filtrar os problemas que têm muitos + 1s e, assim, priorizar os problemas de uma maneira melhor.

Está bem. Usei o botão de reação em vez de comentário. obrigado

Eu gostaria disso para poder apoiar a maneira como realmente penso nos livros. Antes do hipertexto, havia um pouco de crítica aos livros por serem "lineares", algumas pessoas até defendiam a obtenção de cópias de um livro para que você pudesse cortá-los e colar um pôster gigante do livro inteiro. Era um projeto inicial chamado "Shakespeare Digital", que tinha todas as suas peças codificadas em pós-escrito para que você pudesse "voar" sobre sua obra. Isso é um pouco sem forma para mim, então minha convenção é pensar em conjuntos de dez páginas, agrupados em 5 páginas de duas páginas dispostas como os pontos nas cinco faces de um dado, por exemplo:

[0 | 1] [2 | 3]
`` [4 | 5]
[6 | 7] [8 | 9]

agora há um alto nível para pegar esses e colocá-los em um conjunto de centenas.

O que quero dizer é que posso ter a chance de fazer isso e muito mais com o pdf.js, mas primeiro preciso exibir duas páginas.

👍

@timvandermeij Obrigado por sua atualização. Eu também espero ver uma versão beta disso funcionando!

O que devo fazer para que você adicione esse recurso? O QUE?

A próxima etapa é ajudar a adicionar testes de integração automatizados: # 6505

É "um bom bug para iniciantes, pois não requer muito conhecimento da base de código PDF.js para trabalhar. Talvez contribuidores de outros projetos JS tenham experiência com testes de integração para nos ajudar com isso. O primeiro passo será escolher e adicionar a estrutura de teste de integração. "

Existe algum motivo para esse recurso ser implementado no próprio pdf.js? Implementá-lo em um aplicativo leitor baseado em pdf.js é trivial e não corre o risco de bagunçar o renderizador. Deixe que o pdf.js lide com páginas únicas como costuma fazer, use dois (ou mais, se necessário) elementos de tela em qualquer geometria desejada e dispare.

Uma demonstração simplista não demorou mais do que alguns minutos para ser escrita, com base no exemplo anterior / próximo do pdf.js:

https://jsfiddle.net/Yetangitu/1egqfefu/4/

Navegue usando os botões ou clicando nas páginas esquerda / direita ...

@tfer, aqui está o seu visualizador do 'modo Ludicrous': https://jsfiddle.net/Yetangitu/ht04sp3b/

(aumentar o fator de escala, exibir no grande monitor, lucro!)

Pelo que posso ver, não há necessidade de pds.js para suportar renderização de várias páginas, isso pode ser tratado de forma adequada em um nível superior.

@yurydelendik de que forma essa solução é confusa? Estou usando para construir um visualizador de PDF para Nextcloud / Owncloud, ele funciona bem.

image

image

image

de que forma esta solução é confusa?

Não cabe em nosso visualizador de demonstração.

https://jsfiddle.net/Yetangitu/1egqfefu/4/

@Yetangitu Escrever visualizador personalizado com exibição de página dupla com base em nossos exemplos está perfeitamente bem para mim, mas não é um PR que podemos aceitar. Podemos encerrar esse problema informando que a solução proposta acima abordou esse problema? Caso contrário, explique / mostre como seu código pode ser aplicado ao visualizador de demonstração.

Por favor, não feche este problema! Inúmeros outros problemas foram abertos e fechados com uma solução que não aborda o problema central: o PDFjs precisa urgentemente de um método integrado para visualização de 2 páginas. Muitos PDFs, como artigos de periódicos, manuais, etc., ficam bem na exibição de uma página. Mas TODOS OS LIVROS, desde Gutenberg, são projetados para serem vistos como layouts LR. Estou usando o PR # 3723 de @Snuffleupagus em um site de produção e, embora funcione bem por enquanto, merece ser desenvolvido ainda mais.

@yurydelendik não era para ser uma solução completa, apenas como uma dica para aquelas pessoas que procuram por um visualizador de PDF JS com capacidade de propagação há muitos anos. Ele poderia ser integrado ao visualizador de demonstração, mas exigiria um pouco de trabalho. Uma vez que o visualizador que estou construindo deve parecer e agir (ou seja, página horizontalmente, parecer tão 'semelhante a um livro' quanto possível, etc) como o visualizador EPUB que criei anteriormente, é bastante diferente do visualizador de demonstração, então não é uma simples questão de patchear os bits com capacidade de propagação.

Acho que esse tipo de funcionalidade pertence a um aplicativo de visualização, não à biblioteca básica de decodificação / renderização de PDF, que é o pdf.js, daí minha reação a esse problema do pdf.js.

Vou lançar a versão compatível com PDF do Reader em alguns dias para aqueles que quiserem experimentar o conceito. Como o Reader é um aplicativo Nextcloud / Owncloud, você precisará ter um desses à mão em algum lugar ...

@yurydelendik qual é o link para o seu visualizador EPUB. Seria ótimo se houvesse uma biblioteca JS simples que pudesse ser incluída por padrão para ajudar a tornar mais fácil para as pessoas apenas visualizar o EPUB como atualmente visualizam os PDFs. Talvez este seja um novo problema (ou novo projeto).

É 2018 e isso já existe há 7 anos. Uau! Alguma atualização / cronograma sobre isso ainda?

A solicitação pull acima do seu comentário implementa isso. Qualquer pessoa é bem-vinda para nos ajudar a testá-lo para garantir que nada quebre.

Para sua informação, o aplicativo Reader para Nextcloud e Owncloud agora suporta PDF, incluindo o modo de 2 páginas (propagação) que mencionei. Ele pode ser encontrado no Github:

https://github.com/Yetangitu/owncloud-apps/tree/master/files_reader

e no repositório de aplicativos Nextcloud:

https://apps.nextcloud.com/apps/files_reader

Em breve, ele também aparecerá no repositório Owncloud.

image

A solicitação pull acima do seu comentário implementa isso. Qualquer pessoa é bem-vinda para nos ajudar a testá-lo para garantir que nada quebre.

Ansioso para testar, o que você precisa? Existe algum blob binário ou SW compilado que possamos testar? Por que não testá-lo por meio do ciclo mestre beta noturno?

Para sua informação, o aplicativo Reader para Nextcloud e Owncloud agora oferece suporte a PDF

Legal, agora só precisamos descobrir como executar isso como um visualizador autônomo. Sumatra também pode visualizar 2 páginas, mas não possui renderização de subpixel. O FF tem renderização de subpixel, mas nenhuma visualização padrão de 2 páginas. Portanto, atualmente não há nenhum visualizador de PDF de código aberto utilizável no Windows: /

Você pode testá-lo usando a versão de visualização em http://54.67.70.0 : 8877 / 5e5412c2765c9bd / web / viewer.html. Consulte # 9208 para obter mais informações.

Você pode testá-lo usando a versão de visualização em http://54.67.70.0 : 8877 / 5e5412c2765c9bd / web / viewer.html.

Incrível, obrigado. Para testá-lo, é necessário selecionar "Grid Scrolling" e diminuir o zoom para 100%. Resultados:

  1. Configurações: as configurações de rolagem em grade e Mostrar barra lateral são lembradas ao abrir um novo PDF, no entanto, o nível de zoom não é lembrado (sempre padronizando para zoom automático ao abrir um novo PDF, mas isso também acontece com o pdf.js padrão)
  2. Desempenho: testado com alguns PDFs com muito texto e imagens grandes. Parece ter o mesmo desempenho do pdf.js padrão, no entanto, o pdf.js padrão é mais lento que, por exemplo, o leitor de pdf foxit em muitos casos, porque não há páginas suficientes para "ler adiante". Isso significa que a roda de carregamento fica brevemente visível ao rolar rapidamente. Além disso, as páginas já lidas não são "lembradas" na RAM. Rolar para cima novamente mostra a roda de carregamento novamente. Mas, como disse, esse parece ser um problema do padrão geral pdf.js.
  3. Compatibilidade: tamanhos não A4 testados, um PDF com tamanhos de páginas diferentes. Em um PDF não padrão, faltava uma imagem de cabeçalho, mas isso também acontecia com o pdf.js. padrão
  4. Técnico: como com meu FF padrão, tudo funciona (renderização de fonte subpixel, aceleração de hardware ...). Também trabalhando: PDF / A e PDFs com ações Javascript. Os PDFs com elementos de entrada de texto não funcionam, mas, novamente, também não funcionam com o pdf.js padrão ("o PDF contém dados de formulário. A edição de fóruns não é suportada").
  5. Estresse: testei 50 PDFs e alguns torturaram com milhares de páginas.

Talvez eu a nomeasse de maneira diferente (por exemplo, "Visualização de várias páginas", mas não sou um falante nativo. Só não percebi diretamente o que essa configuração faz).

Conclusão: a versão de rolagem em grade está funcionando exatamente como o pdf.js. Existem alguns problemas com o pdf.js em geral que poderiam ser melhorados, mas nada relacionado ao PR de rolagem da grade. A versão de rolagem da grade é absolutamente excelente, seria simplesmente fantástico se a "barra de cabeçalho" se ocultasse automaticamente. No visualizador de PDF do Chrome, esta barra só é exibida por alguns segundos quando o mouse se move ou a tela é tocada. Além disso, já estou pensando em como usar essa versão de rolagem em grade como meu leitor de PDF padrão, até que esteja disponível no FF estável;)

Para aqueles que procuram um hack rápido e limpo, basta adicionar um pouco de magia css em (viewer.html):

<style>
#viewer {
  margin-left:20px;
}
div.page {
  float:left;
}
</style>

Definir o zoom em cerca de 75% (= visualização de duas páginas na minha tela de 1440x900)

Existe algum motivo para esse recurso ser implementado no próprio pdf.js? Implementá-lo em um aplicativo leitor baseado em pdf.js é trivial e não corre o risco de bagunçar o renderizador.

Sim, concordo, não preciso estar no código pdf.js ...

Para aqueles que procuram um hack rápido e limpo, basta adicionar um pouco de magia css em (viewer.html) ...

Obrigado pela solução.

Para resumir, alguém poderia escrever uma extensão que injete a workaroud de

obrigado

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

smit-modi picture smit-modi  ·  3Comentários

hp011235 picture hp011235  ·  4Comentários

sujit-baniya picture sujit-baniya  ·  3Comentários

brandonros picture brandonros  ·  3Comentários

azetutu picture azetutu  ·  4Comentários