it-swarm.com.de

Teilen Sie jeden PDF Seite in zwei?

Ich habe eine große Anzahl von PDF -Dateien mit zwei Folien auf einer Seite (zum Drucken).

Das Format ist A4-Seiten mit jeweils zwei Folieneinstellungen:

-----------
| slide 1 |
-----------
| slide 2 |
-----------

Wie kann ich eine neue PDF -Datei mit einer Folie pro Seite erstellen?

Gerne verwenden Sie GUI, CLI, Skripts oder sogar eine Schnittstelle zur Bibliothek PDF einer Sprache. aber ich brauche den Text auf den Folien, um noch auswählbar zu sein.

22

PDF Scissors erlaubte mir, alle Seiten in einer PDF-Datei zu teilen.

20

Briss ist "eine einfache plattformübergreifende (Linux, Windows, Mac OSX) -Anwendung zum Zuschneiden von PDF -Dateien. Über eine einfache Benutzeroberfläche können Sie den Zuschneidebereich genau definieren, indem Sie ein Rechteck auf die visuell überlagerte Oberfläche setzen Seiten. " Es ist Open Source (GPL).

Funktioniert gut für mich. Die GUI ist minimal, aber funktional. Es kann auch von der Befehlszeile aus verwendet werden.

10
Nicolas Payette

mutool arbeitet dafür brillant. Das folgende Beispiel teilt jede Seite von input.pdf in 3 horizontale und 8 vertikale Teile (wodurch 24 Seiten für jede 1 Eingabe erzeugt werden):

mutool poster -x 3 -y 8 input.pdf output.pdf

Um mutool zu installieren, installieren Sie einfach mupdf , das wahrscheinlich in den meisten GNU/Linux-Distributionen enthalten ist.

(Kredite an marttt .)

Auf Debian-basierten Linux-Systemen wie Ubuntu können Sie es mit installieren

Sudo apt install mupdf
Sudo apt install mupdf-tools

Sie können eine Python-Bibliothek mit dem Namen PyPDF verwenden. Diese Funktion teilt Doppelseiten unabhängig von der Seitenausrichtung auf:

import copy
import math
import pyPdf

def split_pages(src, dst):
    src_f = file(src, 'r+b')
    dst_f = file(dst, 'w+b')

    input = pyPdf.PdfFileReader(src_f)
    output = pyPdf.PdfFileWriter()

    for i in range(input.getNumPages()):
        p = input.getPage(i)
        q = copy.copy(p)
        q.mediaBox = copy.copy(p.mediaBox)

        x1, x2 = p.mediaBox.lowerLeft
        x3, x4 = p.mediaBox.upperRight

        x1, x2 = math.floor(x1), math.floor(x2)
        x3, x4 = math.floor(x3), math.floor(x4)
        x5, x6 = math.floor(x3/2), math.floor(x4/2)

        if x3 > x4:
            # horizontal
            p.mediaBox.upperRight = (x5, x4)
            p.mediaBox.lowerLeft = (x1, x2)

            q.mediaBox.upperRight = (x3, x4)
            q.mediaBox.lowerLeft = (x5, x2)
        else:
            # vertical
            p.mediaBox.upperRight = (x3, x4)
            p.mediaBox.lowerLeft = (x1, x6)

            q.mediaBox.upperRight = (x3, x6)
            q.mediaBox.lowerLeft = (x1, x2)

        output.addPage(p)
        output.addPage(q)

    output.write(dst_f)
    src_f.close()
    dst_f.close()
8
moraes

Danke an Matt Gumbley für sein Python-Skript. Ich habe dieses Python-Skript so modifiziert, dass es jetzt auch mit PDF-Dateien funktioniert, die Hoch- und Querformat-Seiten und zugeschnittene Seiten enthalten:

# -*- coding: utf-8 -*-
"""
Created on Thu Feb 26 08:49:39 2015

@author: Matt Gumbley  (stackoverflow)
changed by Hanspeter Schmid to deal with already cropped pages
"""

import copy
import math
from PyPDF2 import PdfFileReader, PdfFileWriter

def split_pages2(src, dst):
    src_f = file(src, 'r+b')
    dst_f = file(dst, 'w+b')

    input = PdfFileReader(src_f)
    output = PdfFileWriter()

    for i in range(input.getNumPages()):
        # make two copies of the input page
        pp = input.getPage(i)
        p = copy.copy(pp)
        q = copy.copy(pp)

        # the new media boxes are the previous crop boxes
        p.mediaBox = copy.copy(p.cropBox)
        q.mediaBox = copy.copy(p.cropBox)

        x1, x2 = p.mediaBox.lowerLeft
        x3, x4 = p.mediaBox.upperRight

        x1, x2 = math.floor(x1), math.floor(x2)
        x3, x4 = math.floor(x3), math.floor(x4)
        x5, x6 = x1+math.floor((x3-x1)/2), x2+math.floor((x4-x2)/2)

        if (x3-x1) > (x4-x2):
            # horizontal
            q.mediaBox.upperRight = (x5, x4)
            q.mediaBox.lowerLeft = (x1, x2)

            p.mediaBox.upperRight = (x3, x4)
            p.mediaBox.lowerLeft = (x5, x2)
        else:
            # vertical
            p.mediaBox.upperRight = (x3, x4)
            p.mediaBox.lowerLeft = (x1, x6)

            q.mediaBox.upperRight = (x3, x6)
            q.mediaBox.lowerLeft = (x1, x2)


        p.artBox = p.mediaBox
        p.bleedBox = p.mediaBox
        p.cropBox = p.mediaBox

        q.artBox = q.mediaBox
        q.bleedBox = q.mediaBox
        q.cropBox = q.mediaBox

        output.addPage(q)
        output.addPage(p)


    output.write(dst_f)
    src_f.close()
    dst_f.close()
5

Versuchen Sie BRISS .

alt text

Sie können jede Seite mithilfe von .__ in beliebig viele Unterseiten aufteilen. Definieren von Regionen mit einer GUI. Es gruppiert alle ähnlichen Seiten in Gruppen für Sie können Sie also einmal Regionen für diese Gruppe definieren.

Es ist plattformübergreifend, kostenlos und Open Source.

(kopiert von https://superuser.com/a/235327/35237 )

1
Tobias Kienzler

Danke an die Moränen für diese Antwort. In meinem Fall sah das Ergebnis PDF in Adobe Reader und der Mac-Vorschau gut aus, schien jedoch bei der Anzeige unter iOS überhaupt nicht in separate Seiten aufgeteilt zu sein. Ich habe Python 2.7.8 und PyPDF 2 verwendet und das Skript wie folgt geändert, was gut funktioniert hat. (und ordnete die Seiten nach links/rechts und nicht nach rechts/links).

import copy
import math
from PyPDF2 import PdfFileReader, PdfFileWriter

def split_pages(src, dst):
    src_f = file(src, 'r+b')
    dst_f = file(dst, 'w+b')

    input = PdfFileReader(src_f)
    output = PdfFileWriter()

    for i in range(input.getNumPages()):
        p = input.getPage(i)
        q = copy.copy(p)
        q.mediaBox = copy.copy(p.mediaBox)

        x1, x2 = p.mediaBox.lowerLeft
        x3, x4 = p.mediaBox.upperRight

        x1, x2 = math.floor(x1), math.floor(x2)
        x3, x4 = math.floor(x3), math.floor(x4)
        x5, x6 = math.floor(x3/2), math.floor(x4/2)

        if x3 > x4:
            # horizontal
            p.mediaBox.upperRight = (x5, x4)
            p.mediaBox.lowerLeft = (x1, x2)

            q.mediaBox.upperRight = (x3, x4)
            q.mediaBox.lowerLeft = (x5, x2)
        else:
            # vertical
            p.mediaBox.upperRight = (x3, x4)
            p.mediaBox.lowerLeft = (x1, x6)

            q.mediaBox.upperRight = (x3, x6)
            q.mediaBox.lowerLeft = (x1, x2)


        p.artBox = p.mediaBox
        p.bleedBox = p.mediaBox
        p.cropBox = p.mediaBox

        q.artBox = q.mediaBox
        q.bleedBox = q.mediaBox
        q.cropBox = q.mediaBox

        output.addPage(q)
        output.addPage(p)

    output.write(dst_f)
    src_f.close()
    dst_f.close()
0
Matt Gumbley

Wenn die Verwendung einer Java- oder .NET-Bibliothek für Sie in Ordnung ist, können Sie iText/iTextSharp verwenden.

Ein Beispiel für das Kacheln eines vorhandenen Dokuments finden Sie im Buch iText in Action, 2. Auflage, im frei verfügbaren Kapitel 6 : TilingHero.Java / TilingHero.cs .

0
mkl

Mit mupdf-1.8-windows-x64 in win10 CMD müssen Sie vor dem horizontalen Parameter (-x) ..__ ' poster ' (gefolgt von Leerzeichen und ohne Anführungszeichen) haben. Zum Beispiel für einen doppelseitigen Scan in PDF:

mutool poster -x 2 -y 1 C:\Benutzer\alfie\Documents\SNM\The_Ultimate_Medicine.pdf C:\Users\alfie\Documents\ebooks\The_Ultimate_Medicine.pdf

Was für ein wunderbares Werkzeug! Merci Infiniment! .. (Und die Ausgabedatei ~ 9MB ist nur 52 KB größer als das Original!)

0
Gepi