• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

pdf-Dokumente konkatenieren??

Hallo,

danke für die Beispiel-pdfs.

Mit pyPdf (Link s.o.) geht cat von pdfs dann so:

1. Erstmal pyPdf installieren: pyPdf auspacken und im Verzeichnis als root
Code:
python setup.py install
ausführen.

2. Dann sollte es mit folgendem kleinen Skript gehen:

Code:
#!/usr/bin/env python

import os
import sys

PDF1 = "Dok1.pdf"
PDF2 = "Dok2.pdf"

PDFOUT = "out.pdf"

from pyPdf import PdfFileWriter, PdfFileReader

output = PdfFileWriter()

fsi1 = file(PDF1, "rb")
input1 = PdfFileReader(fsi1)
numpages1 = input1.getNumPages()

fsi2 = file(PDF2, "rb")
input2 = PdfFileReader(fsi2)
numpages2 = input2.getNumPages()

for i in range(numpages1):
    output.addPage(input1.getPage(i))

for i in range(numpages2):
    output.addPage(input2.getPage(i))

outputStream = file(PDFOUT, "wb")
output.write(outputStream)

outputStream.close()

fsi1.close()
fsi2.close()

Schreibt nach "out.pdf".

Über das mit den halben Seiten muß ich noch etwas länger nachdenken. Vielleicht geht auch das.

Viele Grüße
 
notoxp schrieb:
jengelh schrieb:
Code:
gs -dBATCH -dNOPAUSE -dQUIET -sDEVICE=pdfwrite -sOutputFile=neu.pdf doc1.pdf doc2.pdf
Auch danke für diesen Tipp - habe ich gleich auch mal ausprobiert. Wenn doc[12].pdf jeweils eine Seite haben besteht neu.pdf aus 2 Seiten, ebenso wie es die beiden anderen Tools auch machen.

Ich bin jetzt nicht der Ghostscript-Kenner. Weißt du vielleicht, ob man mit gs auch zwei halb gefüllte DINA4-Seiten zu einer ganzen zusammenfügen kann?
Wieso kannst du nicht wie jeder andere auch mal googeln? "merge two pages with ghostscript" gibt so ein vielversprechendes Ergebnis gleich auf Platz 1 http://www.dsl.org/cookbook/cookbook_25.html . psnup findest du im Paket psutils.
 
Über das mit den halben Seiten muß ich noch länger nachdenken ...

Wie Du schon oben sagtest, bestehen pdfs meist aus ganzen Seiten.
Offenbar ist das auch so, wenn nur halbe Seiten angezeigt werden: Dann wird anscheinend die untere Hälfte einfach nicht angezeigt. Ein Beispiel:
Mach doch mal
Code:
pdftk Dok1.pdf output doc.unc.pdf uncompress
und guck Dir "doc.unc.pdf" in einem Editor an (bemerke auch, was da für Benutzerinformationen angezeigt werden :) ). Ändere dort die Zeile
Code:
/MediaBox [0 0 595 842]
zu
Code:
/MediaBox [0 421 595 842]
Dann mach
Code:
pdftk doc.unc.pdf output Dok12.pdf compress
und sieh Dir "Dok12.pdf" etwa mit acroread an. Scheinbar ist es jetzt nur eine halbe Seite, tatsächlich wird aber nur die untere Hälfte nicht dargestellt. Bin da aber kein pdf-Experte, kann mich also irren.

Der Inhalt einer pdf-Seite wird offenbar in einem Datenstrom gespeichert. Es ist schwer zu sagen, wo darin die Mitte der Seite ist.
Lange Rede, kurzer Sinn:
Ich kann's nicht. Ich kann mit dem Python-Modul nur zwei ganze Seiten übereinanderlegen. Das geht so,
Code:
#!/usr/bin/env python

import sys
from pyPdf import PdfFileWriter, PdfFileReader

PDF1 = "Dok1.pdf"
PDF2 = "Dok2.pdf"

PDFOUT = "out.pdf"


output = PdfFileWriter()

fsi1 = file(PDF1, "rb")
input1 = PdfFileReader(fsi1)
numpages1 = input1.getNumPages()

fsi2 = file(PDF2, "rb")
input2 = PdfFileReader(fsi2)
numpages2 = input2.getNumPages()

if numpages1 != numpages2:
    print "pdfs must have same number of pages." 
    sys.exit(1)

for i in range(numpages1):
    a = input1.getPage(i)
    b = input2.getPage(i)
    b.mergePage(a)
    output.addPage(b)

outputStream = file(PDFOUT, "wb")
output.write(outputStream)

outputStream.close()

fsi1.close()
fsi2.close()

ist aber nicht die Lösung.

psnup soll's ja können ... bei mir klappt's nicht (das heißt, ich erhalte ein ps-Datei, die ich mit ps2pdf umwandle, um dann mit acroread nur leeres Weiß zu sehen :().

Viele Grüße
 
jengelh schrieb:
Wieso kannst du nicht wie jeder andere auch mal googeln? "merge two pages with ghostscript" gibt so ein vielversprechendes Ergebnis gleich auf Platz 1 http://www.dsl.org/cookbook/cookbook_25.html . psnup findest du im Paket psutils.
Ich beschäftige mich mindestens seit Mitte März mit diesem Problem und habe seitdem, x-mal gegoogelt, heruntergeladen, ausprobiert (dabei 3 verschiedene Betrübsysteme verwendet), viele interessante Sachen gefunden aber nie die Lösung meines Problems.
www.dsl.org schrieb:
Pages are placed in "row-major" layout in the output file, where logical pages are placed in rows across the page. Use the `-c' option to specify a "column-major" layout, where logical pages are placed in columns down the page. Scale the size of the pages by giving a percentage to multiply the page size by as an argument to the `-s' option; for example, `-s .5' scales pages to 50 percent of their original size.
Das klingt mir sehr nach anordnen von Seiten in Form von Kacheln. Das hatte ich schon mit anderen Tools geschafft.

Ich werde trotzdem heute Abend mal psnup ausprobieren, obwohl sich bei mir langsam der Verdacht erhärtet, dass ich etwas unlösbares verlange.
 
Hab noch 'ne Idee:

Plan:
1. pdf in einzelne Seiten spalten (pdftk burst).
2. pdf to tiff:

http://www.asmail.be/msg0055376363.html

3. tiff-Seite zerteilen und die gewünschte Hälfte zu neuer ganzer Seite verarbeiten (ImageMagick / Python PIL)
4. tiff2pdf
5. Neue pdf-Seite mit dem 2. Python Script oben zusammenstellen (merge).
6. Mehrere pdf-Seiten zusammenfügen (pdftk cat).

Viele Grüße
 
abgdf schrieb:
1. pdf in einzelne Seiten spalten (pdftk burst).
2. pdf to tiff:

http://www.asmail.be/msg0055376363.html

3. tiff-Seite zerteilen und die gewünschte Hälfte zu neuer ganzer Seite verarbeiten (ImageMagick / Python PIL)
4. tiff2pdf
5. pdf cat (s.o.), um eine neue Seite zu erstellen.
6. Mehrere pdf-Seiten zusammenfügen (pdftk cat).
So eine ähnliche Idee hatte bereits OmasEnkel. Allerdings bin ich mit dem Zwischenschritt TIFF/JPG im Ergebnis schon sehr weit vom Ursprünglichen PDF-Format entfernt.
 
Mit einem der propriertären Adobe-Tools aus dem Windowsbereich geht es definitiv, aber ich glaube das hilft dir weniger :(
 
notoxp schrieb:
Ich werde trotzdem heute Abend mal psnup ausprobieren, obwohl sich bei mir langsam der Verdacht erhärtet, dass ich etwas unlösbares verlange.
Tja, auch hier: Fehlanzeige. Ich habe übrigens ein ähnliches Phänomen wie abgdf.
Code:
$ pdf2ps Dok1.pdf Dok1.ps
$ pdf2ps Dok2.pdf Dok2.ps
$ psmerge -oDok_all.ps Dok1.ps Dok2.ps
$ psnup -2 Dok_all.ps Dok_all2.ps
Wrote 0 pages, 2144 bytes
$ ps2pdf Dok_all2.ps Dok_all2.pdf

$ psnup -2 Dok1.ps Dok1_2.ps
[1] Wrote 1 pages, 7909 bytes
$ ps2pdf Dok1_2.ps Dok1_2.pdf

$ ps2pdf Dok_all.ps Dok_all.pdf
Nach diesen Befehlen ist Dok_all.pdf und Dok_all2.pdf leer. Nur Dok1_2.pdf ist halbseitig gefüllt. Also ist offensichtlich der psmerge schuld. Aber OK, laut man-page sollte man bei Problemen mit psmerge Ghostscript nehmen. Dann erhalte ich zwei DINA4-Seiten verkleinert und um 90 Grad gegen den Uhrzeigersinn gedreht in auf einer DINA4-Seite.

Das ist aller sehr interessant, nur bin ich mit meinem eigentlichen Problem immer noch nicht weiter. Naja, ich werde mich jetzt mal auf python stürzen...
 
Mit einem der propriertären Adobe-Tools aus dem Windowsbereich geht es definitiv
Am Anfang hatte ich mal reportlab für Python erwähnt. Auch da gibt es ein kommerzielles Zusatzprodukt für pdf-post-processing:

http://www.reportlab.com/pagecatcher_index.html

Auch das hilft weniger ...
Dann erhalte ich zwei DINA4-Seiten verkleinert und um 90 Grad gegen den Uhrzeigersinn gedreht in auf einer DINA4-Seite.
Wieder das alte Problem: Wir bringen (jedenfalls bislang) psnup nicht dazu, die pdf-Seiten in zwei Hälften zu teilen. Es werden vielmehr zwei ganze Seiten auf eine Seite gebracht. Entweder aufrecht nebeneinander oder untereinander, aber dann eben gedreht.
Ich sagte oben ja, es ist schwer, etwas anderes als eine ganze pdf-Seite zu verarbeiten.

Viele Grüße
 
Ha !

Ich hab die Lösung :p !
Mit ImageMagick ist es ganz einfach (Ergebnisdatei wie oben "out.pdf"):

Code:
#!/bin/bash

# Needs ImageMagick:

convert Dok1.pdf d1.png
convert Dok2.pdf d2.png

convert d1.png -crop 595x421+0+0 d12.png
convert d2.png -crop 595x421+0+0 d22.png

convert d12.png d22.png -append d3.png

convert d3.png out.pdf

# Unquote to clean up:
# rm d1.png d2.png d12.png d22.png d3.png
:cool:
Daraus kann man jetzt z.B. zusammen mit pdftk ein größeres Skript bauen.

Viele Grüße
 
abgdf schrieb:
Ich hab die Lösung :p !
Erstmal habe ich deine python-Scripts ausprobiert. Die haben alle wie beschrieben funktioniert. Natürlich war es nicht die gewünschte Lösung, aber es war trotzdem interessant. ;)

Erstmal Danke hierfür.
Mit ImageMagick ist es ganz einfach (Ergebnisdatei wie oben "out.pdf"):
Das werde ich als nächstes ausprobieren. Mal sehen, was dabei herauskommt. :)

Ich melde mich wieder ...
 
jengelh schrieb:
Konversion von pdf nach png? Entweder verlierst du dabei deine dpi, oder die Dateien sind besupert groß.
Mit einem Konvert zu png folge ich eigentlich dem Bereits vorgeschlagenen Weg "Mach doch jpegs draus". So richtig gefällt mit das nicht.

ImageMagick habe ich übrigens auf SLES 10 nicht zum laufen gekriegt. Vielleicht muss ich es mal mit einem "normalen" SuSE versuchen. ;)
 
Laut readme von ImageMagick ruft ImageMagick zur Umwandlung von pdf nach Grafik Ghostscript auf.

Mit einem Konvert zu png folge ich eigentlich dem Bereits vorgeschlagenen Weg "Mach doch jpegs draus". So richtig gefällt mit das nicht.

Klar, jpg ginge mit "convert" genauso. An die Umwandlung des pdf-streams selbst werden wir, wie oben erläutert, IMHO nicht herankommen.

Gruß
 
abgdf schrieb:
Klar, jpg ginge mit "convert" genauso. An die Umwandlung des pdf-streams selbst werden wir, wie oben erläutert, IMHO nicht herankommen.
Das ist auch mittlerweile meine HO. Ich habe schon vorletzte Woche die Vermutung geäußert, dass ich hier unter Umständen etwas Unmögliches verlange und ich mich mit einem "Würgaround" begnügen muss.

In jedem Fall wurde durch diese Diskussion mein Horizont bezüglich PDF erweitert. Vielen Dank an alle, die hier mitgemacht haben. :)
 
Oben