* [Comm] Как разрезать книгу для прошивки @ 2014-11-03 18:29 Eugine Kosenko 2014-11-03 20:14 ` Denis G. Samsonenko ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Eugine Kosenko @ 2014-11-03 18:29 UTC (permalink / raw) To: community, linux-list Пусть есть текст (книга), разбитый определенным образом на страницы. Нужно распечатать этот текст на листах формата A4 в альбомном расположении по две страницы на лист. В дальнейшем эти листы предполагается согнуть пополам и сшить по линии сгиба, чтобы получилась брошюра. При этом возникает следующая проблема. На первом листе нужно напечатать справа первую, а слева последнюю страницу. С другой стороны того же листа нужно напечатать слева вторую, а справа --- предпоследнюю страницу. На следующем листе нужно печатать справа третью страницу, а слева --- третью с конца. И так далее. Вопрос: как обеспечить такую верстку текста? Понятно, что TeX мне в руки и вперед. Но есть ли какие-нибудь стандартные решения без сложного освоения? Может быть, есть специальный софт для этого? ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Comm] Как разрезать книгу для прошивки 2014-11-03 18:29 [Comm] Как разрезать книгу для прошивки Eugine Kosenko @ 2014-11-03 20:14 ` Denis G. Samsonenko 2014-11-04 4:51 ` Gleb Kulikov 2014-11-04 9:54 ` Victor 2 siblings, 0 replies; 9+ messages in thread From: Denis G. Samsonenko @ 2014-11-03 20:14 UTC (permalink / raw) To: ALT Linux Community general discussions День добрый! 4 ноября 2014 г., 0:29 пользователь Eugine Kosenko написал: > Пусть есть текст (книга), разбитый определенным образом на страницы. > Нужно распечатать этот текст на листах формата A4 в альбомном > расположении по две страницы на лист. В дальнейшем эти листы > предполагается согнуть пополам и сшить по линии сгиба, чтобы > получилась брошюра. > ... > Вопрос: как обеспечить такую верстку текста? > ... psbook и psnup из пакета psutils. Если не поможет, то более низкоуровневый pstops оттуда же. Ещё есть jpdftweak: http://jpdftweak.sourceforge.net/ -- Всего доброго, Денис. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Comm] Как разрезать книгу для прошивки 2014-11-03 18:29 [Comm] Как разрезать книгу для прошивки Eugine Kosenko 2014-11-03 20:14 ` Denis G. Samsonenko @ 2014-11-04 4:51 ` Gleb Kulikov 2014-11-04 9:54 ` Victor 2 siblings, 0 replies; 9+ messages in thread From: Gleb Kulikov @ 2014-11-04 4:51 UTC (permalink / raw) To: ALT Linux Community general discussions [-- Attachment #1: Type: text/plain, Size: 744 bytes --] В письме от Понедельник 03 ноября 2014 20:29:43 пользователь Eugine Kosenko написал: > Вопрос: как обеспечить такую верстку текста? В аттаче популярный скрипт, проделывающий эту операцию над произвольными pdf файлами (NB!: требует pdflatex + pdfinfo и не терпит, если имена файлов на русском или содержат спецсимволы [это, скорее, претензии к pdflatex]). -- Салют, /GLeb UIN: 15341920 jabber://gleb@asd.iao.ru sip://2387245@sipnet.ru (telephony) skype://gleb_kulikov.tomsk (telephony) [-- Attachment #2: pdfbook --] [-- Type: text/x-python, Size: 5713 bytes --] #! /usr/bin/python # pdfbook.c Rearrange pages in a PDF file into signatures. # # Author Tigran Aivazian <tigran at aivazian.fsnet.co.uk> (original C version) # Olivier Aubert <olivier.aubert at liris.cnrs.fr> (python version) # # Copyright: GPLv2 # # Based on the algorithm from psutils/psbook.c, which was # written by Angus J. C. Duggan 1991-1995. # # For example, to convert a file gnt.pdf into a book with # signature 32, we can use: # # $ pdfbook -s32 gnt.pdf gnt-book.pdf # FIXME: implement max signature size # FIXME: try to set the "duplex on short sides" option import sys import os import shutil import re import tempfile from optparse import OptionParser def check_program(p): for d in os.getenv('PATH').split(':'): if os.path.exists(os.path.join(d, p)): return True return False def check_dependencies(): ret=True if not check_program('pdflatex'): print "pdflatex is not installed. Please install it." ret=False if not check_program('pdfinfo'): print "pdfinfo is not installed. Please install the xpdf-utils package." ret=False return ret def swap_pairs(array, len): """Swap pages for right-to-left typesetting """ for i in range(0, len, 2): array[i], array[i+1] = array[i+1], array[i] def get_number_of_pages(fname): """Return the number of pages in the PDF file. """ npages=0 regexp=re.compile("Pages:\s+(\d+)") f=os.popen("pdfinfo '%s'" % fname) for l in f: m=regexp.search(l) if m: npages=m.group(1) break return int(npages) def shuffled_pages(npages, options): """Generated the list of page numbers for booklet printing. """ signature=options.signature if signature == 0: maxpage = npages + (4 - npages % 4) % 4 signature = maxpage else: maxpage = npages + (signature - npages % signature) % signature actualpg = [ 0 ] * maxpage for i in range(0, maxpage): actual = i - i % signature if i % 4 in (0, 3): actual += signature - 1 - (i % signature) / 2 else: actual += (i % signature) / 2 if actual < npages: actualpg[i] = actual + 1 if options.rtol: swap_pairs(actualpg, maxpage) return actualpg def generate_book(inputfile, outputfile, options): """Convert input to output, using options. """ npages = get_number_of_pages(inputfile) if npages < 1: print "invalid number of pages (%d)" % npages check_dependencies() return if options.debug: print "Processing %d pages" % npages actualpg = shuffled_pages(npages, options) def printable(n): if n: if not options.quiet: print "[%d]" % n, return str(n) else: if not options.quiet: print "[*]", return "{}" compile_dir=tempfile.mkdtemp() if options.debug: print "Generating files in directory ", compile_dir (outbase, ext) = os.path.splitext(os.path.basename(outputfile)) outtex=".".join( (outbase, 'tex') ) outpdf=".".join( (outbase, 'pdf') ) fullouttex=os.path.join( compile_dir, outtex ) fulloutpdf=os.path.join( compile_dir, outpdf ) # LaTeX generation fout = open(fullouttex, "w") fout.write("""\\documentclass[12pt,a4paper,openany]{book} \\usepackage{pdfpages} \\begin{document} \\includepdf[nup=1x2,landscape,pages={%s}]{%s} \\end{document} """ % (",".join( [ printable(n) for n in actualpg ] ), inputfile )) fout.close() if not options.quiet: print "\nGenerating %s now, please wait..." % outputfile cmdline = "pdflatex -output-directory '%s' '%s'" % ( compile_dir, fullouttex ) if not options.debug: cmdline += "> /dev/null 2>&1 < /dev/null" else: print "Executing ", cmdline ret=os.system(cmdline) if ret: print "Failed to generate %s" % outputfile check_dependencies() return if os.path.exists(fulloutpdf): shutil.move( fulloutpdf, outputfile ) else: print "Cannot find %s in %s" % (outpdf, compile_dir) return 1 if options.debug < 2: # Cleanup shutil.rmtree(compile_dir) return 0 def main(): """Option parsing. """ parser=OptionParser(usage="""Rearrange pages in a PDF file into signatures. %prog [options] input_file.pdf [output_file.pdf]""") parser.add_option("-s", "--signature", dest="signature", action="store", type="int", default=0, metavar="SIGNATURE", help="Signature of the booklet. It must be positive and divisible by 4.") parser.add_option("-r", "--right-to-left", dest="rtol", action="store_true", help="Do right-to-left typesetting", default=False) parser.add_option("-q", "--quiet", dest="quiet", action="store_true", help="Be quiet", default=False) parser.add_option("-d", "--debug", dest="debug", action="store", help="Debug level (1: display messages, 2: keep intermediary files", default=0) (options, args) = parser.parse_args() try: inputfile=args[0] except IndexError: print "input file must be specified" parser.print_help() return if not os.path.exists(inputfile): print "Cannot read input file", inputfile return (inputbase, ext) = os.path.splitext(inputfile) if ext != '.pdf': print "Input file %s should end with .pdf" % inputfile return try: outputfile=args[1] except IndexError: outbase = os.path.basename(inputbase) outputfile=outbase+"-book"+ext if options.signature: if options.signature < 0 or options.signature % 4: parser.print_help() return if options.debug: print "Input file :", inputfile print "Output file :", outputfile print "Signature :", options.signature return generate_book(inputfile, outputfile, options) if __name__ == '__main__': main() ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Comm] Как разрезать книгу для прошивки 2014-11-03 18:29 [Comm] Как разрезать книгу для прошивки Eugine Kosenko 2014-11-03 20:14 ` Denis G. Samsonenko 2014-11-04 4:51 ` Gleb Kulikov @ 2014-11-04 9:54 ` Victor 2014-11-04 13:23 ` Sergey 2014-11-06 14:32 ` Eugine Kosenko 2 siblings, 2 replies; 9+ messages in thread From: Victor @ 2014-11-04 9:54 UTC (permalink / raw) To: ALT Linux Community general discussions > Пусть есть текст (книга), разбитый определенным образом на страницы. > Нужно распечатать этот текст на листах формата A4 в альбомном > расположении по две страницы на лист. В дальнейшем эти листы > предполагается согнуть пополам и сшить по линии сгиба, чтобы > получилась брошюра. > > При этом возникает следующая проблема. На первом листе нужно > напечатать справа первую, а слева последнюю страницу. С другой стороны > того же листа нужно напечатать слева вторую, а справа --- > предпоследнюю страницу. На следующем листе нужно печатать справа > третью страницу, а слева --- третью с конца. И так далее. > > Вопрос: как обеспечить такую верстку текста? > > Понятно, что TeX мне в руки и вперед. Но есть ли какие-нибудь > стандартные решения без сложного освоения? Может быть, есть > специальный софт для этого? > _______________________________________________ > community mailing list > community@lists.altlinux.org > https://lists.altlinux.org/mailman/listinfo/community Если текст - это просто текст, то Libreoffice поддерживает печать брошюрой (при печати на вкладке "Макет страницы" ткнуть "Brochure"). Правда печатает при этом только одним блоком. Соответственно, разбиение на блоки придется делать вручную. Если текст - это PDF, то можно воспользоваться тем же Libreoffice (он умеет их открывать) и тоже брошюрой его. ---- Виктор. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Comm] Как разрезать книгу для прошивки 2014-11-04 9:54 ` Victor @ 2014-11-04 13:23 ` Sergey 2014-11-06 14:38 ` Eugine Kosenko 2014-11-06 14:32 ` Eugine Kosenko 1 sibling, 1 reply; 9+ messages in thread From: Sergey @ 2014-11-04 13:23 UTC (permalink / raw) To: community On Tuesday 04 November 2014, Victor wrote: > Если текст - это PDF, то можно воспользоваться тем же Libreoffice (он умеет их > открывать) и тоже брошюрой его. Ещё Acrobat Reader это умеет. Нового больше больше нет для Linux, и, даже, на сайте выбора нет для Linux, но можно пока нарыть прямые ссылки, и, даже, у Adobe: Вчера себе качал вот: http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.5.5/enu/AdbeRdr9.5.5-1_i486linux_enu.rpm -- С уважением, Сергей a_s_y@sama.ru ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Comm] Как разрезать книгу для прошивки 2014-11-04 13:23 ` Sergey @ 2014-11-06 14:38 ` Eugine Kosenko 2014-11-07 7:34 ` Sergey 0 siblings, 1 reply; 9+ messages in thread From: Eugine Kosenko @ 2014-11-06 14:38 UTC (permalink / raw) To: ALT Linux Community general discussions 2014-11-04 15:23 GMT+02:00, Sergey <a_s_y@sama.ru>: > Вчера себе качал вот: > http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.5.5/enu/AdbeRdr9.5.5-1_i486linux_enu.rpm Эта версия в Сизифе может быть установлена? Честно говоря, с AR не работал позже 6 версии, но не помню там такой возможности. Под MS Windows в этой версии тоже есть такая возможность? ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Comm] Как разрезать книгу для прошивки 2014-11-06 14:38 ` Eugine Kosenko @ 2014-11-07 7:34 ` Sergey 0 siblings, 0 replies; 9+ messages in thread From: Sergey @ 2014-11-07 7:34 UTC (permalink / raw) To: ALT Linux Community general discussions On Thursday 06 November 2014, Eugine Kosenko wrote: > > Вчера себе качал вот: > > http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.5.5/enu/AdbeRdr9.5.5-1_i486linux_enu.rpm > > Эта версия в Сизифе может быть установлена ? У меня Сизифа нет сейчас, в p7 ставится. apt дотягивает libpangox-compat и libgdk-pixbuf-xlib > Честно говоря, с AR не работал позже 6 версии, но не > помню там такой возможности. Под MS Windows в этой > версии тоже есть такая возможность ? У меня нет Windows, но печать брошурой в AR/Linux есть очень давно, лет около десяти. -- С уважением, Сергей. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Comm] Как разрезать книгу для прошивки 2014-11-04 9:54 ` Victor 2014-11-04 13:23 ` Sergey @ 2014-11-06 14:32 ` Eugine Kosenko 2014-11-13 4:24 ` Gleb Kulikov 1 sibling, 1 reply; 9+ messages in thread From: Eugine Kosenko @ 2014-11-06 14:32 UTC (permalink / raw) To: hisbreht, ALT Linux Community general discussions 2014-11-04 11:54 GMT+02:00, Victor <hisbreht@yandex.ru>: > Если текст - это просто текст, то Libreoffice поддерживает печать брошюрой > (при > печати на вкладке "Макет страницы" ткнуть "Brochure"). Правда печатает при > этом только одним блоком. Соответственно, разбиение на блоки придется делать > вручную. Я правильно понял, что это возможно только при финальной печати? Ведь в диалоге "Экспорт в PDF" такой закладки нет. Что такое "разбиение на блоки" и как его делать вручную? ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Comm] Как разрезать книгу для прошивки 2014-11-06 14:32 ` Eugine Kosenko @ 2014-11-13 4:24 ` Gleb Kulikov 0 siblings, 0 replies; 9+ messages in thread From: Gleb Kulikov @ 2014-11-13 4:24 UTC (permalink / raw) To: ALT Linux Community general discussions В сообщении от [6 ноября 2014 Eugine Kosenko] написал: > Я правильно понял, что это возможно только при финальной печати? Ведь > в диалоге "Экспорт в PDF" такой закладки нет. Скрипт, который я бросал 4.11, делает именно pdf файл с "правильно" (для печати) рсположенными страницами. -- Салют, /GLeb UIN: 15341920 jabber://gleb@asd.iao.ru sip://2387245@sipnet.ru (telephony) skype://gleb_kulikov.tomsk (telephony) ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2014-11-13 4:24 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2014-11-03 18:29 [Comm] Как разрезать книгу для прошивки Eugine Kosenko 2014-11-03 20:14 ` Denis G. Samsonenko 2014-11-04 4:51 ` Gleb Kulikov 2014-11-04 9:54 ` Victor 2014-11-04 13:23 ` Sergey 2014-11-06 14:38 ` Eugine Kosenko 2014-11-07 7:34 ` Sergey 2014-11-06 14:32 ` Eugine Kosenko 2014-11-13 4:24 ` Gleb Kulikov
ALT Linux Community general discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 community community/ http://lore.altlinux.org/community \ mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com public-inbox-index community Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.community AGPL code for this site: git clone https://public-inbox.org/public-inbox.git