Мне нужно создать большое количество различных типов документов, используя библиотеку itextsharp, у всех есть общие черты, у некоторых есть общие заголовки, подсчеты страниц, водяные знаки, которые у меня начались, чтобы иметь разные подклассы PdfPageEventHelper, например WatermarkPdfPageEventHelper, OrderHeaderPdfPageEventHelper, PageNumberPdfPageEventHelper и т. д. и применять их при необходимости для компоновки документов, но PageEvent - это не событие, а экземпляр только одного IPdfEvent, каков правильный способ его реализации?Как ввести несколько экземпляров PdfPageEventHelper?
ответ
Я являюсь автором Java-версии iText. Мой ответ может быть неприменим к порту C#.
Страница событие может быть кумулятивным:
writer.setPageEvent(watermarkevent);
writer.setPageEvent(headerevent);
writer.setPageEvent(footerevent);
Внутри PdfPageEventForwarder
создаются. Этот объект будет следить за тем, чтобы каждое событие запускалось в том порядке, в котором вы их добавили.
Когда вы хотите удалить события, вам просто нужно сделать, это:
writer.setPageEvent(null);
В вашем случае, вы можете создавать свои собственные PdfPageEventForwarder
экземпляров, создавая различные комбинации страниц событий.
Я уверен, что вы можете сделать то же самое в iTextSharp, хотя могут быть небольшие различия в именах классов и методов.
Вот что я сделал, когда возникла необходимость создания пользовательского нижнего колонтитула, который был общим для разных документов. Этот нижний колонтитул представляет собой многострочный нижний колонтитул.
Во-первых, создать свой собственный колонтитул:
public class CustomFooter : PdfPageEventHelper
{
private string[] _Phrases;
private Font _CustomFooterFont;
public string[] phrases
{
get { return _Phrases; }
set { _Phrases = value; }
}
public Font customFont {
get { return _CustomFooterFont; }
set { _CustomFooterFont = value; }
}
public override void OnEndPage(PdfWriter writer, iTextSharp.text.Document document)
{
base.OnEndPage(writer, document);
iTextSharp.text.Rectangle rect = writer.GetBoxSize("footer");
for (int i = 0; i < this.phrases.Length; i++)
{
Phrase currentPhrase;
currentPhrase = new Phrase(_Phrases[i], _CustomFooterFont);
ColumnText.ShowTextAligned(writer.DirectContent,
iTextSharp.text.Element.ALIGN_LEFT, currentPhrase,
rect.Left, rect.Bottom +20 - (i * 9), 0);
}
}
}
При необходимости один из этих колонтитулы, я бы назвал эту функцию:
public static CustomFooter getMultilineFooter(string[] Phrases)
{
CustomFooter result = new CustomFooter();
result.phrases = Phrases;
result.customFont = myCustomFooterFont;
result.customBoldFont = myCustomFooterBoldFont;
return result; }
после этого, просто добавить к документу. Надеюсь это поможет.
То, что я сделал, состоит в том, что если я хочу применить общий водяной знак, я бы хотел применить CustomFooter и CustomWatermark к тому же документу, оба класа идеально подходят для других документов. – Marc
Почему вы не можете создать метод для каждого ... позволяет назвать его частью документа? – Th0rndike
- 1. PdfPageEventHelper в iText
- 2. PdfPageEventHelper в iTextSharp
- 3. Как ввести несколько пользователей
- 4. Как запускать несколько экземпляров экземпляров параллельно
- 5. Несколько экземпляров?
- 6. Как ввести подробные несколько infowindows
- 7. jquery datepicker несколько экземпляров
- 8. Как отменить несколько экземпляров таймера?
- 9. Как запустить несколько экземпляров процесса?
- 10. Как запустить несколько экземпляров причалов
- 11. Как запустить несколько экземпляров nutch?
- 12. Как запустить несколько экземпляров сфинкса?
- 13. Как создать несколько экземпляров UitableView?
- 14. Как создать несколько экземпляров DB2?
- 15. Все как несколько экземпляров функции
- 16. Как предотвратить несколько экземпляров HAProxy?
- 17. Как объединить несколько экземпляров MvcHtmlString
- 18. Как создать несколько экземпляров класса?
- 19. Многопоточность Awesomium/несколько экземпляров. Как?
- 20. Как удалить несколько экземпляров приложения
- 21. Как сохранить несколько экземпляров MySQL
- 22. Как создать несколько экземпляров активности?
- 23. Как сделать несколько экземпляров таблицы?
- 24. Как запустить несколько экземпляров службы?
- 25. Несколько экземпляров и несколько адресов
- 26. Singleton возвращает несколько экземпляров
- 27. Несколько экземпляров классов
- 28. Несколько флип-экземпляров (изображения)
- 29. MVVM Mediator несколько экземпляров
- 30. Несколько экземпляров процесса
Это решение, которое я искал, спасибо. Объект PageEvent не очень интуитивно понятен. В версии библиотеки C# это свойство, а не метод, поэтому вы ожидаете, что будете иметь ссылку на экземпляр IPdfPageEvent – Marc