Welcome to Etherpad!
This pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!
Get involved with Etherpad at
http://etherpad.org
On merging & thinning & adjusting pdfs
4 up of each page of the pdf
======================
http://pdfbooklet.sourceforge.net/
x copies / row: 2
no change + autoscale (otherwise it goes into A2 or bad quality reduction)
Merge pdf's in sharp quality
=====================
Considering that pdfunite is part of poppler it has a higher chance to be installed, usage is also simpler than pdftk:
pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf
4UP with psnup
================
pdf2ps photos.ebook.pdf - | \
psnup -p a4 -4 | \
ps2pdf - photos.4up.pdf
Changing the resolution of images in a PDF (to match an output device)
==========================================
SOURCE:
http://tech-vaults.blogspot.be/2012/01/resampling-jpegs-inside-pdf-to.html
ebook is very a good setting for screen (better than the actual "screen" setting as it allows a little zooming in still)
In short, use ghostscript:
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
The PDFSETTINGS presets equate to the following resolutions:
/screen ... screen-view-only quality, 72 dpi images
/ebook ... low quality, 150 dpi images
/printer ... high quality, 300 dpi images
/prepress ... high quality, color preserving, 300 dpi images
/default ... similar to /screen
Other suggested command line arguments made various places:
-dCompatibilityLevel=1.4
-dColorImageResolution=38 -dColorImageDownsampleType=/Average -dGrayImageDownsampleType=/Average -dGrayImageResolution=38 -dMonoImageResolution=38 -dMonoImageDownsampleType=/Average -dOptimize=true -dDownsampleColorImages=true -dDownsampleGrayImages=true -dDownsampleMonoImages=true -dUseCIEColor -dColorConversionStrategy=/sRGB
-dMaxSubsetPct=100
More tips (very useful page)
http://www.peteryu.ca/tutorials/publishing/pdf_manipulation_tips
PHotobooks with Python + FLAT
=============================
Flat is a great pure python library that can make PDFs. NB: The resulting PDFs are not *exactly* Adobe standard compliant -- using the ghostscript resolution fix above is useful to "cleanup" / fix the outputs of these scripts.
First get FLAT:
pip install flat
======================================
photobook.py
=====================================
from argparse import ArgumentParser
from flat import rgb, font, shape, strike, document, image
import glob
p = ArgumentParser("create a photo book pdf")
p.add_argument("--width", default=210, type=int, help="width in mm, default: 210 (A4)")
p.add_argument("--height", default=297, type=int, help="width in mm, default: 297 (A4)")
p.add_argument("--border", default=10, type=int, help="border in mm, default: 10")
p.add_argument("--input", help="input filenames in a text file")
p.add_argument("--output", default="output.pdf", help="output filename for PDF file, default: output.pdf")
p.add_argument("input", nargs="+", default=[], help="image filenames")
args = p.parse_args()
w = args.width # 210
h = args.height # 297
border = args.border # 10
d = document(w, h, 'mm')
hh = args.height / 2
page = None
paths = args.input
paths.sort()
def fitbox (image, placed, w, h):
fit_h = image.height * (float(w) / image.width)
if fit_h > h:
placed.fitheight(h)
else:
placed.fitwidth(w)
for impath in paths:
print impath
im = image.open(impath)
if im.height > im.width:
page = d.addpage()
placed = page.place(im).frame(border, border, w-(border*2), h-(border*2))
fitbox(im, placed, w-(border*2), h-(border*2))
# placed.fitheight(h-(border*2))
page = None
else:
# place in partial frame
if page == None:
page = d.addpage()
placed = page.place(im).frame(border, border, w-(border*2), hh-(border*2))
fitbox(im, placed, w-(border*2), hh-(border*2))
# placed.fitheight(hh-(border*2))
else:
placed = page.place(im).frame(border, hh+border, w-(border*2), hh-(border*2))
fitbox(im, placed, w-(border*2), hh-(border*2))
# placed.fitheight(hh-(border*2))
page = None
d.pdf(args.output)
======================================
photobook2.py (2x2 grid)
=====================================
from argparse import ArgumentParser
from flat import rgb, font, shape, strike, document, image
import glob
from random import shuffle
p = ArgumentParser("create a photo book pdf")
p.add_argument("--width", default=210, type=int, help="width in mm, default: 210 (A4)")
p.add_argument("--height", default=297, type=int, help="width in mm, default: 297 (A4)")
p.add_argument("--border", default=10, type=int, help="border in mm, default: 10")
p.add_argument("--input", help="input filenames in a text file")
p.add_argument("--output", default="output.pdf", help="output filename for PDF file, default: output.pdf")
p.add_argument("--shuffle", default=False, action="store_true", help="shuffle the order, default: False")
p.add_argument("input", nargs="+", default=[], help="image filenames")
args = p.parse_args()
w = args.width # 210
h = args.height # 297
border = args.border # 10
d = document(w, h, 'mm')
hw = args.width / 2.0
hh = args.height / 2.0
page = None
paths = args.input
paths.sort()
if args.shuffle:
shuffle(paths)
def fitbox (image, placed, w, h):
fit_h = image.height * (float(w) / image.width)
if fit_h > h:
placed.fitheight(h)
else:
placed.fitwidth(w)
x, y = 0, 0
def newline():
global page, x, y
y += 1
x = 0
if y == 2:
y = 0
page = None
def ensurepage():
global page
if page == None:
page = d.addpage()
border2 = 2*args.border
for impath in paths:
print impath
im = image.open(impath)
if im.width > im.height:
# place across 2 cells
if x != 0:
newline()
# px = x * hw
py = y * hh
ensurepage()
placed = page.place(im).frame(0 + border, py + border, w - border2, hh - border2)
fitbox(im, placed, w - border2, hh - border2)
newline()
else:
px = x * hw
py = y * hh
ensurepage()
placed = page.place(im).frame(px + border, py+border, hw-border2, hh-border2)
fitbox(im, placed, hw-border2, hh-border2)
x += 1
if x == 2:
newline()
d.pdf(args.output)
makefile
=============
all: screenshots.prepress.pdf bookpdfs.prepress.pdf bookphotos.prepress.pdf
photobooks:
python photobook.py pictures/photos/* --output photos.raw.pdf
python photobook2.py pictures/bookphotos/* --shuffle --output bookphotos.raw.pdf
python photobook2.py pictures/bookpdfs/*.jpg --shuffle --output bookpdfs.raw.pdf
python photobook2.py pictures/screenshots/* --shuffle --output screenshots.raw.pdf
%.prepress.pdf: %.raw.pdf
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dNOPAUSE -dQUIET -dBATCH -sOutputFile=$@ $<
%.ebook.pdf: %.raw.pdf
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=$@ $<
%.4up.pdf: %.ebook.pdf
pdf2ps $< - | \
psnup -p a4 -4 | \
ps2pdf - $@
%.screen.pdf: %.pdf
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=$@ $<