Monday 27 November 2017

Pdfkit Wkhtmltopdf Binære Alternativer


Bakgrunn Etter å ha lest rundt, virket det meg at reken er ute og wkhtmltopdf er inne. Det virker også som PDFKit og wickedpdf edelstener for Rails er den nye kule. Så jeg fant en screencast av Ryan om hvordan du bruker PDFKit. Jeg installerte alt, testet wkhtmltopdf på CLI uten problemer, fiddled rundt med Rails settingo å kjøre flere prosesser, slik at ressursrørledningen fungerer, og alt virket bra, bortsett fra at jeg fortsatt sitter fast i slutten av prosessen (faktisk får PDF-svaret fra serveren). Når jeg ber om en. pdf-versjon av visningen min (jeg bruker alternativet PDFKit Middleware), setter nettleseren min bare på det, og venter på svar, men så snart jeg dreper Rails-prosessen, vil PDF-filen jeg forventet å få, bare dukker opp i nettleseren min vindu. Hva gir det jeg bruker OS: OSX 10.8.1 Rails: 3.2.8 Ruby: 1.9.3 wkhtmltopdf: 0.11.0rc1 (selv om jeg kjører wkhtmltopdf - V det står 0.10.0rc2) qt: 4.8.2 Hva Ive Done brukte PDFKit middleware ved å laste config. middleware. use PDFKit :: Middleware i min application. rb-fil. inkludert perlen pdfkit i min Gemfile og installert den med Bundler sett. pdf mime-typen i min mimetypes. rb initializer med Mime :: Type. registeralias applicationpdf. pdf lagt til config. threadsafe til configenvironmentsdevelopment. rb for flere tråder, så aktivitetsrørledning ikke konflikt med PDF-motor testet wkhtmltopdf google google. pdf og det genererte en PDF-fil av Googles hjemmeside som forventet prøvd bytte PDFKit for wickedpdf og opplevde det samme problemet (hengende, men når Rails-prosessen blir drept, gjør PDF-filen som forventet) Det ser ut som dette Dette er den vanlige HTML-siden gjengitt av Rails (Ive sløret klientens detaljer): Dette er CLI-utgangen av Rails når jeg prøver å navigere til localhost: 3000somepath. pdf. (appen henger mens du venter på svar): Når jeg endelig dreper Rails-prosessen med ctrl-c, vises PDF-en til slutt i nettleseren som jeg forventet å se den (CSS og HTML gjengitt riktig, slik at eiendeler ser ut til å bli bra) : Konklusjoner Så langt bytte PDFKit for wickedpdf og få de samme resultatene synes å få meg til å tro at problemet ikke er med de bibliotekene, men noe å gjøre med utviklingsmiljøet mitt. Men wkhtmltopdf kjører fint av kommandolinjen, så det får meg til å tro at det og QT gjør jobben sin. Problemet må være i Rails. Kanskje jeg ikke konfigurerer noe riktig Angrep for hjelp Hvordan bestemmer jeg nøyaktig hva problemet er og hvordan gjør jeg det? Jeg elsker deg hvis du kan hjelpe meg lt3 Jeg har også prøvd å bruke en alternativ metode for å gjøre PDF-filen (med. topdf) uten Middleware-alternativet som følger (gjør dette jeg kommenterte config. middleware. use PDFKit :: Middleware fra min application. rb-fil): Nøyaktig samme symptomer, men bruk WickedPdf for øyeblikket. På dette punktet tror jeg at problemet ligger med wkhtmltopdf også. Dessverre har ingen av anbefalingene jeg har funnet i StackGoogle, jobbet for meg. I stedet måtte jeg kombinere flere forslag, inkludert noen som ble funnet i dette innlegget. bryg avinstallere wkhtmltopdf finn og slett eventuelle kopier av wkhtmltopdf i usrbin kommentare WickedPdf. config linje i configinitializers legg config. threadsafe til development. rb fjern middleware og tillat show handling av hovedkontroller å håndtere pdf forespørsler (kanskje ikke nødvendig) legg wkhtmltopdf-binær å gemfile bundle restart server Du må kanskje også legge til Mime :: Type. registeralias applicationpdf. pdf til configinitializersmimetypes. rb (for meg forårsaker dette advarsel: allerede initialisert konstant PDF) Min oppsett var: Mac OSX Mountain Lion med Rails 3.2.1, Webrick, Postgres og wkhtmltopdf-binær (0.9.9.1). besvart apr 3 13 kl 23:08 Prøv å redigere configinitializerpdfkit. rb på følgende måte: besvart 29. mai kl 14:15 Ditt svar 2017 Stack Exchange, Inc Dette er et kjent problem i wkhtmltopdf. Sidebrytningsalgoritmen som brukes av webkit (WK i WKhtmltopdf) virker ikke bra for store tabeller. Jeg foreslår at du bryter bordet ned til mindre biter som er enklere å dele på sider og bruker css mye: Ta også en titt på de følgende wkhtmltopdf-problemene, de har interessante kommentarer som diskuterer for eksempel tabelloppdelingproblemet. Det er en JS-løsning som splitter programmert tabeller på 168 som kan hjelpe deg (jeg bruker det ikke). Oppdatering 08.11.2013 Det er mye diskusjon om dette i problem 168 knyttet ovenfor. Noen har klart å kompilere en versjon av wkhtmltopdf som støtter bedre bordbrudd, men dessverre virker det som det ikke er offisielt utgitt og kan inneholde andre feil. Jeg vet ikke hvordan jeg får det, og jeg vet ikke hvordan jeg skal kompilere på Windows, men alle interesserte kan sjekke for eksempel kommentaren her (se ny oppdatering nedenfor). Oppdatering 24.02.2014 Du vil gjerne høre at i wkhtmltopdf 0.12 har denne funksjonen blant annet blitt betydelig forbedret. Men vent på 0.12.1 og test grundig før du begynner å bruke en ny versjon, det er fortsatt litt ustabil, selv om de nye gutta som arbeider med antialiser, gjør en god jobb (ashkulz rocks). Fortsett å bli oppdatert på wkhtmltopdf. org og github. Google-kodesettet er foreldet og blir langsomt migrert. besvart 23. november kl 9:01 takk jeg hadde dette problemet også, men gaffelen du nevnte jobbet for meg. ndash fey Jan 27 14 kl 14:08 Takk for informasjonen. Versjon 0.12.1 løser sidebrytingsproblemet. ndash Nidhi Sarvaiya Feb 25 14 kl 19:16 Merk, denne løsningen fungerer bare med den siste 0.12.1-versjonen. Alt tidligere jobber fortsatt ikke. ndash Cerin Nov 3 14 kl 23:14 Jeg kjempet med dette for et par dager. Viste seg at mitt bord var i en div med en skjermstil: inline-block. Endret det for å blokkere, og med endringer over det hele begynte å jobbe ndash Hugh Jan 29 16 kl 10:55 Det er gammelt innlegg, men siden jeg var å kaste bort mye tid på å prøve å finne riktig løsning, vil jeg sette den her, kanskje det vil være nyttig for noen. Så fra det jeg leser, er problemet med at det ikke virker. Men faktisk hvis du setter det på elementet som har skjerm: blokk fungerer det som forventet (som nevnt et sted i SO). så for enkel struktur av bordet css med og bord struktur vil fungere som forventet. Jeg hadde litt mer komplisert sak med radspans, så løsningen fra oven var å bryte den til peaces, som ikke var ønsket effekt. Jeg løst det ved hjelp av divs for hvert radspanet sett med linjer. Min jquery js gjør all jobben: Jeg vet ikke om alt er nødvendig, og jeg tror ikke det er perfekt, men det gjør jobben. Testet på krom bare besvart Aug 31 13 kl 18:43 I mitt spesielle tilfelle av en eller annen grunn jobbet ingen av de tidligere svarene for meg. Det som endte med å jobbe, var faktisk en kombinasjon av flere ting. Jeg installerte (i Ubuntu 16.04) Wkhtmltopdf python wrapper kalt pdfkit ved hjelp av pip3, og i stedet for å installere Wkhtmltopdf via apt-get installerte jeg det statiske binære (versjon 0.12.3) ved å følge dette scriptet Lagt dette CSS (som foreslått i en av svarene her): Og så legger du også til lttheadgt og lttbodygt-koder som foreslått her også (uten disse ville tabellen fortsatt brytes i stygg måte): Med disse endringene kan jeg nå bruke Mako-maler til å generere HTML-en og deretter mate det til Wkhtmltopdf og få en vakkert pagert PDF :) Besvart 8. februar kl 21:36 Ditt svar 2017 Stack Exchange, Inc Hvis du ønsker å viderebehandle generert PDF, kan du lese det til en variabel: Du kan spesifisere alle wkhtmltopdf-alternativer. Du kan slippe - i alternativnavn. Hvis alternativet uten verdi, bruk None, False eller for dict value. For gjentatte alternativer (inkl. Tillat, informasjonskapsel, egendefinert header, post, postfile, run-script, erstatte) kan du bruke en liste eller en tuple. Med mulighet som krever flere verdier (for eksempel - tilpasset header-godkjenning hemmelig) kan vi bruke en 2-tuple (se eksempel nedenfor). Som standard vil PDFKit vise all wkhtmltopdf-utgang. Hvis du ikke vil ha det, må du passere stille alternativ: På grunn av wkhtmltopdf kommandosyntaks, må TOC og Cover-alternativene spesifiseres separat. Hvis du trenger deksel før TOC, bruk coverfirst-alternativ: Du kan angi eksterne CSS-filer når du konverterer filer eller strenger med css-alternativ. Advarsel Dette er en løsning for denne feilen i wkhtmltopdf. Du bør først prøve alternativet bruker-stil-ark. Du kan også passere noen alternativer gjennom metakoder i HTML: Hver API-samtale tar en valgfri konfigurasjonsparameter. Dette bør være en forekomst av pdfkit. configuration () API-anrop. Det tar konfigurasjonsalternativene som første parametere. De tilgjengelige alternativene er: wkhtmltopdf - plasseringen av wkhtmltopdf binær. Som standard vil pdfkit forsøke å finne dette ved hjelp av hvilke (på UNIX type systemer) eller hvor (på Windows). metatagprefix - prefiks for pdfkit-spesifikke metakoder - som standard er dette pdfkit - Eksempel - for når wkhtmltopdf ikke er på PATH: IOError: Ingen wkhtmltopdf kjørbar funnet: Pass på at du har wkhtmltopdf i PATH eller angi via egendefinert konfigurasjon (se foregående seksjon). hvor wkhtmltopdf i Windows eller hvilke wkhtmltopdf på Linux skal returnere den faktiske banen til binær. IOError: Kommando mislyktes Denne feilen betyr at PDFKit ikke kunne behandle en inngang. Du kan prøve å direkte kjøre en kommando fra feilmelding og se hvilken feil som forårsaket feil (på enkelte wkhtmltopdf-versjoner kan dette skyldes segmenteringsfeil)

No comments:

Post a Comment