Создание и размещение объектов в PDF с использованием C # или Perl - PullRequest
0 голосов
/ 13 ноября 2009

Я хочу разместить пазлы судоку (размером 9X9) на бумаге формата А4, 4 на лицевой стороне страницы и 4 на обратной стороне страницы. Мне нужно сгенерировать буклет из 12 страниц с 96 пазлами для судоку, каждая из которых состоит из 8 пазлов для судоку. Любое тело подсказывает мне, как это сделать, используя perl или C #. Я не знаю, какой веб-сайт или руководство нужно пройти для получения информации.

Любая помощь очень ценится

Ответы [ 3 ]

3 голосов
/ 13 ноября 2009

Для C # взгляните на iTextSharp . Это с открытым исходным кодом. Вот учебник по sourceforge, но если вы ищете, вы можете найти учебники более высокого качества, как этот:

Создание простых файлов PDF с помощью iTextSharp

2 голосов
/ 13 ноября 2009

На CPAN имеется довольно много модулей для создания PDF-объектов / файлов.

PDF::API2 чаще всего встречается в фаворитах, но есть и другие. Смотрите этот вопрос: Какой модуль Perl лучше всего использовать для создания .pdf с нуля?

Есть хорошее руководство для начинающих: Использование PDF :: API2 - Код

Вас также может заинтересовать тот факт, что CPAN, похоже, имеет довольно много модулей судоку . Games::Sudoku::Component выделяется тем, что генерирует головоломки Судоку.

/ I3az /

0 голосов
/ 13 ноября 2009

Я бы использовал скрипт Perl для генерации скриптов LaTeX. Но это я.

Edit:

Ну, это то, что мне нравится в Stackoverflow: множество интересных и забавных задач, которые нужно решить. Моя жена вроде наркомана по судоку, поэтому я подумал, что напечатать пару брошюр, чтобы она была счастлива, не повредит.

Примечание. Образец PDF-файла результатов доступен по адресу Scribd .

Сначала я пошел на CTAN (если вы не знаете, это старший брат CPAN.) Я нашел модуль для LaTeX, который называется (что еще?) sudoku, Я прочитал документацию и посчитал ее достаточно хорошей.

Во-вторых, я хотел это в формате буклета. На этот раз модуль, который я нашел в CTAN, был слишком неясен и сложен в использовании, поэтому я продолжил поиск и нашел статью под названием LaTeX: создание 5 буклетов , написанных Свеном Хартенштейном. Первая строка этой статьи гласит: «Так я делаю буклеты формата А5, напечатанные на бумаге формата А4 (которая затем складывается один раз) с использованием LaTeX ...»

Наконец, я искал CPAN для хорошего генератора судоку. Есть много решателей, но я просто хотел напечатать головоломку, поэтому я остановился на Games :: Sudoku :: Component , и я написал небольшой Perl-скрипт для генерации файла TeX, называемый sudoku.pl:

#!/usr/bin/perl
use strict;
use warnings;
use Games::Sudoku::Component;

my $sudoku = Games::Sudoku::Component->new(size => 9);
print '
\documentclass[a5paper,headsepline,titlepage,10pt,normalheadings,DIVcalc]{scrbook}
\usepackage{sudoku}
\begin{document}
\title{Sudoku}
\author{L. Herrera}
\maketitle
\renewcommand*\sudokuformat[1]{\Large\sffamily#1}
\setlength\sudokusize{6cm}
\setlength\sudokuthickline{1pt}
';

print "\\chapter*{Easy puzzles}\n";
foreach (1 .. 16) {
    print "\\section*{Puzzle $_}\n";
    $sudoku->generate(blanks => 50);
    my $puzzle = $sudoku->as_string(
        separator => '|',
        linebreak => "|.\n|",
    );
    $puzzle =~ s/0/ /gs;
    print "\\begin{sudoku}\n|", $puzzle, "|.\n";
    print "\\end{sudoku}\n\n\n";
}
print "\\end{document}\n";

Затем я дословно скопировал сценарий, созданный Свеном, и назвал его booklet.sh:

#!/bin/sh
#
# This script takes an A5 latex file as input and produces an A4
# document (both ps and pdf) for printing an A5 booklet 
#
# Usage: 
# booklet [filename without extension]

latex $1
latex $1

# make an a5 ps from dvi:
dvips -t a5 -o $1.ps $1.dvi

# sort pages
psbook $1.ps tmp1.ps

# put two pages on one a4 sheet
psnup -Pa5 -pa4 -2 tmp1.ps tmp2.ps

# change a5 to a4 in ps file
sed 's/^%%DocumentPaperSizes: A5/%%DocumentPaperSizes: a4/g' < tmp2.ps > $1_booklet.ps

# produce pdf files, pdflatex ist used (twice) to get bookmarks
pdflatex $1.tex
pdflatex $1.tex
ps2pdf -sPAPERSIZE=a4 $1_booklet.ps

# delete tmp files
rm tmp1.ps tmp2.ps

Теперь я регенерирую небольшой буклет, готовый к печати, просто выполнив

perl sudoku.pl > puzzle1.tex && ./booklet.sh puzzle1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...