diff --git a/command-line/tools/README.md b/command-line/tools/README.md new file mode 100644 index 0000000..dce583b --- /dev/null +++ b/command-line/tools/README.md @@ -0,0 +1,74 @@ +# Tools used for Volumetric Regimes + +Before you can run these scripts, they will need to be made executable. + + chmod +x *.sh + +## OSP-tools.pdfutils: `color_convert.sh` + +**Convert PDF RGB to only-Black** + +This will convert an RGB PDF (even if it appears only black) to `input-K.pdf`. + + ./color_convert.sh black input.pdf input-K.pdf + +Link: + +## OSP-tools.pdfutils: `rgb2cmyk.sh` + +**Convert PDF from RGB to CMYK** + +Dependencies: + +- `gs` (Ghostscript) +- `pdftops` +- `control.txt` +- `apple_to_jNP_photo.icc` +- `apple_to_jNP_neutral.icc` + +This will convert a PDF to `input-cmyk.pdf`. + +Usage: + + ./rgb2cmyk.sh input.pdf + +Link: + +## Custom VR tools: `make-images-bw.sh` + +Dependencies: + +- `imagemagick` + +This will create a copy of an image folder, with all images converted to BW. + +Usage: + + ./make-images-bw.sh ./images-folder/ + +## Custom VR tools: `convert-to-PDFX-3-2002.sh` + +Dependencies: + +- `texlive-xetex` (xelatex) + +This will convert a PDF into the PDFX/3:2002 format + edit the PDF metadata. + +Edit PDF metadata: + + Open the xelatex template (`xelatex-PDFX-3-2002.template.tex`) and edit the metadata on line 7-12. + +Usage: + + convert-to-PDFX-3-2002.sh input.pdf output.pdf + +## Other useful tools + +- Check metadata of PDF: `pdfinfo filename.pdf` +- Check color space of PDF: `pdfimages -list filename.pdf` + + + + + + diff --git a/command-line/tools/apple_to_jNP_neutrals.icc b/command-line/tools/apple_to_jNP_neutrals.icc new file mode 100644 index 0000000..db0ddf1 Binary files /dev/null and b/command-line/tools/apple_to_jNP_neutrals.icc differ diff --git a/command-line/tools/apple_to_jNP_photo.icc b/command-line/tools/apple_to_jNP_photo.icc new file mode 100644 index 0000000..06b9530 Binary files /dev/null and b/command-line/tools/apple_to_jNP_photo.icc differ diff --git a/command-line/tools/color_convert.sh b/command-line/tools/color_convert.sh new file mode 100755 index 0000000..530c0a6 --- /dev/null +++ b/command-line/tools/color_convert.sh @@ -0,0 +1,122 @@ +#!/bin/bash +# +# USAGE: +# ./color_convert.sh colormodelayer1,colormodelayer2 input_layer1.pdf,input_layer2.pdf output.pdf +# spot colour colormode should look like "spot-COLOR NAME-0 0.64 0.67 0.02" +# where COLOR NAME is the name of the colour and 0 0.64 0.67 0.02 are cmyk values from 0 to 1 + + + +DEBUG=1 +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +function graytospot { + [ $DEBUG -eq 1 ] && echo "converting : $1 to $2 \n" + + #################################################################### + #part1: let's put our custom color reference in gray_to_spot.ps + IFS='-' read -a args <<< "$2" + IFS=' ' read -a color <<< "${args[2]}" + unset IFS + #args[1] = color name, args[2] = cmyk equivalent in 1 line + #color[0] = C, color[1] = M, color[2] = Y, color[3] = K + spotcolor="\/spotcolor [\/Separation (${args[1]}) \/DeviceCMYK{dup ${color[0]} mul exch dup ${color[1]} mul exch dup ${color[2]} mul exch ${color[3]} mul}] def" + [ $DEBUG -eq 1 ] && echo "spotcolor : $spotcolor \n" + sed -i "s/^\/spotcolor.*$/$spotcolor/g" $DIR/gray_to_spot.ps + #endpart1 + + ###################################################################### + #part2: convert to ps file using pdftops + pdftops "$1" + psfile="${1/.pdf/.ps}" + + ###################################################################### + #part3: modify bitmap decode from [0 1] to [1 0] in generated ps + sed -i -e 's/Decode \[0 1\]/Decode [1 0]/g' "$psfile" + + ###################################################################### + #part4: convert back to pdf using gray_to_spot.ps + gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$1" $DIR/gray_to_spot.ps "$psfile" + + ###################################################################### + #part5: remove ps file + [ $DEBUG -eq 0 ] && rm "$psfile" + +} + + + + +IFS=',' read -a layers <<< "$1" +IFS=',' read -a input_files <<< "$2" +unset IFS + +if [ $DEBUG -eq 1 ]; then echo "layers : \n"; printf '%s\n' "${layers[@]}"; fi +if [ $DEBUG -eq 1 ]; then echo "files : \n"; printf '%s\n' "${input_files[@]}"; fi + + +#loop on files and convert them according to layers colormodes +for index in "${!layers[@]}" +do + echo "${input_files[index]} ${layers[index]}" + + if [ "${layers[index]}" = "black" ] || [[ "${layers[index]}" == spot* ]]; then + gs \ + -dNOPAUSE \ + -dBATCH \ + -sDEVICE=pdfwrite \ + -sProcessColorModel=DeviceGray \ + -sColorConversionStrategy=Gray \ + -sDefaultCMYKProfile=ps_cmyk.icc \ + -dOverrideICC \ + -sOutputFile="${input_files[index]/.pdf/-tmp.pdf}" "${input_files[index]}" + if [[ "${layers[index]}" == spot* ]]; then + graytospot "${input_files[index]/.pdf/-tmp.pdf}" "${layers[index]}" + fi + elif [ "${layers[index]}" = "cmyk" ]; then + gs \ + -dNOPAUSE \ + -dBATCH \ + -sDEVICE=pdfwrite \ + -dProcessColorModel=/DeviceCMYK \ + -sColorConversionStrategy=CMYK \ + -sDefaultCMYKProfile=ps_cmyk.icc \ + -dOverrideICC \ + -sOutputFile="${input_files[index]/.pdf/-tmp.pdf}" "${input_files[index]}" + fi + + if [ $DEBUG -eq 0 ]; then + rm "${input_files[index]}" + fi + + + +done + +####IF SINGLE LAYER +if [ ${#layers[@]} = 1 ]; then + mv "${input_files[0]/.pdf/-tmp.pdf}" "$3" + exit +fi + + + +####ELSE OVERLAY +inputFile="${input_files[0]/.pdf/-tmp.pdf}" +for(( i=1; i < ${#layers[@]}; i++ )) +do + pdftk "$inputFile" multistamp "${input_files[i]/.pdf/-tmp.pdf}" output "${3/.pdf/$i.pdf}" + if [ $DEBUG -eq 0 ]; then + rm "$inputFile" + rm "${input_files[i]/.pdf/-tmp.pdf}" + fi + + + inputFile="${3/.pdf/$i.pdf}" + +done +lastFileN=$(expr ${#layers[@]} - 1) + +mv "${3/.pdf/$lastFileN.pdf}" "$3" +echo "done" +exit diff --git a/command-line/tools/control.txt b/command-line/tools/control.txt new file mode 100644 index 0000000..bca569a --- /dev/null +++ b/command-line/tools/control.txt @@ -0,0 +1,3 @@ +Image_RGB apple_to_jNP_photo.icc 0 1 0 +Graphic_RGB apple_to_jNP_neutrals.icc 0 1 0 +Text_RGB apple_to_jNP_neutrals.icc 0 1 0 diff --git a/command-line/tools/convert-to-PDFX-3-2002.sh b/command-line/tools/convert-to-PDFX-3-2002.sh new file mode 100755 index 0000000..80cd577 --- /dev/null +++ b/command-line/tools/convert-to-PDFX-3-2002.sh @@ -0,0 +1,15 @@ +# Read first argument from command line: input folder name +INPUT_PDF=$1 +OUTPUT_PDF=$2 + +# Make a tmp copy of the tex template with the input PDF filename +sed "s/XXX/$INPUT_PDF/g" xelatex-PDFX-3-2002.template.tex > xelatex-PDFX-3-2002.tmp.tex + +# Run xelatex to convert the PDF to PDFX/3:2002 +xelatex xelatex-PDFX-3-2002.tmp.tex + +# Rename the output PDF +mv xelatex-PDFX-3-2002.tmp.pdf $OUTPUT_PDF + +# Remove the tmp tex files +rm xelatex-PDFX-3-2002.tmp.* diff --git a/command-line/tools/make-images-bw.sh b/command-line/tools/make-images-bw.sh new file mode 100755 index 0000000..6fb9c47 --- /dev/null +++ b/command-line/tools/make-images-bw.sh @@ -0,0 +1,10 @@ +# Read first argument from command line: input folder name +INPUT_DIR=$1 +OUTPUT_DIR=$INPUT_DIR-bw + +# Only make an output folder if it does not exist yet +mkdir -p $OUTPUT_DIR + +for IMG in $(ls $INPUT_DIR); do +echo "$INPUT_DIR/$IMG ---> $OUTPUT_DIR/$IMG" && convert $INPUT_DIR/$IMG -colorspace Gray $OUTPUT_DIR/$IMG; +done diff --git a/command-line/tools/rgb2cmyk.sh b/command-line/tools/rgb2cmyk.sh new file mode 100755 index 0000000..5fa9110 --- /dev/null +++ b/command-line/tools/rgb2cmyk.sh @@ -0,0 +1,30 @@ +#! /bin/bash + +# CONVERTS RGB PDF TO CMYK PDF PRESERVING TRUE BLACK FOR VECTORS +# OVERPRINT FEATURE IS AVAILABLE WITH AN OPTION + +# USAGE: +# ./rgb2cmyk.sh input.pdf +# ./rgb2cmyk.sh input.pdf overprint + +# OUTPUT: +# input-cmyk.pdf +# input-cmyk-op.pdf (in case of overprint) + +bn=$(basename $1 ".pdf") +op=${2:-knockout} + +gs -q -sDEVICE=pdfwrite -o ${bn}-CMYK.pdf -sColorConversionStrategy=CMYK -sSourceObjectICC=control.txt $1 + +if [ $op == overprint ] + then + pdftops -level2sep ${bn}-CMYK.pdf + sed -e "s/false \(op\)/true \1/gI" ${bn}-CMYK.ps > ${bn}-CMYK-op.ps + #gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=${bn}-CMYK-op.pdf ./forceblack.ps ${bn}-CMYK-op.ps + gs -q -sDEVICE=pdfwrite -o ${bn}-CMYK-op.pdf -sColorConversionStrategy=CMYK -sSourceObjectICC=control.txt ${bn}-CMYK-op.ps + rm ${bn}-CMYK.pdf + rm ${bn}-CMYK.ps +fi + + + diff --git a/command-line/tools/texput.log b/command-line/tools/texput.log new file mode 100644 index 0000000..e69de29 diff --git a/command-line/tools/xelatex-PDFX-3-2002.template.tex b/command-line/tools/xelatex-PDFX-3-2002.template.tex new file mode 100644 index 0000000..337b35a --- /dev/null +++ b/command-line/tools/xelatex-PDFX-3-2002.template.tex @@ -0,0 +1,68 @@ +% !TeX program = xelatex +% Command to run this tex file: xelatex xelatex-make-pdfx-3-2002.tex +\documentclass{book} + +\special { pdf:docinfo << /Title (Volumetric Regimes) /Author (Possible Bodies)>> } +\usepackage[unicode, + pdfauthor={Possible Bodies}, + pdftitle={Volumetric Regimes}, + pdfdisplaydoctitle, + pdfsubject={Material cultures of quantified presence}, + pdfkeywords={}, + pdfproducer={Paged.js, Chromium, pdftk, LaTeX}, + pdfcreator={xelatex}]{hyperref} + +\usepackage{pdfpages} + +% From: https://tex.stackexchange.com/questions/255480/producing-pdf-x-compliant-document-with-xelatex/275914#275914 + +%%%%%%%%% PDF-X stuff, IF USING xelatex %%%%%%%%% +%(mm size * 72)/25.4 = bp size +\usepackage{atbegshi} +\AtBeginShipout{% %A hook that is executed for every page (after first one) + \special{pdf: put @thispage + << + /TrimBox [0 0 648 432] %put here other numbers = size of page in bp + >> + } +} +\special{pdf: put @thispage + << + /TrimBox [0 0 648 432] %put here other numbers = size of page in bp + >> +} +\special{pdf:docinfo + << + /GTS_PDFXVersion (PDF/X-3:2002) + /GTS_PDFXConformance (PDF/X-3:2002) + >> +} + +\special{pdf:put @catalog +<< + /PageMode /UseNone + /OutputIntents [ + << + /Info (none) + /Type /OutputIntent + /S /GTS_PDFX + /OutputConditionIdentifier (Custom) + /RegistryName (http://www.color.org/) + >> + ] +>> +} + +\usepackage{datetime} % for \pdfdate command +\usepackage{hyperref} % for \hypersetup +\hypersetup{ + pdftitle={DocTitle},% PDF/X document should have a title + pdfinfo={% Setting some more PDF/X stuff for xelatex + ModDate={D:\pdfdate},% PDF/X document should have a modification date + Trapped={False},% PDF/X document should have Trapped tag set + }, +} + +\begin{document} +\includepdf[pages=-,fitpaper=true]{XXX} +\end{document}