使用C#或perl在PDF中创建和放置对象

时间:2009-11-13 07:31:39

标签: c# perl

我想在A4纸上放置数独游戏(9X9尺寸),在页面正面放置4个,在页面背面放置4个。我需要生成12页小册子,其中包含96个数独谜题,每个8个数独谜题。是否有人使用perl或C#指导我如何操作。我不知道要通过哪个网站或手册获取信息。

非常感谢任何帮助

3 个答案:

答案 0 :(得分:3)

对于C#,请查看iTextSharp。它是开源的。 Here's有关sourceforge的教程,但如果你搜索,你可以找到更高质量的教程,如下所示:

Creating Simple PDF Files With iTextSharp

答案 1 :(得分:2)

CPAN上有很多模块用于创建PDF对象/文件。

PDF::API2最受欢迎,但还有其他人。请参阅此问题:What is the best Perl module to use for creating a .pdf from scratch?

有一个不错的初学者教程:Using PDF::API2 - The Code

您可能也感兴趣的是,CPAN似乎确实有很多Sudoku modulesGames::Sudoku::Component脱颖而出,因为它确实会产生数独谜题。

/ I3az /

答案 2 :(得分:0)

我会使用Perl脚本生成LaTeX脚本。但那就是我。

修改

嗯,这就是我喜欢的Stackoverflow:很多有趣且有趣的问题需要解决。我的妻子是一个数独的瘾君子,所以我想打印几本小册子让她开心不会受伤。

注意:Scribd提供了一个示例结果PDF文件。

首先,我去了CTAN(如果你不知道,这是CPAN的大哥。)我找到了一个叫LaTeX的模块(还有什么?)sudoku。我阅读了文档并认为它足够好。

其次,我想用小册子格式。这一次,我在CTAN上找到的模块太模糊,难以使用,所以我一直在寻找并找到一篇名为LaTeX: creating a5 booklets的文章,由Sven Hartenstein撰写。本文的第一行说:“这就是我用LaTeX制作印在A4纸上(然后折叠一次)的A5小册子......”

最后,我在CPAN上搜索了一个很好的数独生成器。有很多解算器,但我只想打印一个谜题,所以我选择了Games::Sudoku::Component并编写了一个用于生成TeX文件的小Perl脚本,名为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";

然后,我逐字复制了由Sven创建的脚本,并将其命名为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