Используя iTextSharp, как я могу вставить новую страницу в начале страницы, когда PdfWriter уже писал страницы? Предположим, что индексная страница должна быть первой страницей документа, но вы не узнаете ее содержимое, пока не напишете весь документ. В частности, на какой странице написаны каждый раздел/глава.iTextSharp вставить страницу в начале
ответ
Вы не можете вернуться на первую страницу во время создания документа, но есть разные способы решения вашей проблемы.
Если вы не ожидаете наличия большого количества страниц, вы можете рассмотреть решение, объясненное в главе 5 iText in Action - Second Edition, более конкретно в примере MovieHistory1.java.
В этом примере мы изменить порядок страниц перед закрываем документ:
// step 1
Document document = new Document();
// step 2
PdfWriter writer
= PdfWriter.getInstance(document, new FileOutputStream(RESULT));
// IMPORTANT: set linear page mode!
writer.setLinearPageMode();
// step 3
document.open();
// step 4
// Add all your content
// Create a new order for the pages
int total = writer.reorderPages(null);
// change the order
int[] order = new int[total];
for (int i = 0; i < total; i++) {
order[i] = i + toc;
if (order[i] > total)
order[i] -= total;
}
// apply the new order
writer.reorderPages(order);
// step 5
document.close();
Почему я только рекомендую это для документов с ограниченным числом страниц? Для этого функциональность для работы нам нужно создать линейное дерево страниц:
writer.setLinearPageMode();
Линейное дерево страниц не совсем дерево (это дерево без ветвей), и что не является оптимальным в формате PDF.
Лучше переупорядочить страницы во второй раз. Это объясняется двумя вопросами, которые приведены в The Best iText Questions on StackOverflow (бесплатная электронная книга).
Вопросы были:
Я знаю, что наличие избыточной информации на SO не является идеальным, но это код, вам нужно:
PdfReader reader = new PdfReader(baos.toByteArray());
int n = reader.getNumberOfPages();
reader.selectPages(String.format("%d, 1-%d", n, n-1));
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(filename));
stamper.close();
- 1. Добавить страницу в середине itextsharp
- 2. Вставить страницу в существующий PDF с помощью itextsharp
- 3. добавить/вставить страницу в существующие поля формы pdf, используя itextsharp
- 4. Вставить элемент в начале словаря
- 5. Вставить PieceInfo в объединенный документ с ITextSharp
- 6. Вставить значения запроса в ячейку в iTextSharp
- 7. Циркулярный список в C++ (вставить в начале)
- 8. Как вставить правильно выделенный текст в itextsharp?
- 9. ITextSharp вставить существующую таблицу в pdf-документ
- 10. Itextsharp Вставить нижний колонтитул в конец страницы
- 11. ITextSharp вставить текст в существующий pdf
- 12. iTextsharp - нарисовать линию в конце и начале страницы с таблицами
- 13. Отсутствие снятых элементов отображения в начале списка (iTextSharp)
- 14. Отделите каждую страницу в файле PDF iTextsharp
- 15. Дублируйте страницу в документе с помощью iTextSharp
- 16. Как сделать многостраничную страницу в iTextSharp?
- 17. Вставить символ в начале текущей строки (vb.net)
- 18. Как правильно вставить строки в начале таблицы
- 19. Вставить элемент в начале Ruby Hash?
- 20. C Вставить элемент в начале связанного списка
- 21. Вставить в начале файла с помощью Node.js
- 22. Как вставить элемент в начале ObservableCollection?
- 23. Как вставить текст в начале файла?
- 24. Вставить строку в начале другой строки
- 25. Как вставить элемент в начале вектора
- 26. Как вставить текст в начале нескольких файлов?
- 27. findAndModify MongoDB вставить элемент в начале массива
- 28. Вставить флажок в начале ячейки таблицы
- 29. Вставить содержимое файла в начале мини-файла
- 30. Вставить текст в начале текстового поля
Прежде всего, спасибо, что помогли мне! Во-вторых, он * почти * работал, но у меня все еще есть проблема: количество страниц, обрабатываемых методом .ReorderPages(). На самом деле, writer.CurrentPageNumber и writer.PageNumber оба дают мне правильное количество страниц, но writer.ReorderPages (null) всегда дает мне количество страниц -1, и если я попытаюсь установить массив int с новым порядком плюс Еще 1 страница (соответствующая счету реальной страницы), writer.reorderPages (заказ); удары, потому что он говорит, что массив превышает количество страниц, что имеет смысл. –
Если вы работаете с 'writer.CurrentPageNumber', убедитесь, что вычитаете один, потому что номера страниц начинаются с 1, но индекс переупорядочения начинает отсчет в 0. –
Это не так. Документ фактически имеет 24 страницы, но writer.ReorderPages (null) возвращает 23, поэтому он ожидает массив с 23 элементами. Он переупорядочивает правильно, но он оставляет последнюю страницу (24-я страница) в конце (где она была), потому что она опускает эту страницу, поскольку она думает, что ее всего 23, а не 24. –