Во-первых, я хотел бы отметить, что stackowerflow помог мне со многими проблемами в прошлом, поэтому спасибо всем.Но теперь я столкнулся с проблемой, решение которой пока не найдено, и это сводит меня с ума.Я не являюсь носителем английского языка, поэтому прошу прощения за любые языковые ошибки.
Итак, вот оно:
Я создаю pdf с библиотекой itextsharp
(кстати, отличная библиотека).Я начинаю с какой-то формы / шаблона в формате PDF, к которому я добавляю данные для заполнения.Я использую PdfReader
, чтобы прочитать шаблон PDF и, набрав PdfStamper
метод GetOverContent(pageNum)
для отдельных страниц, я получаю PdfContentByte
.С этим PdfContentByte
я добавляю свой текст / данные (BeginText
и EndText
используется на каждой странице).Большую часть текста я добавляю методом ShowTextAligned
.Это все хорошо, сгенерированный PDF содержит мой текст.Проблема начинается там, где мне нужно добавить текст с колонками.Я делаю это с помощью следующего кода:
ColumnText ct = new ColumnText(cb);//cb is PdfContentByte
Phrase p = new Phrase(txt, FontFactory.GetFont(DEFAULT_FONT, BaseFont.CP1250, true, font_size));
ct.SetSimpleColumn(p, x, y, x+width, y+height, 10, alignment);
ct.Go();
setDefaultFont();//sets font to PdfContentByte again with setFontAndSize and SetColorFill
Текст с колонками добавляется с этим кодом ОК, но текст (на той же странице / тот же PdfContentByte
), добавленный ПОСЛЕ этого с ShowTextAligned
, не отображается вAcrobat Reader.
Вот часть «забавы» - текст в том же pdf-файле, открываемом с помощью программы «Foxit Reader», выглядит хорошо / видно / нормально.
Таким образом, текст, добавленный с помощью ShowTextAligned
после добавления ColumnText
, не отображается в Acrobat Reader, но виден в Foxit Reader просто отлично.Эта проблема существует на одной странице, новая страница сбрасывает эту проблему (PdfContentByte
для следующей страницы является новой).
Мой обходной путь для этого заключался в добавлении всех ColumnText
ПОСЛЕ всех вызовов ShowTextAligned
.Это работало до сегодняшнего дня, когда заказчик распечатал сгенерированный PDF с помощью Acrobat Reader, который после печати документа отобразил сообщение о том, что PDF содержит ошибку, и следует связаться с автором PDF.Версия Adobe Reader: 10.1.1.Проблема не в клиентском компьютере, то же самое происходит и на моем компьютере.
После исследования Интернета я установил Adobe Acrodat Pro Trial, который содержит инструмент Preflight, предназначенный для анализа PDF-файлов (насколько я понимаю).Этот инструмент выводит предупреждение «Недопустимый поток состояния содержимого для оператора».И вот я застрял.Я полагаю, что проблема существует внутри добавленного ColumnText
, потому что документ, сгенерированный без них, не вызывает проблем с отображением / печатью и состояниями предварительной проверки "Проблема не найдена".
Возможно, я упускаю какой-то факт и чтопроблема в моем коде ...
Пожалуйста, помогите мне, потому что у меня закончились идеи.Надеюсь, этот пост когда-нибудь поможет кому-то еще с такой же проблемой.Я не могу прикрепить образец PDF, потому что он содержит конфиденциальные данные, но если нет другого способа, я воссоздаю сценарий / код.