[LØST] Resizepdf i min .basrc

Alle tekniske spørgsmål som ikke hører ind under de andre fora.
klgn
Indlæg: 39
Tilmeldt: 10. sep 2007, 12:57

[LØST] Resizepdf i min .basrc

Indlæg af klgn »

Hejsa!

Jeg har fundet følgende kodestump, som jeg bruger til at mindske størrelsen på pdf-filer.

Kode: Vælg alt

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf


Der er jo intet levende menneske på jorden, der kan den kommando i hovedet, og således heller ikke mig, så derfor har jeg villet smide den ind i min .bashrc-fil med et alias.

Jeg skrev:

Kode: Vælg alt

alias resizepdf='gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=$2 $1'


Det virker imidlertid ikke, jeg får følgende fejl:
**** Unable to open the initial device, quitting.

Jeg har også prøvet at definere den som funktion:

Kode: Vælg alt

function resizepdf (){
  'gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=$2 $1'
}


Ligeledes uden held.

Det skal siges, at kommandoen virker, hvis jeg indtaster den manuelt.

Nogen bud på, hvorfor det ikke virker, og hvordan jeg får det til at virke?

/Kristian
Senest rettet af klgn 2. jul 2010, 11:26, rettet i alt 1 gang.
laoshi
Redaktør
Indlæg: 5515
Tilmeldt: 26. apr 2008, 20:52
IRC nickname: laoshi
Geografisk sted: Vejle

Re: Resizepdf i min .basrc

Indlæg af laoshi »

For at få den som alias, så prøv at tilføje alias-kommandoen til din ~/.bash_aliases. Hvis du ikke har en sådan, så opret den selv.
Så skal du sørge for at den bliver læst, ved at redigere i ~/.bashrc. Åbn den i gedit og lokaliser de linjer som ser sådan ud:

Kode: Vælg alt

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
#if [ -f ~/.bash_aliases ]; then
#    . ~/.bash_aliases
#fi


her skal du fjerne # fra de 3 sidste linjer, så der kommer til at stå

#

Kode: Vælg alt

 Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi


Du gør så dit alias permanent ved at reloade .bash_aliases og .bashrc

Kode: Vælg alt

. .bash_aliases
. .bashrc


(dvs. punktum ophold punktum+filnavn)

PS: Vi lader lige tråden blive i Guides og HowTos - når det lykkes (og det skulle det da gerne) så er det jo en snild lille ting.
"Von guten Mächten wunderbar geborgen
erwarten wir getrost was kommen mag.
Gott ist mit uns am Abend und am Morgen
Und ganz gewiss an jedem neuen Tag"

(Dietrich Bonhoeffer 1906-1945)

http://www.stromata.dk
https://wiki.ubuntu.com/FlemmingChristensen
https://launchpad.net/~laoshi
klgn
Indlæg: 39
Tilmeldt: 10. sep 2007, 12:57

Re: Resizepdf i min .basrc

Indlæg af klgn »

Det virker stadig ikke, jeg får samme fejl :(

Udover, at det kan være handy at smide sine alias'er i en seperat fil, hvad er så argumentet for at gøre det? Det bør vel ikke betyde noget for, om en given kommando virker eller ej?

/Kristian
laoshi
Redaktør
Indlæg: 5515
Tilmeldt: 26. apr 2008, 20:52
IRC nickname: laoshi
Geografisk sted: Vejle

Re: Resizepdf i min .basrc

Indlæg af laoshi »

Udover, at det kan være handy at smide sine alias'er i en seperat fil, hvad er så argumentet for at gøre det?
- det er lige præcis det der er grunden til det: det er meget lettere at overskue, og når man én gang for alle har lavet ændringen i bashrc, så behøver man ikke at gøre mere ved den.

Selv funktionen af scriptet må jeg indrømme at jeg ikke har set så meget på - hvordan kører du det som ren kommando?
Et alias eller et script må jo i hvert fald have en mulighed for at man kan give filnavnene som input og output.
"Von guten Mächten wunderbar geborgen
erwarten wir getrost was kommen mag.
Gott ist mit uns am Abend und am Morgen
Und ganz gewiss an jedem neuen Tag"

(Dietrich Bonhoeffer 1906-1945)

http://www.stromata.dk
https://wiki.ubuntu.com/FlemmingChristensen
https://launchpad.net/~laoshi
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Resizepdf i min .basrc

Indlæg af lath »

klgn skrev:

Kode: Vælg alt

alias resizepdf='gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=$2 $1'



Enkelt-quotes slår fortolkning fra, dvs at $1 og $2 er noget som gs modtager.

Hvis du skal slå fortolkning til kan du bruge double-qoutes (anførsels-tegn). Se også: http://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html, og http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/quoting.html

Edit:
Efter at jeg har tænkt nærmere over det er det vel egentlig en fejl at placere en alias i .bashrc i dette tilfælde da du bruger 2 argumenter: $1, og $2.
Hvor skal de komme fra?
Fra: http://ss64.com/bash/alias.html
...
There is no mechanism for using arguments in the replacement text, as in csh.
If arguments are needed, a shell function should be used .
...


Det gør du således, hvis du vil oprette et script, men du kan selvfølgelig også selv lave en funktion, som du indsætter i .bashrc. Dette er script metoden:
  • 1) opret en bin mappe i din hjemmemappe:

    Kode: Vælg alt

    mkdir $HOME/bin
  • 2) og gør den til arbejdsmappen:

    Kode: Vælg alt

    cd $HOME/bin
  • 3) opret en ny fil, som du giver navnet resizepdf

    Kode: Vælg alt

    touch resizepdf
  • 4) Åbn filen med en tekst editor.

    Kode: Vælg alt

    gedit resizepdf
  • 5) Indsæt følgende tekst
    #!/bin/bash
    exec gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=$2 $1
  • 6) gem
  • 7) og luk Gedit
  • 8 ) Nu skal vi gøre scriptet kørbart:

    Kode: Vælg alt

    chmod 755 resizepdf

Så er du færdig. Nu kan du skrive kalde scriptet med dets navn: resizepdf fra en Terminal med 2 argumenter, og så skulle scriptet kalde gs programmet med det argumenter du skrev.

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
klgn
Indlæg: 39
Tilmeldt: 10. sep 2007, 12:57

Re: Resizepdf i min .basrc

Indlæg af klgn »

laoshi skrev:Selv funktionen af scriptet må jeg indrømme at jeg ikke har set så meget på - hvordan kører du det som ren kommando?
Et alias eller et script må jo i hvert fald have en mulighed for at man kan give filnavnene som input og output.


Jeg kører den bare rent, hvor jeg erstatter $1 med input-filen, og $2 med filnavnet, som jeg ønsker den skal gemmes.

lath skrev:Så er du færdig. Nu kan du skrive kalde scriptet med dets navn: resizepdf fra en Terminal med 2 argumenter, og så skulle scriptet kalde gs programmet med det argumenter du skrev.

/Lars


Tak foir tippet, det virker imidlertid stadig ikke. Jeg får stadig samme fejl, jeg tror, der går noget galt med ghostscript, der fejler. Jeg har googlet fejlen, men der kommer intet brugbart op - eller også er jeg ikke stjernen til at fortolke det til noget, som er relevant for mig. Jeg har blot fundet kommandoen på nettet, og så indtil nu smidt den ind i mine aliaser.

Nogen eksperter i ghostscript tilstede?

EDIT: Link, der måske kan hjælpe Jer: http://pages.cs.wisc.edu/~ghost/doc/cvs/Issues.htm

/Kristian
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Resizepdf i min .basrc

Indlæg af lath »

klgn skrev:
laoshi skrev:Selv funktionen af scriptet må jeg indrømme at jeg ikke har set så meget på - hvordan kører du det som ren kommando?
Et alias eller et script må jo i hvert fald have en mulighed for at man kan give filnavnene som input og output.


Jeg kører den bare rent, hvor jeg erstatter $1 med input-filen, og $2 med filnavnet, som jeg ønsker den skal gemmes.

lath skrev:Så er du færdig. Nu kan du skrive kalde scriptet med dets navn: resizepdf fra en Terminal med 2 argumenter, og så skulle scriptet kalde gs programmet med det argumenter du skrev.

/Lars


Tak foir tippet, det virker imidlertid stadig ikke. Jeg får stadig samme fejl, jeg tror, der går noget galt med ghostscript, der fejler. Jeg har googlet fejlen, men der kommer intet brugbart op - eller også er jeg ikke stjernen til at fortolke det til noget, som er relevant for mig. Jeg har blot fundet kommandoen på nettet, og så indtil nu smidt den ind i mine aliaser.

Nogen eksperter i ghostscript tilstede?

EDIT: Link, der måske kan hjælpe Jer: http://pages.cs.wisc.edu/~ghost/doc/cvs/Issues.htm

/Kristian


Jeg mente: Du kan kalde det fra terminalen, ikke .bashrc, og filen (resizepdf) skal ligge i din $HOME/bin mappe eller en anden mappe som $PATH udpeger.
Det virker heller ikke i en Terminal du allerede har åbent, fordi at det er .bashrc der inkluderer $HOME/bin mappen i $PATH, hvis bin mappen eksisterer.
Hvis gedit lægger en fillås på .bashrc virker det heller ikke, før gedit er lukket, og du har startet en ny terminal.

Dette er en del selvfølgeligheder for Bash scripting programmører. Måske er du er nok lidt newbie ud i Bash scripting, så det er nok en masse nye ting for dig.

Håber det er noget du kan bruge.

Hvis du ikke ved hvad du skal gøre så giv mig en absolut sti + filnavn til en pdf fil, så kan jeg skrive et indlæg hvor jeg forklarer hvad du skal gøre.

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
laoshi
Redaktør
Indlæg: 5515
Tilmeldt: 26. apr 2008, 20:52
IRC nickname: laoshi
Geografisk sted: Vejle

Re: Resizepdf i min .basrc

Indlæg af laoshi »

Du får lige her et lille script som kan udføre det du gerne vil.

#1 /bin/bash
#et primitivt udkast til script som formindsker pdf-filer ved hjælp af ghostscript. se viewtopic.php?f=11&t=11274 outputfilen gemmes i det directory som scriptet køres fra. flemming christensen (laoshi) 2. juli 2010.
echo "FORMINDSKELSE AF PDF-FILER"
echo -n "Skriv navnet på den fil som skal formindskes: "
read file_in
echo -n "Skriv navnet på den formindskede fil: "
read file_out
echo "Du vil formindske filen $file_in der skal gemmes som $file_out"
exec gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=$file_out $file_in


Hvis du gemmer det under navnet resizepdf.sh i din Hjemmemappe - så skal du først lige gøre det kørbart med

Kode: Vælg alt

chmod +x resizepdf.sh
- og så kan det kaldes med kommandoen

Kode: Vælg alt

./resizepdf.sh


Så er der lidt at arbejde videre med.
"Von guten Mächten wunderbar geborgen
erwarten wir getrost was kommen mag.
Gott ist mit uns am Abend und am Morgen
Und ganz gewiss an jedem neuen Tag"

(Dietrich Bonhoeffer 1906-1945)

http://www.stromata.dk
https://wiki.ubuntu.com/FlemmingChristensen
https://launchpad.net/~laoshi
klgn
Indlæg: 39
Tilmeldt: 10. sep 2007, 12:57

Re: Resizepdf i min .basrc

Indlæg af klgn »

lath skrev:Jeg mente: Du kan kalde det fra terminalen, ikke .bashrc, og filen (resizepdf) skal ligge i din $HOME/bin mappe eller en anden mappe som $PATH udpeger.
Det virker heller ikke i en Terminal du allerede har åbent, fordi at det er .bashrc der inkluderer $HOME/bin mappen i $PATH, hvis bin mappen eksisterer.
Hvis gedit lægger en fillås på .bashrc virker det heller ikke, før gedit er lukket, og du har startet en ny terminal.

Dette er en del selvfølgeligheder for Bash scripting programmører. Måske er du er nok lidt newbie ud i Bash scripting, så det er nok en masse nye ting for dig.

Håber det er noget du kan bruge.

Hvis du ikke ved hvad du skal gøre så giv mig en absolut sti + filnavn til en pdf fil, så kan jeg skrive et indlæg hvor jeg forklarer hvad du skal gøre.

/Lars

Efter jeg fik tilføjet $HOME/bin til min PATH virker det. Tak for tippet:)

Laoshi: Tak for din løsning, men jeg foretrækker en løsning, hvor jeg kan benytte terminalens autocomplete-funktion :)
laoshi
Redaktør
Indlæg: 5515
Tilmeldt: 26. apr 2008, 20:52
IRC nickname: laoshi
Geografisk sted: Vejle

Re: Resizepdf i min .basrc

Indlæg af laoshi »

Fint nok. Der er som regel mange forskellige veje til samme mål...
"Von guten Mächten wunderbar geborgen
erwarten wir getrost was kommen mag.
Gott ist mit uns am Abend und am Morgen
Und ganz gewiss an jedem neuen Tag"

(Dietrich Bonhoeffer 1906-1945)

http://www.stromata.dk
https://wiki.ubuntu.com/FlemmingChristensen
https://launchpad.net/~laoshi