Quero mostrar aos meus usuários arquivos PDF. A razão pela qual eu uso o cgi para mostrar o pdf é que desejo rastrear os cliques do pdf e esconder a localização real do pdf salvo.
Eu estive pesquisando na Internet e só encontrei como mostrar a caixa de diálogo Salvar para os usuários e criar um pdf, não mostrar os arquivos para os usuários.
O que eu queria era mostrar aos usuários meus arquivos PDF, não criando ou baixando o PDF. Aqui está o que eu consegui na documentação oficial do php:
<?php
header('Content-type: application/pdf');
readfile('the.pdf');
?>
Também meu código perl do resultado da pesquisa no google:
open(PDF, "the.pdf") or die "could not open PDF [$!]";
binmode PDF;
my $output = do { local $/; <PDF> };
close (PDF);
print "Content-Type: application/pdf\n";
print "Content-Length: " .length($output) . "\n\n";
print $output
se você fizer isso em rubi, por favor, diga-me. Mas não tenho certeza se meu servidor suporta trilhos.
Desculpe se meu código está muito longe do método para mostrar o pdf, pois não sei nada sobre processamento de pdf e como implementar esse problema.
Vamos supor que os usuários tenham o plug-in do Adobe Reader. Então, como resolver meu problema?
editar : eu quero mostrar arquivo pdf simples. Meu objetivo principal: rastrear meus arquivos PDF e usar alguns URLs sofisticados.
edit : Aqui está o meu código php principal:
<?php
$file='/files/the.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="the.pdf"');
@readfile($file);
?>
edit : Agora o código está funcionando. Mas a barra de progresso do carregamento (no plugin Adobe Reader X) não aparece. Por quê? Alguém pode me ajudar? Aqui está o meu código principal:
<?php
$file='./files/the.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="the.pdf"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
@readfile($file);
?>
edit : Todos os meus problemas resolvidos. Aqui está o código final:
<?php
$file = './path/to/the.pdf';
$filename = 'Custom file name for the.pdf'; /* Note: Always use .pdf at the end. */
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Accept-Ranges: bytes');
@readfile($file);
?>
Obrigado! :)
Respostas:
Suponho que você queira que o PDF seja exibido no navegador, em vez de forçar um download. Se for esse o caso, tente definir o
Content-Disposition
cabeçalho com um valor deinline
.Lembre-se também de que isso também será afetado pelas configurações do navegador - alguns navegadores podem estar configurados para sempre baixar arquivos PDF ou abri-los em um aplicativo diferente (por exemplo, Adobe Reader)
fonte
Testado e funciona bem. Se você deseja fazer o download do arquivo, substitua
com
fonte
Você pode modificar um renderizador de PDF, como xpdf ou evince, para renderizar em uma imagem gráfica no servidor e, em seguida, entregar a imagem ao usuário. É assim que a visualização rápida do Google dos arquivos PDF funciona, eles o renderizam localmente e depois entregam imagens ao usuário. Nenhum arquivo PDF baixado e a fonte está muito bem obscurecida. :)
fonte
A maneira mais segura de exibir um PDF em vez de fazer o download parece incorporá-lo usando um elemento
object
ouiframe
. Também existem soluções de terceiros, como o visualizador de PDF do Google.Consulte Melhor maneira de incorporar PDF em HTML para obter uma visão geral.
Há também o DoPDF , um visualizador de PDF no navegador baseado em Java. Não posso falar da sua qualidade, mas parece interessante.
fonte
Você também pode usar a classe fpdf disponível em: http://www.fpdf.org . Oferece opções para saída em um arquivo e exibição no navegador.
fonte