Se você deseja processar o PDF gerado, você pode lê-lo para uma variável: você pode especificar todas as opções wkhtmltopdf. Você pode escolher o nome da opção. Se opção sem valor, use Nenhum, Falso ou para o valor dict. Para opções repetitivas (incluindo permissão, cookie, custom-header, post, postfile, run-script, replace) você pode usar uma lista ou uma tupla. Com a opção que precisa de múltiplos valores (por exemplo - segredo de autorização de cabeçalho-cabeçalho), podemos usar uma 2-tupla (veja o exemplo abaixo). Por padrão, o PDFKit mostrará todos os resultados wkhtmltopdf. Se você não quiser, você precisa passar na opção silenciosa: devido à sintaxe do comando wkhtmltopdf, as opções TOC e Cover devem ser especificadas separadamente. Se você precisar de cobertura antes do TOC, use a opção coverfirst: você pode especificar arquivos CSS externos ao converter arquivos ou strings usando a opção css. Aviso Esta é uma solução alternativa para este erro em wkhtmltopdf. Você deve experimentar a opção --user-style-sheet primeiro. Você também pode passar todas as opções através de meta tags em seu HTML: cada chamada de API requer um paramater de configuração opcional. Esta deve ser uma instância de chamada de API de pdfkit. configuration (). Demora as opções de configuração como parâmetros iniciais. As opções disponíveis são: wkhtmltopdf - a localização do binário wkhtmltopdf. Por padrão, o pdfkit tentará localizar isso usando quais (em sistemas de tipo UNIX) ou onde (no Windows). Metatagprefix - o prefixo para meta tags específicas de pdf - por padrão, isso é pdfkit - Exemplo - para quando wkhtmltopdf não está em PATH: IOError: Nenhum executável wkhtmltopdf encontrado: Certifique-se de que você tenha wkhtmltopdf em seu PATH ou configurado por meio de configuração personalizada (consulte o anterior seção). Onde wkhtmltopdf no Windows ou que wkhtmltopdf no Linux deve retornar o caminho real para o binário. IOError: Comando falhado Este erro significa que o PDFKit não conseguiu processar uma entrada. Você pode tentar executar diretamente um comando a partir de uma mensagem de erro e ver o erro causado falha (em algumas versões wkhtmltopdf isso pode ser causado por falhas de segmentação) Salvando o PDF gerado no disco. Configurar o cabeçalho PDFKit-save-pdf fará com que o PDFKit escreva O. pdf gerado para o arquivo indicado pelo valor do cabeçalho. Isso fará com que o. pdf seja salvo no pathtosaved. pdf além de ser enviado de volta para o cliente. Se o caminho não for válido, a escrita falhará silenciosamente. O cabeçalho PDFKit-save-pdf nunca é enviado de volta para o cliente. Problema de thread único: em ambientes de desenvolvimento, é comum executar um processo de servidor único. Isso pode causar problemas ao renderizar seu pdf requer wkhtmltopdf para acessar seu servidor novamente (para imagens, js, css). Isso ocorre porque as solicitações de recursos serão bloqueadas pelo pedido inicial e a solicitação inicial aguardará as solicitações de recursos causando um impasse. Isso geralmente não é um problema em um ambiente de produção. Para contornar este problema, você pode querer executar um servidor com vários funcionários como Passenger ou tentar incorporar seus recursos dentro do seu HTML para evitar solicitações HTTP adicionais. Exemplo de solução (rails bundler), adicione unicórnio ao grupo de desenvolvimento em seu Gemfile gem unicorn e execute o pacote. Em seguida, adicione um arquivo configunicorn. conf com Então para executar o aplicativo unicornrails - c configunicorn. conf (de railsroot) Os recursos não estão incluídos no PDF: Imagens, CSS ou JavaScript não parecem estar sendo baixados corretamente no PDF. Isso se deve ao fato de que wkhtmltopdf não sabe onde encontrar esses arquivos. Certifique-se de que está usando caminhos absolutos (começar com barra inclinada) para seus recursos. Se você estiver usando o PDFKit para gerar PDFs de uma fonte HTML bruta, certifique-se de usar caminhos completos (caminhos de arquivos ou URLs, incluindo o domínio). Em ambientes de servidor restritivos, a configuração do rooturl pode ser o que você está procurando para alterar seu host de recursos. Saída Mangled no navegador: Certifique-se de que seus cabeçalhos de resposta HTTP especifiquem Content-Type: applicationpdf Nota sobre PatchesPull Requests Fork the project. Configure o seu ambiente de desenvolvimento com: instalação do pacote do pacote de instalação gem install Crie a adição de características ou a correção de bugs. Adicione testes para isso. Isso é importante para que eu não quebre isso em uma versão futura sem querer. Cometer, não mexa com rakefile, versão ou histórico. (Se você quiser ter sua própria versão, isso é bom, mas a versão de colisão em um commit por si só posso ignorar quando eu puxo) Envie-me uma solicitação de puxar. Pontos de bônus para as agências do tópico. Copyright (c) 2010 Jared Pace. Veja LICENÇA para obter detalhes. Recurso Depois de ler ao redor, pareceu-me que o Camarão está fora e o wkhtmltop está dentro. Parece também que o PDFKit e as gemas wickedpdf para Rails são o novo legal. Então eu encontrei um screencast de Ryan sobre como usar o PDFKit. Eu instalei tudo, testou wkhtmltopdf na CLI sem problemas, mexei com as configurações do Rails para executar vários processos para que o pipeline de ativos funcione, e tudo pareceu bom, exceto que estou ainda preso no final do processo (na verdade, obtendo a resposta do PDF de o servidor). Quando eu solicitar uma versão. pdf da minha visão (Im usando a opção PDFKit Middleware), meu navegador fica sentado à espera de uma resposta, mas, assim que eu mato o processo Rails, o PDF que eu esperava obter só então aparece no meu navegador janela. O que dá O que estou usando OS: OSX 10.8.1 Rails: 3.2.8 Ruby: 1.9.3 wkhtmltopdf: 0.11.0rc1 (embora quando eu executo wkhtmltopdf - V diz 0.10.0rc2) qt: 4.8.2 O que Ive Done usou o PDFKit middleware carregando config. middleware. use PDFKit :: Middleware no meu arquivo application. rb. Incluí gem pdfkit no meu Gemfile e instalou-o com o Bundler, configure o. pdf mime-type no meu inicializador mimetypes. rb com Mime :: Type. registeralias applicationpdf. Pdf adicionou config. threadsafe para configenvironmentsdevelopment. rb para vários tópicos, portanto, o fluxo de ativos não entra em conflito com o PDF engine testado wkhtmltopdf google google. pdf e gerou um PDF da página inicial do Google conforme esperado tentou trocar PDFKit por wickedpdf e encontrou o mesmo problema (pendurado, Mas quando o processo Rails é morto, o PDF é executado conforme o esperado) O que parece Esta é a página html regular renderizada por Rails (Ive borrou os detalhes do cliente): Esta é a saída da CLI por Rails quando eu tento navegar para localhost: 3000somepath. Pdf. (O aplicativo trava enquanto aguarda uma resposta): Quando eu finalmente matar o processo Rails com o ctrl-c, o PDF finalmente aparece no navegador como eu esperava ver (CSS e HTML renderizados corretamente, então os recursos parecem carregar bem) : Conclusões Então, o Swacking PDFKit para wickedpdf e obter os mesmos resultados parece me fazer pensar que o problema não é com essas bibliotecas, mas algo a ver com o meu ambiente de desenvolvimento. Mas wkhtmltopdf corre bem fora da linha de comando, de modo que me faz pensar que ele e QT estão fazendo seu trabalho. O problema deve estar no Rails. Talvez eu não esteja configurando algo corretamente Prazo para ajudar Como eu determinar o problema exatamente e como posso corrigi-lo. Eu o amarei se você puder me ajudar. Ele também tentou usar um método alternativo para tornar o PDF (com. topdf) sem A opção de middleware da seguinte maneira (fazendo isso eu comentei config. middleware. use PDFKit :: Middleware do meu arquivo application. rb): os mesmos sintomas, mas usando o WickedPdf atualmente. Neste ponto, acredito que a questão reside também no wkhtmltopdf. Infelizmente, nenhuma das recomendações que consegui encontrar no StackGoogle funcionou para mim. Em vez disso, eu precisava combinar várias sugestões, incluindo algumas encontradas nesta publicação. Brew desinstale wkhtmltopdf encontre e exclua todas as cópias do wkhtmltopdf no usrbin comment WickedPdf. config line in configinitializers add config. threadsafe to development. rb remove middleware e permite mostrar ação do controlador principal para lidar com as solicitações de pdf (talvez não seja necessário) add wkhtmltopdf-binary Para gemfile bundle reiniciar o servidor Você também pode precisar adicionar Mime :: Type. registeralias applicationpdf. Pdf para configinitializersmimetypes. rb (para mim, isso causa aviso: PDF inicialmente inicializado constante) Minha configuração foi: Mac OSX Mountain Lion with Rails 3.2.1, Webrick, Postgres e wkhtmltopdf-binário (0.9.9.1). Respondeu Apr 3 13 às 23:08 Tente editar configinitializerpdfkit. rb da seguinte maneira: respondido 29 de maio 14 às 12:15 Sua resposta 2017 Stack Exchange, Incwkhtmltopdf 0.10.0 rc2 Manual Este arquivo documenta wkhtmltopdf, um programa capaz de converter documentos html Em documentos PDF. Se você tiver problemas ou deseja solicitar novos recursos, visite o código. googlepwkhtmltopdfissueslist. Se você tiver algum problema ou comentário, sinta-se à vontade para me contatar: veja madalgo. au. dk Funcionalidade reduzida Algumas versões do wkhtmltopdf são compiladas contra uma versão do QT sem os patches wkhtmltopdf. Essas versões estão faltando alguns recursos, você pode descobrir se sua versão do wkhtmltopdf é uma dessas executando wkhtmltopdf --version se a sua versão for contra um QT não pisado, você pode usar a versão estática para obter todas as funcionalidades. Atualmente, a lista de recursos suportados apenas com patch QT inclui: Imprimir mais de um documento HTML em um arquivo PDF. Correndo sem um servidor X11. Adicionando um esboço de documento ao arquivo PDF. Adicionando cabeçalhos e rodapés ao arquivo PDF. Gerando uma tabela de conteúdos. Adicionando links no arquivo PDF gerado. Impressão usando o tipo de mídia da tela. Desativando o recurso de psiquiatra inteligente do webkit. Copyright (C) 2010 wkhtmltopdfwkhtmltoimage Autores. Licença GPLv3: GNU GPL versão 3 ou posterior gnu. orglicensesgpl. html. Este é um software livre: você é livre para mudar e redistribuí-lo. NENHUMA GARANTIA, na medida permitida por lei. Escrito por Jan Habermann, Christian Sciberras e Jakob Truelsen. Patches de Mehdi Abbad, Lyes Amazouz, Pascal Bach, Emmanuel Bouthenot, Benoit Garret e Mrio Silva. Objetos de documento wkhtmltopdf é capaz de colocar vários objetos no arquivo de saída, um objeto é uma página única, uma página da capa ou uma tabela de conteúdo. Os objetos são colocados no documento de saída na ordem em que são especificados na linha de comando, as opções podem ser especificadas por objeto ou na área de opções globais. As opções da seção Opções Globais só podem ser colocadas na área de opções globais. Um objeto de página coloca o conteúdo de uma página da web de singe no documento de saída. As opções para o objeto da página podem ser colocadas nas opções globais e nas áreas de opções da página. As opções aplicáveis podem ser encontradas nas seções Opções de página e cabeçalho e rodapé. Os objetos de capa colocam o conteúdo de uma página da web em um documento de saída, a página não aparece na tabela de conteúdo e não tem cabeçalhos e rodapés. Todas as opções que podem ser especificadas para um objeto de página também podem ser especificadas para uma capa. Uma tabela de objeto de conteúdo insere uma tabela de conteúdo no documento de saída. Todas as opções que podem ser especificadas para um objeto de página também podem ser especificadas para um toc, além disso, as opções da seção TOC Options também podem ser aplicadas. A tabela de conteúdo é gerada via XSLT, o que significa que ela pode ser desenhada para olhar, no entanto, você quer que ela veja. Para obter um assessor de como fazer isso, você pode despejar o documento xslt padrão, fornecendo o --dump-default-toc-xsl, e o esboço em que ele funciona, fornecendo --dump-outline, veja a seção Outline Options. Opções de estrutura de opções globais Opções de página Opções de cabeçalho e rodapé Opções de TOC Os itens marcados estão disponíveis apenas usando o QT com patch. Especificando um Proxy Por padrão, as informações do proxy serão lidas das variáveis de ambiente: proxy, allproxy e httpproxy, as opções de proxy também podem ser especificadas com a opção - p. Aqui estão alguns exemplos (Caso você não esteja familiarizado com o BNF): rodapés e cabeçalho Os cabeçalhos e rodapés podem ser adicionados ao documento pelos argumentos --header e shooter respeitosamente. Na cadeia de texto de cabeçalho e rodapé fornecida para e. --header-left, as seguintes variáveis serão substituídas. Como um exemplo que especifica --header-right quotPage página de toPagequot, resultará no texto quotPage x de yquot onde x é o número da página atual e y é o número da última página, para aparecer no canto superior esquerdo em o documento. Os cabeçalhos e rodapés também podem ser fornecidos com documentos HTML. Como exemplo, pode-se especificar --header-html header. html e use o seguinte conteúdo em header. html: como pode ser visto a partir do exemplo, os argumentos são enviados para os documentos html do headerfooter em get fashion. Wkhtmltopdf com qt corrigido tem suporte para contornos de PDF também conhecidos como marcas de livros, isso pode ser ativado especificando a opção --outline. Os contornos são gerados com base nas tags lthgt, para uma descrição detalhada de como isso é feito, veja a seção Tabela de Concurso. A árvore de estrutura de tópicos às vezes pode ser muito profunda, se as tags lthgt se espalham para generosas no documento HTML. O parâmetro --outline-depth pode ser usado para encadear isso. Tabela de Conteúdo Uma tabela de conteúdo pode ser adicionada ao documento adicionando um objeto toc à linha de comando. Por exemplo: A tabela de conteúdo é gerada com base nas tags H nos documentos de entrada. Primeiro, um documento XML é gerado, então é convertido em HTML usando o XSLT. O documento XML gerado pode ser visualizado impelindo-o para um arquivo usando a opção --dump-outline. Por exemplo: O documento XSLT pode ser especificado usando a opção --xsl-style-sheet switch. Por exemplo: O parâmetro --dump-default-toc-xsl pode ser usado para despejar a folha de estilo XSLT padrão para stdout. Este é um bom começo para escrever sua própria folha de estilo O documento XML está no espaço de nome quotcode. googlepwkhtmltopdfoutlinequot tem um nó da raiz chamado quotoutlinequot que contém uma série de nós quotitemquot. Um item pode conter qualquer número de item. Estas são as subseções de tópicos para a seção que o item representa. Um nó de item possui os seguintes atributos: quottitlequot o nome da seção. Quotpagequot o número da página em que a seção ocorre. Quotlinkquot um URL que liga para a seção. QuotbackLinkquot o nome da âncora em que a seção irá retornar. As opções de TOC restantes apenas afetam a folha de estilo padrão para que elas não funcionem ao especificar uma folha de estilo personalizada. Page Breaking O algoritmo de quebra de página atual do WebKit deixa muito a desejar. Basicamente, o webkit irá renderizar tudo em uma página longa e depois cortá-lo em páginas. Isso significa que, se você tiver duas colunas de texto onde uma é verticalmente deslocada por meia linha. Em seguida, o webkit irá cortar uma linha em peças exibir a metade superior em uma página. E a metade inferior em outra página. Também irá quebrar a imagem em dois e assim por diante. Se você estiver usando a versão corrigida do QT, você pode usar a propriedade CSS-break-inside para remediar isso um pouco. Não há uma solução fácil para este problema, até que isso seja resolvido, tente organizar seus documentos HTML, de modo que ele contenha muitas linhas nas quais as páginas podem ser cortadas de forma limpa. Tamanhos de página O tamanho de página padrão do documento processado é A4, mas usando esta opção --página-size, isso pode ser alterado para quase qualquer outra coisa, como: A3, Letter e Legal. Para obter uma lista completa de tamanhos de páginas suportados, consulte doc. trolltech4.6qprinter. htmlPageSize-enum. Para um controle mais fino sobre o tamanho da página, as opções --page-height e --page-width podem ser usadas. Leitura de argumentos de stdin. Se você precisa converter muitas páginas em um lote, e achando que wkhtmltopdf é um Bit para retardar a inicialização, então você deve tentar --read-args-from-stdin, Quando --read-args-from-stdin cada linha de entrada enviada para wkhtmltopdf no stdin atuará como uma invocação separada de wkhtmltopdf, com Os argumentos especificados na linha dada combinados com os argumentos dados a wkhtmltopdf. Por exemplo, um poderia fazer o seguinte: Versão estática No site wkhtmltopdf você pode baixar uma versão estática do wkhtmltopdf code. googlepwkhtmltopdfdownloadslist. Este binário estático funcionará na maioria dos sistemas e vem com uma compilação em QT com patch. Infelizmente, o binário estático não é particularmente estático, no Linux depende tanto do glibc como do openssl, além disso você precisará ter um servidor x instalado, mas não necessário executar. Você precisará ter diferentes fontes instaladas, incluindo xfonts-escalável (Type1) e msttcorefonts. Veja code. googlepwkhtmltopdfwikistatic para problemas de grito. Compilação Pode acontecer que o binário estático não funcione para o seu sistema por um motivo ou outro, nesse caso, você precisará compilar wkhtmltopdf. Antes da compilação, você precisará instalar dependências: X11, gcc, git e openssl. No DebianUbuntu, isso pode ser feito da seguinte maneira: em outros sistemas você deve usar seu próprio gerenciador de pacotes, os pacotes podem ser nomeados de forma diferente. Primeiro, você deve verificar a versão modificada do QT. Em seguida, você deve configurar, compilar e instalar o QT, observe que isso levará bastante tempo, dependendo de quais argumentos você usa para configurar qt. Tudo o que é necessário agora é compilar wkhtmltopdf. Você mostra agora um binário chamado wkhtmltopdf na pasta atual que você pode usar, você pode, opcionalmente, instalá-lo executando outros sistemas operacionais e recursos avançados. Se você quiser mais detalhes ou quiser compilar em outros sistemas operacionais, então, GNULinux, por favor seecode. googlepwkhtmltopdfwikicompilation . Instalação Existem várias maneiras de instalar wkhtmltopdf. Você pode baixar um binário já compilado, ou você pode compilar wkhtmltopdf você mesmo. No Windows, a maneira mais fácil de instalar o wkhtmltopdf é baixar o instalador mais recente. No Linux, você pode baixar o binário estático mais recente, no entanto, você ainda precisa instalar alguns outros softwares, para saber mais sobre isso, leia a seção de versão estática do manual. Esta seção apresenta uma série de exemplos de como invocar wkhtmltopdf. Para converter um arquivo HTML remoto em PDF: Para converter um arquivo HTML local em PDF: Você também pode converter para arquivos PS se desejar: Produza o arquivo de amostra eler2.pdf: Imprimindo um livro com uma tabela de conteúdo:
No comments:
Post a Comment