Kirjoittaja Aihe: [Ratkaistu] Kuinka tehdä vihko ?  (Luettu 4051 kertaa)

kamara

  • Käyttäjä
  • Viestejä: 3031
    • Profiili
[Ratkaistu] Kuinka tehdä vihko ?
« : 28.02.16 - klo:16.16 »
Minulla on kaksipuoleista tulostusta tukeva tulostin, ja tiedosto, jossa on liitteen mukainen sivujärjestys.

Kuinka saisi järjestyksen muutettua siten, että siitä saisi muodostettua vihkon s.e. laittaa niitit keskelle ?

Mitä tarvitsee tehdä ?

Joutuuko imagemagick:iä käyttää, vai onko jokin oikopolku ?

Edit - psbook , mutta kuinka ?
« Viimeksi muokattu: 29.02.16 - klo:09.54 kirjoittanut kamara »

nm

  • Käyttäjä
  • Viestejä: 16428
    • Profiili
Vs: Kuinka tehdä vihko ?
« Vastaus #1 : 28.02.16 - klo:16.45 »
Esimerkissäsi on valmiiksi kaksi sivua yhdellä PDF-sivulla. Hankaloittaa muunnosta turhaan, kun sivut pitäisi ensin erotella toisistaan ja sitten järjestellä uudelleen ja yhdistää.

Onko valmis PDF ainoa mahdollinen syöte muunnokselle? Jos kyseessä on tekstidokumentti, voisit tulostaa sen LibreOfficella suoraan vihkoksi (brochure): Tiedosto -> Tulosta... -> Sivun asettelu -> Esite

kamara

  • Käyttäjä
  • Viestejä: 3031
    • Profiili
Vs: Kuinka tehdä vihko ?
« Vastaus #2 : 28.02.16 - klo:16.55 »
Onko valmis PDF ainoa mahdollinen syöte muunnokselle? Jos kyseessä on tekstidokumentti, voisit tulostaa sen LibreOfficella suoraan vihkoksi (brochure): Tiedosto -> Tulosta... -> Sivun asettelu -> Esite

Valitettavasti syötteenä voin antaa vai pdf:ää tai lisäksi tietenkin ps:ää. Onko helpointa imagemagick:n convertilla jakaa sivut kahdeksi ?

Se on hivenen hidasta, lisäksi scriptin tekemiseen, joutuu hivenen miettimään.

kamara

  • Käyttäjä
  • Viestejä: 3031
    • Profiili
Vs: Kuinka tehdä vihko ?
« Vastaus #3 : 28.02.16 - klo:20.14 »
Kuinkas tehdä conver:lla A4 Portrait, kun näyttää tekevän väkisinkin Landskapea.

(Siis tämä on saman ongelman osaongelmaa...)

Tällaista olen yrittänyt:
Koodia: [Valitse]
echo "TULI !!!!!!"
convert -density 600 -crop 3508x4958+0+0 $f -density 600 page.png
convert -density 600 page.png -auto-orient book.pdf

kamara

  • Käyttäjä
  • Viestejä: 3031
    • Profiili
Vs: Kuinka tehdä vihko ?
« Vastaus #4 : 29.02.16 - klo:07.47 »
Jaahas... Tuli tehtyä purkkaratkaisu...

Kuvien pilkkominen bash:lla...
Koodia: [Valitse]
#!/bin/bash
declare -i nro
nro="0"
for f in kirja*.png
do
nro="$nro+1"
echo "$nro"
echo $f
if [[ $nro = 1 ]]
then
echo "TULI !!!!!!"
convert -density 600 -crop 3508x4958+0+0 $f -density 600 page$nro.png
#convert -density 600 page.png -auto-orient book.pdf
else
echo convert -density 600 -crop 3508x4958+0+0 $f -density 600 page$nro.png
convert -density 600 -crop 3508x4958+0+0 $f -density 600 page$nro.png
#convert -crop 3508x4958+0+0 $f page$nro.png
fi
nro="$nro+1"
echo "$nro"
echo $f
echo convert -density 600 -crop 3508x4958+3508+0 $f -density 600 page$nro.png
convert -density 600 -crop 3508x4958+3508+0 $f -density 600 page$nro.png
#convert -crop 3508x4958+3508+0 $f page$nro.png
done


Png portrateksi php:llä.

Koodia: [Valitse]
<?php
require_once('tcpdf_include.php'); 
$imgfile="kuva.png";
$ext="";
if(isset(
$argv[1])) {
if(isset($argv[2])) {
$ext=$argv[2];
}
$imgfile=$argv[1];
}
if (
$ext!="") {
$i=0;
while (file_exists($imgfile.($i+1).$ext)) {
$a[$i]=$imgfile.($i+1).$ext;
$i++;
}
//print (count($a))
$imagefiles=$a;
} else 
$imagefiles[0]=$imgfile;

$imgfile=$imagefiles[0];

$image=imagecreatefrompng($imgfile);
if (
substr($imgfile,-4)==".png")  {
$image=imagecreatefrompng($imgfile);
} else if(
substr($imgfile,-4)=='.jpg')  {
$image=imagecreatefromjpeg($imgfile);
}
/**/

$imagesy=imagesy($image);
$imagesx=imagesx($image);
imagedestroy($image);
// $portrate="L";
// $xmax=280;
// $ymax=190;
//echo "$imagesx,$imagesy";
if($imagesx>$imagesy) {
$portrate="L";
$xmax=280;
$ymax=190;
} else {
$portrate="P";
$xmax=190;
$ymax=280;
}



$pdf=new TCPDF($portrate"mm""A4"true'UTF-8'false); //FPDF('P','mm','A4');
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Sami Ojanen');
$pdf->SetTitle('Printing');
$pdf->SetSubject('Printing');
$pdf->SetKeywords('TCPDF, PDF, print');
$pdf->SetTopMargin(0);
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->SetAutoPageBreak(falsePDF_MARGIN_BOTTOM);
for(
$i=0;$i<count($imagefiles);$i++) {
$imgfile=$imagefiles[$i];
$pdf->addPage();
$marginx=10;
$marginy=10;
$pdf->SetMargins($marginx,$marginy);

$k=$imagesy/$imagesx;
$width=$ymax/$k;
$height=$ymax;
if($width>$xmax) {
$width=$xmax;
$height=$xmax*$k;
}
$x=$marginx+($xmax-$width)/2;
$y=$marginy;
$pdf->Image($imgfile,$x,$y,$width,$height); /* */
}
//$pdf->AddPage();
//$pdf->SetFont('Arial','B',16);
//$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>


png:t pdf:ksi
Koodia: [Valitse]
php phppdf/png2pdf.php page .png >book.pdf

pdf:stä ps:ksi...
Koodia: [Valitse]
pdf2ps book.pdf book.ps

ps vihkoksi...
Koodia: [Valitse]
psbook book.ps bookVihko.ps
cat bookVihko.ps|psnup -s1 -2 |ps2pdf - Valmiskirja.pdf

Tekee töitä edelleen, mutta saattaa onnistua.

kamara

  • Käyttäjä
  • Viestejä: 3031
    • Profiili
Vs: Kuinka tehdä vihko ?
« Vastaus #5 : 29.02.16 - klo:09.54 »
ps vihkoksi...
Koodia: [Valitse]
psbook book.ps bookVihko.ps
cat bookVihko.ps|psnup -s1 -2 |ps2pdf - Valmiskirja.pdf

Tekee töitä edelleen, mutta saattaa onnistua.

Eipä siitä tullut haluamani lainen.  :P

Joutui tekemään uuden psbook:in.

Tässä PHP-sorsaa.
Koodia: [Valitse]
<?php
require_once('tcpdf_include.php'); 
$debug=false;
//$debug=true; //false;
$imgfile="kuva.png";
$ext="";
if(isset(
$argv[1])) {
if(isset($argv[2])) {
$ext=$argv[2];
}
$imgfile=$argv[1];
}
if (
$ext!="") {
$i=0;
while (file_exists($imgfile.($i+1).$ext)) {
$a[$i]=$imgfile.($i+1).$ext;
$i++;
}
//print (count($a))
$imagefiles=$a;
} else 
$imagefiles[0]=$imgfile;

$imgfile=$imagefiles[0];
$count=count($imagefiles)+3-((count($imagefiles)-1) % 4);
if (
$debug) print "count:$count\n";
$pageEnd=$count-1;
$pageStart=0;
$pageStartRight=true;

$image=imagecreatefrompng($imgfile);
if (
substr($imgfile,-4)==".png")  {
$image=imagecreatefrompng($imgfile);
} else if(
substr($imgfile,-4)=='.jpg')  {
$image=imagecreatefromjpeg($imgfile);
}
/**/

$imagesy=imagesy($image);
$imagesx=imagesx($image);
imagedestroy($image);
// $portrate="L";
// $xmax=280;
// $ymax=190;
//echo "$imagesx,$imagesy";
if($imagesx>$imagesy) {
$portrate="L";
$xmax=280;
$ymax=190;
} else {
$portrate="L"// Vanha Portrate (P)
$ymax=190;
$xmax=140;   // Vanha 280
}



$pdf=new TCPDF($portrate"mm""A4"true'UTF-8'false); //FPDF('P','mm','A4');
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Sami Ojanen');
$pdf->SetTitle('Printing');
$pdf->SetSubject('Printing');
$pdf->SetKeywords('TCPDF, PDF, print');
$pdf->SetTopMargin(0);
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->SetAutoPageBreak(falsePDF_MARGIN_BOTTOM);
for(
$i=0;$i<$pageEnd;$i++,$pageEnd--) {
$imgfile=$imagefiles[0];
$pdf->addPage();
$marginx=10;
$marginy=10;
$pdf->SetMargins($marginx,$marginy);

$k=$imagesy/$imagesx;
$width=$ymax/$k;
$height=$ymax;
if($width>$xmax) {
$width=$xmax;
$height=$xmax*$k;
}
$x=$marginx+($xmax-$width)/2;
$y=$marginy;
if(($i&1)==1) {
if(isset($imagefiles[$i])) $imgfile=$imagefiles[$i];
else $imgfile="";
if(isset($imagefiles[$pageEnd])) $imgfile2=$imagefiles[$pageEnd];
else $imgfile2="";
} else {
if(isset($imagefiles[$i])) $imgfile2=$imagefiles[$i];
else $imgfile="";
if(isset($imagefiles[$pageEnd])) $imgfile=$imagefiles[$pageEnd];
else $imgfile="";
}
if($debug) { print "[$imgfile,$imgfile2],"; }
else {
if(file_exists($imgfile)) $pdf->Image($imgfile,$x,$y,$width,$height); /* */
if(file_exists($imgfile2)) $pdf->Image($imgfile2,$x+$xmax,$y,$width,$height); /* */
}
}
//$pdf->AddPage();
//$pdf->SetFont('Arial','B',16);
//$pdf->Cell(40,10,'Hello World!');
if(!$debug) $pdf->Output();
?>

jarmala

  • Käyttäjä
  • Viestejä: 790
    • Profiili
Vs: Kuinka tehdä vihko ?
« Vastaus #6 : 01.03.16 - klo:02.57 »
Hip! Tämä keskustelu osoittautuikin minulle erittäin hyödylliseksi: vaikuttaa siltä, että opin vihdoin tekemään pdf-tiedostoista vihkoja:

Koodia: [Valitse]
$ pdf2ps input.pdf koe.ps
$ cat koe.ps |  psbook -s4 | psnup -2 | ps2pdf - koe.pdf

[4] [1] [2] [3] [8] [5] [6] [7] [12] [9] [10] [11] [*] [13] [*] [*]
Wrote 16 pages, 767767 bytes
[1] [2] [3] [4] [5] [6] [7] [8] Wrote 8 pages, 774737 bytes
ari@ari:~$ evince koe.pdf

 -taitaa näyttää toimivan...

Nyt ei enää varmaan ole pitkä matka siihen, että oppisin tekemään kirjoja, koska nehän koostuvat useista vihkoista. Varmaan tämänkin ongelman on jo joku maailmassa ratkaissut - eli sanotaan nyt vaikka, että 304 -sivuinen pdf-dokumentti pitäisi tulostaa 32 sivun vihkoiksi (jotka siis koostuvat kahdeksasta A4-kokoisesta arkista). Kirjaan tulisi siis 10 kpl niitä 32 sivua käsittäviä vihkoja. Hmm?

T. Ari
« Viimeksi muokattu: 01.03.16 - klo:03.01 kirjoittanut jarmala »
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

kamara

  • Käyttäjä
  • Viestejä: 3031
    • Profiili
Vs: Kuinka tehdä vihko ?
« Vastaus #7 : 01.03.16 - klo:12.01 »
Hip! Tämä keskustelu osoittautuikin minulle erittäin hyödylliseksi: vaikuttaa siltä, että opin vihdoin tekemään pdf-tiedostoista vihkoja:

Täytyy hivenen lannistaa onnistumisen riemuasi..

Teeppäs kokeilu jollakin tekstillä, joka on esimerkiksi tasattu molemmilta puolilta. Ainakin itselläni tekstiä marginaalien yli. Toisin sanoen sivut eivät sisältäneet kaikkia tekstejä, vaan teksti meni yli sivun.

No, ratkaisin asian brutaalilla tavalla, ja tein php-ohjelman, joka tekee kuvista A5-kokoa olevan vihkon, vaikkakin omanikin saattaa sisältää bugeja.

PHP-ohjelmaani saa vapaasti käyttää, ja korjata bugeja ...

Se tosin tarvitsee tcpdf:n  ja php:n asennuksen, ja ehkä vähän muutakin.