Я бы назвал это разделением , а не прокаткой , поскольку нет никакого перекрытия между выходными компонентами.
Относительно ответов ниже первый производит матрицу с ее столбцами, содержащими компоненты. Если эта матрица равна m
, то m[, 1]
является вектором 1:10
. Это следует использовать, только если длина a
кратна 10.
Второй ответ создает список, компоненты которого являются желаемыми векторами. Если этот список L
, то L[[1]]
является вектором 1:10
.
Третий ответ создает матрицу, в которой строки содержат компоненты. Если эта матрица равна mm
, то mm[1, ]
является вектором 1:10
. Эту альтернативу следует использовать, только если длина a
кратна 10.
Четвертый такой же, как и третий, но он также работает в том случае, если длина a
не кратна 10.
# 1
matrix(a, 10)
# 2
n <- length(a)
split(a, rep(1:n, each = 10, length = n))
# 3
library(zoo)
rollapply(a, 10, by = 10, c)
# 4
library(zoo)
rollapply(1:45, 10, by = 10, `length<-`, value = 10, partial = TRUE, align = "left")
Мне пришлось решить аналогичную проблему, и в итоге я создал небольшую утилиту pdfmerge, в которой используется проект PDFSharp , который по существу лицензирован MIT.
код очень прост, мне понадобилась утилита cmdline, поэтому у меня больше кода, предназначенного для разбора аргументов, чем для слияния PDF:
using (PdfDocument one = PdfReader.Open("file1.pdf", PdfDocumentOpenMode.Import))
using (PdfDocument two = PdfReader.Open("file2.pdf", PdfDocumentOpenMode.Import))
using (PdfDocument outPdf = new PdfDocument())
{
CopyPages(one, outPdf);
CopyPages(two, outPdf);
outPdf.Save("file1and2.pdf");
}
void CopyPages(PdfDocument from, PdfDocument to)
{
for (int i = 0; i < from.PageCount; i++)
{
to.AddPage(from.Pages[i]);
}
}
Здесь уже есть несколько хороших ответов, но я подумал, что мог бы упомянуть, что pdftk может быть полезен для этой задачи. Вместо того, чтобы создавать один PDF-файл напрямую, вы можете создать каждый PDF-файл, который вам нужен, а затем объединить их вместе в качестве пост-процесса с pdftk. Это можно сделать даже изнутри вашей программы, используя вызов system () или ShellExecute ().
Я сделал это с помощью PDFBox. Я полагаю, он работает аналогично iTextSharp.
Я знаю, что многие люди рекомендовали PDF Sharp, однако похоже, что этот проект не обновлялся с июня 2008 года. Кроме того, источник недоступен.
Лично Я играл с iTextSharp, с которым было довольно легко работать.
Вот ссылка на пример с использованием PDFSharp и ConcatenateDocuments
PDFsharp , по-видимому, позволяет объединять несколько документов PDF в один.
И то же самое возможно с ITextSharp .
Здесь решение http: //www.wacdesigns .com / 2008/10/03 / слияния-PDF-файлы, используя-с Он использует бесплатную библиотеку iTextSharp с открытым исходным кодом http://sourceforge.net/projects/itextsharp