====== Dateiformate konvertieren ====== Siehe auch [[Zeichensätze konvertieren]] ===== IANA-Standard: CSV (comma-separated values) versus TSV (tab-separated values) ===== Mit CSV-Dateien kann man das Problem haben, dass das Trennzeichen zwischen den Datensätzen auch in den Daten enthalten sein darf. Bei TSV-Dateien ist das verboten. Excel kann beide Formate aber zum Beispiel "LibreOffice" unterstützt leider nur das CSV-Format... ===== mit LibreOffice ===== [[LibreOffice#Dateiformate konvertieren mit LibreOffice]] ===== XLSX => CSV mit einem Python-Modul ===== [[https://stackoverflow.com/questions/20105118/convert-xlsx-to-csv-correctly-using-python|Convert XLSX to CSV correctly using python]] ==== mit Ubuntu 18.04 + python-xlrd Version 1.1.0-1 ==== > apt install python-xlrd > /usr/local/bin/xlsx2csv.sh sheet.xlsx > ls -lha *.csv #!/bin/bash # XLSX => CSV if [ -r "${1}" ] ; then XLSX_DATEI="${1}" #XLSX_VERZ="$(dirname "${XLSX_DATEI}")" XLSX_NAME="$(basename "${XLSX_DATEI}")" else echo "Die XLSX-Datei '${1}' kann nicht gelesen werden." exit 1 fi ALLE_SHEET_NAMEN="$(runxlrd -e'utf-8' -f0 ov ${XLSX_DATEI} | grep -E '^sheet [0-9]' | sed 's/://')" ALLE_SHEET_NR="$(echo "${ALLE_SHEET_NAMEN}" | awk '{print $2}')" for SHEET_NR in ${ALLE_SHEET_NR} do SHEET_NM="$(echo "${ALLE_SHEET_NAMEN}" | grep -E "^sheet ${SHEET_NR} " | awk -F"'" '{print $2}')" echo echo "...sheet ${SHEET_NR} '${SHEET_NM}' ist in Bearbeitung..." runxlrd -e'utf-8' -f0 -s${SHEET_NR} show ${XLSX_DATEI} | awk '/^cell /{gsub(":"," ");gsub(" u"," ");print $2,$5}' | sed -e 's/^[A-Z]*/& /' -e "s/'//g" | while read SPALTE ZEILE INHALT do if [ "${_Z}" = 0 ] ; then _Z="${ZEILE}" elif [ "${_Z}" != "${ZEILE}" ] ; then _Z="${ZEILE}" echo fi echo -n "${INHALT};" done > "${SHEET_NR}.${SHEET_NM}.${XLSX_NAME}".csv echo "fertig: ${SHEET_NR}.${SHEET_NM}.${XLSX_NAME}.csv" done ===== CSV => XLS mit Python ===== Leider wird csv nicht als Eingabeformat/Quellformat akzeptiert! Deshalb hat jemand ein Python-Script geschrieben, mit dem man CSV-Dateien in XLS-Dateien umwandeln kann. Um dieses Script nutzen zu können muss man erst das Modul "pyExcelerator" installiern. Dieses Modul kann Excel-97/2000/XP/2003-Dateien erzeugen, man kann es von hier beziehen (es steht unter BSD-Lizenz): * [[http://sourceforge.net/projects/pyexcelerator/]] ==== Installation ==== # unzip -L ~/Downloads/pyexcelerator-0.6.4.1.zip # cd pyexcelerator-0.6.4.1/ # python setup.py install ==== Anwendung ==== # ./csv2xls.py -h # ./csv2xls.py -o test.xls test.csv # ./csv2xls.py -s';' -t -o test.xls test.csv Die meisten machen sowas mit Excel oder OpenOffice per Hand, einige machen das auch mit Perl. ===== mit Ghostscript ===== Siehe auch hier: [[::PostScript (PS)#PDF-Dateien in TXT-Dateien umwandeln]] # aptitude install ps2eps ghostscript === Text (PDF -> PS -> TXT) === # pdf2ps Originaldatei.pdf datei.ps # ps2ascii datei.ps > datei.txt == /home/bin/pdf2txt.sh == #!/usr/bin/env bash if [ -z "${1}" ] ; then echo "${0} Datei1.pdf Datei2.pdf Datei3.pdf" exit 1 fi if [ -z "$(which pdf2ps)" ] ; then echo "pdf2ps (Ghostscript) ist nicht installiert" exit 1 fi if [ -z "$(which ps2ascii)" ] ; then echo "ps2ascii (Ghostscript) ist nicht installiert" exit 1 fi for _datei in ${@} do DATEINAME="$(echo "$(basename ${_datei})" | rev | sed 's/.*[.]//' | rev)" pdf2ps ${_datei} ${DATEINAME}.ps ps2ascii ${DATEINAME}.ps > ${DATEINAME}.txt && rm -f ${DATEINAME}.ps done === Grafik (PDF -> PS -> EPS) === In einzelne Seiten (mit einer Auflösung von 300 dpi) zerlegen: # pdf2ps -r300 dokument.pdf dokument_%04d.ps # ls -1 dokument.pdf dokument_0001.ps dokument_0002.ps dokument_0003.ps dokument_0004.ps Auf A4-Format umsetzen: # ps2eps -f -s a4 dokument_0001.ps Auf A4-Format umsetzen und dabei um 90 Grad rechts rum drehen: # ps2eps -f -s a4 -R + dokument_0002.ps Auf A4-Format umsetzen und dabei um 90 Grad links rum drehen: # ps2eps -f -s a4 -R - dokument_0003.ps Auf A4-Format umsetzen und dabei um 180 Grad drehen: # ps2eps -f -s a4 -R ^ dokument_0004.ps # ls -1 dokument.pdf dokument_0001.ps dokument_0002.ps dokument_0003.ps dokument_0004.ps dokument_0001.eps dokument_0002.eps dokument_0003.eps dokument_0004.eps === PS/EPS -> Grafik (JPEG, PNG, TIFF) === A4-hoch im JPEG-Format (verlustbehaftet): # cat dokument_0001.eps | gs -q -dNOPAUSE -g595x842 -sDEVICE=jpeg -sOutputFile=dokument_0001.jpg A4-quer im PNG-Format (verlustfrei, hat aber weniger Farben als TIFF): # cat dokument_0002.eps | gs -q -dNOPAUSE -g842x595 -sDEVICE=png48 -sOutputFile=dokument_0002.png Diese Seite wieder ins PDF-Format umwandeln: # gs -dSAFER -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=dokument_0003.pdf -f dokument_0003.ps A4-quer im TIFF-Format (verlustfrei): # cat dokument_0004.eps | gs -q -dNOPAUSE -g842x595 -sDEVICE=tifflzw -sOutputFile=dokument_0004.tif === EPS -> PDF === Aus verschiedenen Postscriptdateien oder eps-Dateien kann man auch wieder eine PDF-Datei machen: # gs -dSAFER -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=dokument_neu.pdf -f dokument_0001.ps dokument_0002.ps dokument_0003.ps oder # gs -dSAFER -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=dokument_neu.pdf -f dokument_0001.eps dokument_0002.eps dokument_0003.eps oder # gs -dSAFER -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=dokument_neu.pdf -f dokument_*.eps ==== Kurzanleitung ==== === Ghostscript === * [[http://www.thescripts.com/forum/thread267311.html]] # pdf2ps datei.pdf datei.ps # gs -sDEVICE=jpeg -sOutputFile=datei.jpg datei.ps == weitere Optionen == -q -dBATCH -pA4 -sDEVICE=epswrite -sDEVICE=tiffg4 -sDEVICE=png -sDEVICE=jpeg -dJPEGQ=75 -r600 (Qualität:75, DPI:600) ===== mit ImageMagick ===== __Seit ImageMagick Version 7 heißt das Kommando nicht mehr__ **''convert''** __sondern__ **''magick''**__. In FreeBSD wird ein SymLink von__ **''magick''** __auf__ **''convert''** __automatisch angelegt, damit alte Skripte auch weiterhin funktionieren.__ //Meine nicht repräsentativen Tests haben gezeigt, dass das konvertieren in das AVIF-Format bei einer ''quality''-Angabe von ca. "70", keine Unterschiede zu dem Original mehr sichtbar sind.// > magick original.webp -quality 70 ergebnis.avif //Will man die Dateigröße von einem Bild, mit relativ schlechter Qualität, verkleinern, dann ist der sinnvollste Weg, die Anzahl der Bildpunkte zu reduzieren.// > magick original.jpg -quality 90 -resize 1760x990 ergebnis.avif FreeBSD 13.0: # pkg search -o ImageMagick # pkg install graphics/ImageMagick7-nox11 graphics/pngwriter # convert identify -list format Will man die Unterstützung von ''HEIC/HEIF'', dann muss man es sich aus dem Ports-Tree bauen. - Auch bei Linux (Debian) gibt es diese Unterstützung nicht im regulären Paket. ---- Die erste Seite aus dem oben zerlegten PDF-Dokument soll hier um 90° links herum gedreht und ins A4-Format gebracht werden. Diese PostScript-Datei soll mit einer Auflösung von 300x300dpi gelesen werden, das stellt in diesem Fall die Ausgangsqualität dar. # convert -density 300x300 original.ps -rotate 270 -resize 595x842 ergebnis.png oder # convert -density 300x300 original.ps -rotate 270 -repage a4 ergebnis.png oder # convert -density 300x300 original.ps -rotate 270 -repage a4 -quality 95 ergebnis.png Hier wird ein JPEG-Bild, im Originalformat 2479x3508, in eine PNG-Datei ins 595x842-Format (A4) konvertiert: # convert -size 2479x3508 original.jpg -rotate 270 -resize 595x842 -quality 95 ergebnis.png Das Ergebnis kann auch eine Postscriptdatei sein: # convert -density 300x300 original.ps -rotate 270 -repage a4 ergebnis.ps Auch PDF-Dateien kann man hiermit bauen: # convert -density 300x300 dokument_0001.ps -density 300x300 dokument_0002.ps -density 300x300 dokument_0003.ps -repage a4 dokument_a4.pdf So kann man erfahren, was in einer Bilddatei steckt: # identify dokument_0001.ps dokument_0001.ps PS 1191x842 1191x842+0+0 16-bit DirectClass 1.448MiB 0.070u 0:00.079 Beispielskript: #!/usr/bin/env bash # # Dieses Skript skaliert alle Bilder, die im aktuellen Verzeichnis liegen, # in eine andere Größe. # Es werden die Ausgabedateien im PNG-Format abgelegt. # VERSION="v2013082101" #------------------------------------------------------------------------------# while [ "${#}" -ne "0" ]; do case "${1}" in -b) unset HOEHE BREITE=${2} shift ;; -h) HOEHE=${2} unset BREITE shift ;; -d) DENSITY=${2} shift ;; *) if [ "$(echo "${1}"|egrep '^-')" ] ; then echo "Der Parameter '${1}' wird nicht unterstuetzt!" fi shift ;; esac done #------------------------------------------------------------------------------# if [ -n "${BREITE}" ] ; then echo "alle Bilder sollen eine einheitliche Breite von ${BREITE} Pixel haben" neuesformat() { ZIELFORMAT="$(echo "${BB} ${BH} ${BREITE}" | awk '{print $3"x"$2*$3/$1}')" } elif [ -n "${HOEHE}" ] ; then echo "alle Bilder sollen eine einheitliche Hoehe von ${HOEHE} Pixel haben" neuesformat() { ZIELFORMAT="$(echo "${BB} ${BH} ${HOEHE}" | awk '{print $1*$3/$2"x"$3}')" } else echo " wenn alle Bilder eine einheitliche Breite haben sollen: ${0} -b 1024 wenn alle Bilder eine einheitliche Hoehe haben sollen: ${0} -h 1080 es kann auch die Bildpunktdichte mit angegeben werden: ${0} -d 72x72 -h 1080 ${0} -d 96x96 -h 1080 ${0} -d 150x150 -h 1080 ${0} -d 300x300 -h 1080 " exit 0 fi if [ -z "${DENSITY}" ] ; then DENSITY="72x72" #DENSITY="300x300" fi #------------------------------------------------------------------------------# ### https://www.heins.info/wiki/doku.php?id=dateiformate_konvertieren#mit_imagemagick # convert -density 300x300 original.ps -resize 595x842 ergebnis.png wandeln() { # identify DSCI0001.JPG # DSCI0001.JPG JPEG 4320x3240 4320x3240+0+0 8-bit sRGB 5.433MB 0.000u 0:00.007 BB="$(identify ${1} | awk '{print $3}' | awk -F'x' '{print $1}')" BH="$(identify ${1} | awk '{print $3}' | awk -F'x' '{print $2}')" if [ -n "${BB}" -a -n "${BH}" ] ; then neuesformat ${DATEINAME} echo "${1} -> ${1}_-_${ZIELFORMAT}.png" convert -density ${DENSITY} ${1} -resize ${ZIELFORMAT} ${1}_-_${ZIELFORMAT}.png fi } #------------------------------------------------------------------------------# for DATEINAME in $(ls) do if [ -f ${DATEINAME} ] ; then wandeln ${DATEINAME} fi done ==== Kurzanleitung - PS/EPS/PDF -> PNG ==== === Standard === # convert Datei.pdf Datei.png # convert -density 72 Datei.pdf Datei.png === leicht vergrößert === # convert -density 100 Datei.pdf Datei.png === stark vergrößert === # convert -density 300x300 Datei.pdf Datei.png === in ein Einheitsformat bringen === # identify Bild.jpg Bild.jpg JPEG 1191x842 1191x842+0+0 16-bit DirectClass 1.448MiB 0.070u 0:00.079 # convert -size 1191x842 Bild.jpg -resize 720x576 -background black -compose Copy -gravity center -extent 720x576 -quality 95 Bild_720x576.png == /home/bin/bilder_resize.sh == #!/bin/bash BILD="${1}" NEFORMAT="720x576" # Einheitsformat BNAME="$(basename ${BILD} | rev | awk '{sub("[.]"," ");print $2}' | rev)" OFORMAT="$(identify | awk '{print $3}' || exit 1)" convert -size ${OFORMAT} ${BILD} -resize ${NEFORMAT} -background black -compose Copy -gravity center -extent ${NEFORMAT} -quality 95 ${BNAME}_${NEFORMAT}.png so wird das Script angewendet: # /home/bin/bilder_resize.sh Bild.jpg ==== mehrseitige Projekte von XSane mit ImageMagick nach PDF ==== Wenn man mit XSane "mehrseitig" einstellt und dazu ein Projekt anlegt, dann wird ein Verzeichnis mit dem Projekt-Namen angelegt. Dann scannt man alle Seiten ein, die daraufhin in diesem Verzeichnis als PNM-Dateien abgelegt werden. Wenn diese Seiten im Querformat beschrieben wurden, dann müssen diese PNM-Dateien noch gedreht werden. === PNM von Hand zu PDF === So kann man diese PNM-Dateien zu einer mehrseitigen PDF-Datei zusammen bauen: als erstes in das XSane-Projekt-Verzeichnis wechseln: > cd ~/xsaneprojekt PNM -> EPS: > convert image-0001.pnm image-0001.eps PNM -> EPS mit einer Rechtsdrehung: > convert image-0001.pnm -rotate 90 image-0001.eps PNM -> EPS mit einer Rechtsdrehung und einer Verringerun der Auflösung auf 200dpi, dmit die PDF-Datei nicht zu groß wird: > convert image-0001.pnm -rotate 90 -density 200x200 image-0001.eps wenn auf diese Weise alle PNM-Dateien in EPS-Dateien umgewandelt wurden, dann kann man die mehrseitige PDF-Datei aus allen EPS-Dateien bauen: > convert image-*.eps xsaneprojekt.pdf === PNM per Skript zu PDF === Hier ein Skript dafür: > vi Scan2pdf.sh #!/bin/bash # # PNM-Dateien zu einer mehrseitigen PDF-Datei zusammen bauen # #------------------------------------------------------------------------------# if [ -z "${2}" ] ; then echo "${0} 'image-*.pnm' 'Dokument.pdf'" exit 1 fi #------------------------------------------------------------------------------# ### Variablen # # A4: 8,268 Zoll x 11,693 Zoll # #DPI="-density 72x72" #DPI="-density 100x100" DPI="-density 200x200" #DPI="-density 300x300" #DREHUNG="-rotate 90" # rechts rum drehen #DREHUNG="-rotate 180" # auf dem Kopf drehen #DREHUNG="-rotate 270" # links rum drehen ##FORMAT="-repage a4" ##FORMAT="-repage a5" ##FORMAT="-repage a6" #------------------------------------------------------------------------------# for i in ${1} do rm -f ${i}.eps echo "convert ${i} ${DREHUNG} ${DPI} ${i}.eps" convert ${i} ${DREHUNG} ${DPI} ${i}.eps done #------------------------------------------------------------------------------# rm -f ${2} echo "convert ${1}.eps ${FORMAT} ${2}" convert ${1}.eps ${FORMAT} ${2} rm -f ${1}.eps identify ${2} | head -n1 ls -lha ${2} so könnte man es beispielsweise benutzen (erst die Einstellungen in der Datei nach Wunsch vornehmen, wie "Drehung" bzw. "DPI"): > cd ~/xsaneprojekt > .../bin/Scan2pdf.sh 'image-*.pnm' 'xsaneprojekt.pdf' ===== mit AbiWord ===== * [[http://www.issociate.de/board/post/427260/PDF_to_image.html]] (Tex und AbiWord müssen installiert sein) # abiword --to=latex datei.doc # latex --interaction=batchmode datei.latex # dvigif datei.dvi ===== Webseite auf der Kommandozeile saugen und umwandeln ===== ==== einfach nur saugen ==== # wget -F --no-check-certificate https://heins.info/wiki/doku.php?id=vernetzung -O vernetzung.html ==== DokuWiki-Seiten saugen und als statische Webseite ablegen ==== Das im folgenden beschriebene Vorgehen wurde an diesem Wiki getestet. === zu Fuß === Eine dynamische Seite (in diesem Fall eine "DokuWiki"-Seite) vom Home-Server saugen und als statische HTML-Seiten ablegen, damit man sie auf den gemieteten Webserver hoch laden kann. Das ist sinnvoll, wenn man nur eine billige Webseite bei einem billigen Web-Hoster gemietet hat, auf der man bestimmte Dinge nicht tun kann, weil dort praktisch nichts installiert wurde. Dann baut man sich zu Hause seinen Web-Server mit vollem Funktionsumfang auf und konvertiert die dynamischen Seiten dann in statische, die dann ins Internet hochgeladen werden können, oder auch auf einen USB-Stick abgelegt werden können. # wget -F --no-check-certificate https://www.heins.info/wiki/doku.php?id=vernetzung -O - | sed -e 's#href="/wiki/lib/exe/#href="#' -e 's# # # wget -F --no-check-certificate "https://${WIKISERVER}/wiki/doku.php?id=${WIKI}" -O - | sed \ -e 's###g' \ -e 's###g' \ -e 's###g' \ -e 's#/wiki/lib/tpl/default/images/favicon.ico#favicon.ico#' \ -e 's#start&do=backlink#start.html#' \ -e 's#href="start"#href="start.html"#' \ > ${ZIEL}/${WIKI}.html done ### CSS-Dateien # wget -F --no-check-certificate "https://${WIKISERVER}/wiki/lib/exe/css.php?s=all&t=default&tseed=1274567601" -O /tmp/all.css cat /tmp/all.css | sed -e 's#}#}³#g' -e 's#(/wiki/lib/images/fileicons/#(#g' -e 's#(/wiki/lib/images/interwiki/#(#g' -e 's#(/wiki/lib/images/#(#g' | tr -s '³' '\n' > ${ZIEL}/all.css wget -F --no-check-certificate "https://${WIKISERVER}/wiki/lib/exe/css.php?t=default&tseed=1274567601" -O /tmp/screen.css cat /tmp/screen.css | sed -e 's#}#}³#g' -e 's#(/wiki/lib/images/fileicons/#(#g' -e 's#(/wiki/lib/images/interwiki/#(#g' -e 's#(/wiki/lib/images/#(#g' | tr -s '³' '\n' > ${ZIEL}/screen.css wget -F --no-check-certificate "https://${WIKISERVER}/wiki/lib/exe/css.php?s=print&t=default&tseed=1274567601" -O /tmp/print.css cat /tmp/print.css | sed -e 's#}#}³#g' -e 's#(/wiki/lib/images/fileicons/#(#g' -e 's#(/wiki/lib/images/interwiki/#(#g' -e 's#(/wiki/lib/images/#(#g' | tr -s '³' '\n' > ${ZIEL}/print.css ### Dateien, auf die in den CSS-Dateien verwiesen wird # cat /tmp/all.css /tmp/screen.css /tmp/print.css | sed -e 's#}#}³#g' | tr -s '³' '\n' | sed -e 's#.*(/wiki/##g' -e 's#).*##g' | while read DATEI do if [ -r "${QUELLE}/${DATEI}" ] ; then cp ${QUELLE}/${DATEI} ${ZIEL}/ fi done ### eingebettete Bilder ins Ziel-Verzeichniss kopieren # cp -a ${QUELLE}/data/media/* ${ZIEL}/ #cp -a ${QUELLE}/lib/tpl/default/images/favicon.ico ${ZIEL}/ Jetzt das Script starten: # bash wiki2portabel.sh Wenn das Script gelaufen ist, wird ein Verzeichnis (in diesem Fall ist es "/tmp/wiki") existieren, in dem alle nötigen Dateien für das Wiki im Offline-Betrieb liegen. Gestartet wird das Wiki dann zum Beispiel so: # firefox /tmp/wiki/index.html oder so # firefox /tmp/wiki/start.html ==== Webseite auf der Kommandozeile ins PDF-Format umwandeln ==== - Plugin saugen: http://sites.google.com/site/torisugari/commandlineprint2 - weil man bei Google keine XPI-Datei hoch laden kann, ist sie als ZIP-Datei hochgeladen worden. Die ZIP-Datei muss jetzt ausgepackt werden, so das man nur noch die XPI-Datei hat. - Plugin installieren: Mozilla Browser (Firefox) starten und dann über "Datei" -> "Datei öffnen...", dann die XPI-Datei wählen und öffnen. - Browser neu starten # firefox -print https://server.de/seite.php -printmode pdf -printfile seite.pdf Und jetzt per Script eine Liste abarbeiten lassen. Als erstes erstellen wir uns eine Liste von URL's: # vi /tmp/urlliste.txt https://heins.info/wiki/doku.php?id=vernetzung http://sites.google.com/site/torisugari/commandlineprint2 http://www.pro-linux.de/news/1/print/15757/native-zfs-unterstuetzung-fuer-linux-vorgestellt.html Die Liste darf auch noch viel länger sein... ;-) Und jetzt wandeln wir diese URL's in PDF-Dateien um: #!/bin/sh QUELLE="/tmp/urlliste.txt" ZIEL="/tmp" cat ${QUELLE} | egrep -v '^$' | while read URL do firefox -print ${URL} -printmode pdf -printfile ${ZIEL}/${URL}.pdf done