Donnerstag, Dezember 12, 2019

macht einen Seitenumbruch, wenn die pdf-Datei generiert mit wicked_pdf

sample.erb.html

<p>Page 1</p1>

<p>Page 2</p2>

So, alles nach „Seite 1“ ich drucken möchten, auf der 2. Seite.

Wie kann ich dies tun?

Gibt es eine Lösung in SO aber es hat nicht funktioniert für mich.

Beispielsweise im Fall von Garnelen, es hat ein nettes feature namens “ start_new_page

InformationsquelleAutor Askar | 2013-08-02

3 Kommentare

  1. 3

    in der css –

    p{page-break-after: always;}

    Update

    Nach ein paar Fragen, werde ich erweitere meine Antwort und wie ich es in meine apps.

    1 Einige Male, die wickedpdf Helfer nicht funktioniert, also habe ich noch eine Initialisierung

    _config/- Initialisierungen/wiked_pdf.rb_

    module WickedPdfHelper
      def wicked_pdf_stylesheet_link_tag(*sources)
        sources.collect { |source|
          "<style type='text/css'>#{Rails.application.assets.find_asset("#{source}.css")}</style>"
        }.join("\n").gsub(/url\(['"](.+)['"]\)(.+)/,%[url("#{wicked_pdf_image_location("\1")}")\2]).html_safe
      end
    
      def wicked_pdf_image_tag(img, options={})
        image_tag wicked_pdf_image_location(img), options
      end
    
      def wicked_pdf_image_location(img)
        "file://#{Rails.root.join('app', 'assets', 'images', img)}"
      end
    
      def wicked_pdf_javascript_src_tag(source)
        "<script type='text/javascript'>#{Rails.application.assets.find_asset("#{source}.js").body}</script>"
      end
    
      def wicked_pdf_javascript_include_tag(*sources)
        sources.collect{ |source| wicked_pdf_javascript_src_tag(source) }.join("\n").html_safe
      end
    
      WickedPdf.config = {
    
      }
    end

    2 In Anwendungs-controller-erstellen Sie eine config-Methode mit der Allgemeinen config params

    _app/Controller/application_controller.rb_

    class ApplicationController < ActionController::Base
      def pdf_config
        WickedPdf.config = {
            :wkhtmltopdf => "/usr/local/bin/wkhtmltopdf",
            :orientation  => 'Landscape',
            :layout => "pdf.html",
            :footer => {
                :left => "Rectores Lideres Transformadores",
                #:left => "#{Entidad.find(@current_user.entidad).nombre}",
                :right => "#{Time.now}",
                :font_size => 5,
                :center => '[page] de [topage]'
            },
            :disposition => 'attachment'
    
        }
      end
    
    end

    3 Erstellen Sie ein gemeinsames layout für alle Ihre pdf-Dateien. Hier nutze ich die Anwendung von css, um den gleichen look und feel der web-Seite in pdf-berichten, nur dass ich die gleichen Klassen und id ‚ s

    app/layouts/pdf.html-Code.erb

    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <%= wicked_pdf_stylesheet_link_tag "application" %> ----- HERE YOUR APPLICATION CSS -----
    </head>
    <div id="content">
      <%= yield %>
    </div>
    </body>
    </html>

    4 Hinzufügen von pdf-Umleitung in Ihrem Controller

    _app/Controller/users_controller.rb_

     def index
        @users = User.all
    
        respond_to do |format|
          format.pdf do
            pdf_config
            render  :pdf => "filename"
          end
        end
      end

    5 Jetzt, in deinem css ist, wählen Sie die html-id wird die Seite Bremse

     #brake{page-break-after: always;}
    • Ich kann nicht machen diese Arbeit aus
    • Bacha, wenn es gibt keine Notwendigkeit, CSS zu benutzen, versuchen Garnelen.
  2. 1

    Ich hatte das gleiche problem, und ich entdeckte etwas, was helfen könnte. Dies war mein Seitenumbruch CSS-code:

    .page-break {
      display: block;
      clear: both;
      page-break-after: always;
    }

    Dieser hat nicht funktioniert, weil der ZWEI Gründe:

    I. In einer der SASS importierten Datei hatte ich diese Zeile im code:

    html, body
      overflow-x: hidden !important

    II. Das andere problem war, bootstrap

    @import "bootstrap"

    Es aussieht, weil der float: left in:

    .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
      float: left;
    }

    wird der Seitenumbruch funktioniert nicht mehr. So, fügen Sie einfach diese nach Sie importieren bootstrap.

    .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
      float: initial !important;
    }
    • Danke, das float: Initiale auf bootstrap-Spalten behoben das problem für mich!
  3. 0

    Für noch jemand mit diesem problem aber keiner von diesen Antworten, wie bei mir, die einfach nicht arbeiten:
    Ich habe bis auf die Verwendung von CSS zu beheben, die Seite bricht und stattdessen generiert 2 PDF-Dateien und fusioniert Sie zusammen, und verwendet die resultierende Datei statt, so gibt es keine Möglichkeit für einen Seitenumbruch nicht vorhanden.

    Zusammenführen files ist, ein array von pdf-Datei-Namen, die ich verwendet,

    system("pdftk #{files.join(' ')} cat output merged_file_name.pdf")

    Update

    Ich weiß nicht, wo ich generiert 2 PDF-Dateien, aber ich habe es geschafft, das zu tun diese Seitenumbrüche in einer einzigen pdf-Datei durch manuelles zählen der Pixel in der .html.erb – Dateien.
    <% @pixel_height = 0 %> und <% @page_height = 980 %>. die pdf-Datei anzeigen als html, um zu sehen, wie viele Pixel jeder Abschnitt nimmt. Hinzufügen @pixel_height.

    In Orten, die Sie eine Seite brechen würde Sinn machen, ich check @pixel_height + 20 >= @page_height (20 wird die Anzahl von Pixeln, die ein <tr> nahm für die meisten unserer PDF-Dateien) und Rendern Sie einen manuellen Seitenumbruch ein-und umrichten @pixel_height zu 0. Der manuelle Seitenumbruch schließt alle html-tags, fügt eine 0 pixel hoch div mit einer page-break-after: always, und öffnet die html-tags wieder.

    Ich habe nur 2 Probleme mit dieser Methode:

    • Wenn Sie text in die pdf-Datei ist zu lang, es wird für den Zeilenumbruch und das abwerfen der @pixel_count verursacht einen automatischen Seitenumbruch in eine ungerade Stelle und einen manuellen Seitenumbruch auch in eine ungerade Stelle
    • WickedPdf langsam

    Gegen diese 2 Probleme, wir haben langsam unsere PDF-Dateien zu Garnelen, speziell Garnelen::Tabelle. Es ist viel schneller und es berechnet die Höhe jeder Zeile vor, es zieht ein pdf-Dokument Seitenumbrüche werden von mehr konsistente und vorhersagbare

    • können Sie erläutern, wie Sie waren zu erzeugen in der Lage ist, mehrere Dateien, ich bin auch mit Blick auf die page-break-problem und wollen das gleiche Ergebnis zu erzielen wie du.
    • Ich kann mich nicht erinnern, wo ich Tat dies, aber meine Vermutung ist so etwas wie die folgenden: ruby page1=render_to_string(partial: 'page1.html.erb') page2=render_to_string(partial: 'page2.html.erb') pdf1 = WickedPdf.new.pdf_from_string(page1) pdf2 = WickedPdf.new.pdf_from_string(page2) files = ["#{Rails.root}/public/downloads/#{SecureRandom.hex(20)}.pdf"] File.open(files[0], 'wb+') do |f| f << pdf f.rewind end files << "#{Rails.root}/public/downloads/#{SecureRandom.hex(20)}.pdf" File.open(files[1], 'wb+') do |f| f << pdf f.rewind end rufen Sie dann den Seriendruck aus der Antwort
    • Ich habe ein Beispiel in den Kommentaren und ich habe schon aktualisiert, meine Antwort zu erklären, was wir getan haben, so könnten wir 1 pdf
    • Danke, weiß es zu schätzen.

Kostenlose Online-Tests

Letzte Fragen

Tun ItemView löst Blase?

Ich habe eine CompositeView für eine Tabelle. Ich habe Trigger-set in der Kind-ItemView für jede Zeile... var TableRow = Marionette.ItemView.extend({ tagName:...

Wie kann ich untersuchen, WCF was 400 bad request über GET?

Die folgenden WCF-endpoint funktioniert gut mit dem WCF test client: AssetList ListFlaggedAssets(short processCode, string platform, string endpoint = "null", string portalId = "null", int...

Bei der Verwendung von UUIDs, sollte ich auch mit AUTO_INCREMENT?

Wir bauen eine neue web-app, die eine offline-iPad - /Android-app-version auf einer Reihe von lokalen Geräten, die Einsätze mit neuen Daten. Als solche benötigen...

Actionscript-Objekt, das verschiedene Eigenschaften

Wie kann ich die Anzahl der Eigenschaften in einer generischen Actionscript-Objekt? (Wie die Array-Länge) InformationsquelleAutor Fragsworth | 2011-01-15

Wie plot mehrere Graphen und nutzen Sie die Navigations-Taste im [matplotlib]

Die neueste version von matplotlib erstellt automatisch Navigations-buttons unter den graph. Aber die Beispiele, die ich finden alles im Internet zeigen, wie erstellen Sie...