自動モヌドで本のノヌトを䜜成したす

それがすべお始たった方法



それはすべお怠lazから始たりたした。 怠azineは生産的であり、私の堎合、そうではないようです-最初。



最近、Nassim Talebの「Litres」に関する本「Anti-Fragility」を賌入したした。 私はそれをダりンロヌドし、読曞宀に投げたしたが、私はそれを手に入れたせんでした。その埌、劻が圌女をドラッグしお読んだり、子䟛を連れたりしたす...そしお、この蚘事はニュヌスレタヌで飛びたした。 矎しいカバヌを䜜りたす 。 」 芋たずころ、すべおが矎しいように芋えたすが、「Fortochki」を搭茉した車は手元にありたせん。私たちはそれらを䜿甚せず、ワむンやQemuのようなガスケットを通しおこれらのWordPageを実行するのは少し䞍快です。 しかし、私は本を印刷しお、通垞の方法で私が䜏んでいる家の1階のミニ印刷機で垌望の圢匏に切り取るこずができたす。 これは、手元の手段を䜿甚する必芁があるこずを意味したす。



アむデア



私のオフィスでは、半幎間、小さなbashスクリプトを䜿甚しお、異なるPDFニックネヌムをたずめお、プロゞェクト文曞の単䞀の構造を圢成しおいたす。 したがっお、スペアパヌツの候補は1぀です。



実際には、4の倍数である任意のボリュヌムのノヌトブックに特定のシヌケンスで個別のペヌゞをレむアりトするずいうアむデアでした。泚意深く芋るず、1぀のノヌトブックシヌトには3぀たたは5぀ではなく正確に4぀のペヌゞが含たれおおり、ペヌゞはシヌト䞊で特定の順序で配眮されおいたす、私は埌でそれを終えたしたが、今のずころそれはそのたたでした、すなわち48ペヌゞのノヌトブック甚



ペヌゞペア 䞭毒
1-48 m =1n =48
2-47 m =1 + 1n =48-1
3-46 m =1 + 2n =48-2
... ...
24-25 m =1 + 23n =48-23


これは、たず、本をiペヌゞに分割し、次に各kペヌゞのj個のノヌトブックに分割し、次に各ノヌトブックをシヌトに配眮できるペヌゞのペアに分割しお、単䞀のノヌトブックファむルにたずめるこずができるこずを意味したす。 PDFニックネヌム。 かろうじお明確な...



䞀般的に、䟝存関係は単玔で、シヌトの最初のペヌゞはa + b、最埌はkbです。aはノヌトブックのシリアル番号で、0 <a <j、bはペアペヌゞのシリアル番号、0 <b <k / 2。 ぀たり これはforルヌプb = 0; b <k / 2; b ++で、これらすべおのペヌゞを凊理する必芁がありたす。



このノヌトブックをforノヌトブックa = 0; a <j; a ++を介しお実行する別のサむクルに詰め蟌みたす 。



次に、GhostScriptパッケヌゞ、ImageMagicパッケヌゞ、djvulibreパッケヌゞ、およびbashずLinuxの組み蟌みコマンドを䜿甚したす。



解決の過皋で、コヌドの䞀郚を別々の関数に入れ、bashですべおを完党に分割する方が良いこずが刀明したした。぀たり、残りのペヌゞのアセンブリを掗緎する必芁がありたす。



 echo "メむンセットのペヌゞの組み立おが完了したした。これで、远加のノヌトブックを組み立おるこずができたす。"
レッツゎヌ
 let "LAST_W_BOOK = $ W_BOOK + 1"最埌のノヌトブックの番号を瀺す倉数を䜜成する
 if ["` expr $ TAIL_PAGES4` "-eq" 0 "]最埌のノヌトブックのペヌゞ数が4の倍数である堎合
  それから
     echo「すべおが正垞です。最埌のノヌトブックを䜜成し続けたす」
    アセンブリ$ LAST_W_BOOK $ TAIL_PAGES
   else最埌のノヌトブックのペヌゞ数が4の倍数でない堎合
     echo "ノヌトブックがありたせん` expr 4-$ TAIL_PAGES4` pagess "
     echo "それらを远加する必芁がありたす。手動で远加するか、プログラムにこれを実行させるこずができたす。"
    レッツゎヌ
     必芁な数の空のファむルを远加しおから、アセンブリを続行したす
 fi




スナックの堎合、シヌト䞊のペヌゞの順序は䞊のプレヌトの順序ずたったく同じではないこずが刀明したしたが、これは次のずおりです。



ペヌゞペア 䞭毒
48-1 n =48m =1
2-47 m =1 + 1n =48-1
46-3 n =48-2m =1 + 2
... ...




これは非垞に単玔に決定されたものです。



       if ["` expr $ b2` "-gt" 0 "]
	 thenペヌゞのペアが奇数の堎合
	   $ ba first.bmpを抜出したす
	   $ bb second.bmpを抜出したす
	   echo "$ ba-$ bbペヌゞを眮く"
	 elseペヌゞのペアが偶数の堎合
	   $ bb first.bmpを抜出したす
	   $ ba second.bmpを抜出したす
	   echo "$ bb-$ baペヌゞを眮く"
       fi




元のPDFニックネヌムからペヌゞを抜出するために、GhostScriptがコマンドずしお䜿甚されたした。



  gs -q -sDEVICE = bmpmono -r $ DPI -dFirstPage = $ 1 -dLastPage = $ 1 -sOutputFile = "$ TMP_DIR / $ 2" -dNOPAUSE -dBATCH * pdf 




私の元のPDFニックネヌムはボヌダヌレスであるため読者にずっおより䟿利です、ペヌゞの呚囲にImageMagicのマヌゞンを远加したした。



  Convert "$ TMP_DIR / $ 2" -define bordercolor =ffffff -border 10 "$ TMP_DIR / $ 2" 


さらにすべおが原始的であるため、djvulibreパッケヌゞプログラムを䜿甚したす。

       if ["$ b" -eq "0"]
      それから
	 cjb2 -lossy "$ TMP_DIR / $ ba- $ bb" .pbm "$ 2" .djvu
      他に
	 cjb2 -lossy "$ TMP_DIR / $ ba- $ bb" .pbm "$ TMP_DIR / $ ba- $ bb" .djvu
	 djvm -i "$ 2" .djvu "$ TMP_DIR / $ ba- $ bb" .djvu
       fi


ノヌトブックファむルの最初のペヌゞを䜜成し、サむクルの最埌たで残りのペヌゞに順番に付けおいきたす。



スクリプト自䜓



 / bin / bash
 letsgo{
   echo "続行したすかはい/ [いいえ]"
  続きを読む
   if [-n "$ CONTINUE"] && [["$ CONTINUE" == y *]] ||  [["$ CONTINUE" == Y *]]行は空ではなく、「y」たたは「Y」で始たる
   「それでは、続けたしょう...」ず゚コヌしたす
  他に
   rm -R $ TMP_DIR
  出る
   fi
 }

 extract{#FirstPageおよびLastPage = $ 1、OutputFile = $ 2-プレフィックスなし
   gs -q -sDEVICE = bmpmono -r $ DPI -dFirstPage = $ 1 -dLastPage = $ 1 -sOutputFile = "$ TMP_DIR / $ 2" -dNOPAUSE -dBATCH * pdf
   convert "$ TMP_DIR / $ 2" -define bordercolor =ffffff -border 10 "$ TMP_DIR / $ 2"癜い境界線を远加する
 }

アセンブリ{

   sub_a{
     forb = 0; b <$ 1/2; b ++do
       let "ba = $ 3 + $ b"シヌトの最初のペヌゞの番号
       let "bb = $ 4- $ b"シヌトの2番目のペヌゞ番号
       if ["` expr $ b2` "-gt" 0 "]
	 thenペヌゞのペアが奇数の堎合
	   $ ba first.bmpを抜出したす
	   $ bb second.bmpを抜出したす
	   echo "$ ba-$ bbペヌゞを眮く"
	 elseペヌゞのペアが偶数の堎合
	   $ bb first.bmpを抜出したす
	   $ ba second.bmpを抜出したす
	   echo "$ bb-$ baペヌゞを眮く"
       fi
      倉換+远加$ TMP_DIR / first.bmp $ TMP_DIR / second.bmp "$ TMP_DIR / $ ba- $ bb" .pbm
       if ["$ b" -eq "0"]
      それから
	 cjb2 -lossy "$ TMP_DIR / $ ba- $ bb" .pbm "$ 2" .djvu
      他に
	 cjb2 -lossy "$ TMP_DIR / $ ba- $ bb" .pbm "$ TMP_DIR / $ ba- $ bb" .djvu
	 djvm -i "$ 2" .djvu "$ TMP_DIR / $ ba- $ bb" .djvu
       fi
       rm "$ TMP_DIR / $ ba- $ bb" * 
    やった
   }

   if ["$ 1" -gt "` expr $ FILE_COUNT / $ PAGES_IN_W_BOOK` "]
     最埌のノヌトブックを䜜成
     fora = 0; a <1; a ++do
       let "aa = $ 1"ノヌトブック番号
       let "ab = $ FILE_COUNT / $ PAGES_IN_W_BOOK * $ PAGES_IN_W_BOOK + 1"ノヌトブックの最初のペヌゞの番号
       let "ac = $ FILE_COUNT"ノヌトブックの最埌のペヌゞの番号
       echo "ペヌゞ$ ab ... $ acで構成されるノヌトブック$ aaをたずめる"
       sub_a $ 2 $ aa $ ab $ ac
    やった
    その他通垞の実行
     fora = 0; a <$ 1; a ++do
       let "aa = $ a + 1"珟圚のルヌプの反埩番号;それはノヌトブックの番号です
       let "ab = $ a * $ 2 + 1"ノヌトブックの最初のペヌゞの番号
       let "ac = $ a * $ 2 + $ 2"ノヌトブックの最埌のペヌゞの番号
       echo "ペヌゞ$ ab ... $ acで構成されるノヌトブック$ aaをたずめる"
       sub_a $ 2 $ aa $ ab $ ac
    やった
   fi
 }

 mkdir / tmp / brochure_converter䞀時ディレクトリを䜜成したす
 TMP_DIR = "/ tmp / brochure_converter"䞀時ディレクトリぞのパスを反映する倉数を割り圓おる 
 FILE_COUNT = `pdfinfo * pdf |  awk '/ Pages / {print $ 2}' 'ドキュメントのペヌゞ数を数える
 echo "1぀のノヌトブックのペヌゞ数を4の倍数で瀺したす。たずえば、\" 8、12、16 \ "など
 read PAGES_IN_W_BOOKノヌトブックの可倉ペヌゞ数を読み取りたす
 let "W_BOOK = $ FILE_COUNT / $ PAGES_IN_W_BOOK"1぀のノヌトブックのペヌゞ数を蚈算する
 echo "各ペヌゞの$ PAGES_IN_W_BOOKペヌゞの$ W_BOOKフルノヌトブックが生成されたす。"
 let "TAIL_PAGES = $ FILE_COUNT$ PAGES_IN_W_BOOK"最埌のノヌトブックのペヌゞ数を蚈算する
 echo "䞍完党なコピヌブックが$ TAIL_PAGESペヌゞに残っおいたす"
 echo "垌望する画像解像床DPIを指定、たずえば72"
 DPIを読み取る将来のドキュメントの画像解像床倉数を割り圓おる
レッツゎヌ
 assembly $ W_BOOK $ PAGES_IN_W_BOOK緎習垳の数ずペヌゞの数の䜍眮パラメヌタをプロシヌゞャに枡したす
 echo "メむンセットのペヌゞの組み立おが完了したした。これで、远加のノヌトブックを組み立おるこずができたす。"
レッツゎヌ
 let "LAST_W_BOOK = $ W_BOOK + 1"最埌のノヌトブックの番号を瀺す倉数を䜜成する
 if ["` expr $ TAIL_PAGES4` "-eq" 0 "]最埌のノヌトブックのペヌゞ数 
  それから
     echo「すべおが正垞です。最埌のノヌトブックを䜜成し続けたす」
    アセンブリ$ LAST_W_BOOK $ TAIL_PAGES
  他に
     echo "ノヌトブックがありたせん` expr 4-$ TAIL_PAGES4` pagess "
     echo "それらを远加する必芁がありたす。手動で远加するか、プログラムにこれを実行させるこずができたす。"
    レッツゎヌ
     必芁な数の空のファむルを远加しおから、アセンブリを続行したす
 fi
 rm -R $ TMP_DIR




問題



私はこの゜リュヌションが本圓に奜きではありたせん



  gs -q -sDEVICE = bmpmono -r2x2 -sOutputFile = $ TMP_DIR /d.bmp -dNOPAUSE -dBATCH * pdfPDFからペヌゞを䜎解像床で抜出
 FILE_COUNT = `ls -l $ TMP_DIR / * bmp |  grep ^-|  wc -l`ディレクトリ内のファむル数をカりントするこずにより、ドキュメント内のペヌゞ数をカりントしたす




klirichekに感謝したす。珟圚は次のようになっおいたす。
  FILE_COUNT = `pdfinfo * pdf |  awk '/ Pages / {print $ 2}' ' 




したがっお、PDFニックネヌムのペヌゞ数を展開せずに調べる方法に぀いおのヒントに感謝したす。



おわりに



スクリプトは未加工です。 4の倍数ではないペヌゞ数を含むPDFニックネヌムの凊理は完了しおいたせん; Chukchiが読者であるため、最初にここに公開する぀もりはありたせんでした。



「* pdf」ず曞かれおいたすが、コマンドラむンからの起動ず䞀連のファむルのバッチ凊理を含む起動を远加する予定です。



最初の経隓は、あたり蹎らないでください。



アむデアず修正を事前にありがずうございたす。



All Articles