(Много теоретических и концептуальных объяснений приведено выше)
Ниже приведены некоторые практические примеры, когда я использовал static_cast, dynamic_cast, const_cast, reinterpret_cast.
(Также ссылается на это, чтобы понять объяснение: http://www.cplusplus.com/doc/tutorial/typecasting/ )
static_cast:
OnEventData(void* pData)
{
......
// pData is a void* pData,
// EventData is a structure e.g.
// typedef struct _EventData {
// std::string id;
// std:: string remote_id;
// } EventData;
// On Some Situation a void pointer *pData
// has been static_casted as
// EventData* pointer
EventData *evtdata = static_cast(pData);
.....
}
dynamic_cast:
void DebugLog::OnMessage(Message *msg)
{
static DebugMsgData *debug;
static XYZMsgData *xyz;
if(debug = dynamic_cast(msg->pdata)){
// debug message
}
else if(xyz = dynamic_cast(msg->pdata)){
// xyz message
}
else/* if( ... )*/{
// ...
}
}
const_cast:
// *Passwd declared as a const
const unsigned char *Passwd
// on some situation it require to remove its constness
const_cast(Passwd)
reinterpret_cast:
typedef unsigned short uint16;
// Read Bytes returns that 2 bytes got read.
bool ByteBuffer::ReadUInt16(uint16& val) {
return ReadBytes(reinterpret_cast(&val), 2);
}
Выезд этот ответ , который использует Многовалентный для наложения страниц PDF
На Linux можно преобразовать файлы PDF в Постскриптум и использование psnup
. Точный способ вызвать его зависит от точно, как Вы хотите, чтобы страницы были соединены, хотите ли Вы их повернутый, какой формат (форматы) бумаги Вы хотите использовать, и т.д. но это будет что-то вроде этого:
pdf2ps infile.pdf infile.ps
psnup -2 infile.ps outfile.ps
ps2pdf outfile.ps outfile.pdf
В зависимости от того, какие инструменты Вы имеете в наличии, у Вас мог бы быть более эффективный способ сделать, это - psnup
является, конечно, не единственным путем, но это - относительно известная программа (на Linux так или иначе).
Проверьте исходный код PyPDF, особенно rotateClockwise () метод. Должно быть место, где содержание страницы записано. Вставьте "q" оператор (сохраните состояние), и "cm" (с корректными параметрами для масштабирующейся матрицы) перед содержанием и оператором "Q" (состояние восстановления) впоследствии.
Видят документация в формате PDF для объяснения операторов, и структура страницы (прокрутите к нижней части для некоторых полезных ссылок).
не забывают отправлять патч к PyPDF :)
[РЕДАКТИРОВАНИЕ], Вы могли бы также хотеть проверить pdfjam источники , которые включают команду pdfnup.
Это - функция жемчуга, которую я использую, чтобы захватить каталог, полный prn файлов из приложения сторонних производителей и создать единственный объединенный PDF.
sub runMerged($)
{
my($path) = @_;
print "Generating merged PDFs for $path\n";
my @files = sort(getFiles($path, ".prn\$"));
if (scalar(@files))
{
open(MERGE, ">$path/merged.prn");
for (my $i = 0; $i < scalar(@files); $i++)
{
print MERGE "^L\n" if ($i > 0);
open(FN, "$path/" . $files[$i]);
while (my $line = <FN>)
{
print MERGE $line;
}
close(FN);
}
chdir("$BASE_PATH/txt2pdf");
print `./txt2pdf.pl $path/merged.prn`;
}
}
Вот краткое описание инструментов, которые я нашел для PDF (я хотел найти эквивалент psup и psbook)
Из моего менеджера пакетов:
Создание буклета формата A6:
pdfbook -2 -p a5 infile.pdf outfile.pdf
pdf-tools содержит:
Существует также мультивалентность: http://multivalent.sourceforge.net/Tools/index.html