Ширина ItextPdf не расширяется для альбомной страницы

Я пытаюсь поместить таблицу на страницу PDF, которая была повернута для альбомной ориентации в моем «PdfPageEventHelper»:

public void onStartPage(PdfWriter writer_,Document document_) {
        writer_.addPageDictEntry(PdfName.ROTATE,PdfPage.LANDSCAPE);
    }

Эта часть, кажется, работает, но когда я создаю свою таблицу с 10 столбцами, установка ширины не работает:

float sizeY=page.getWidth();
PdfPTable table=new PdfPTable(10);
table.setTotalWidth(sizeY);
float[] widths=new float[] {1.f,1.5f,4.f,1.f,1.f,1.f,1.f,1.f,1.f,1.f};
table.setWidths(widths);

Ширина таблицы всегда кажется стандартной (80% ширины книжной страницы). Как заставить таблицу использовать ширину альбомной страницы? ТИА.


person Wt Riker    schedule 27.11.2017    source источник
comment
Код события вашей страницы хорош для ситуаций, в которых вы хотите заполнить страницу в обычной ориентации документа, а затем повернуть заполненную таким образом страницу (чтобы, наконец, получить альбомную страницу с невертикальным текстом). Если вы хотите использовать альбомный формат с вертикальным текстом, просто установите размер документа в альбомный формат до того, как будет создана рассматриваемая страница (для первой страницы, даже до того, как open создаст экземпляр Document).   -  person mkl    schedule 27.11.2017
comment
Спасибо. Я сделал это изначально, но все равно получил тот же результат. Таблица не будет расширяться за пределы наименьшего измерения. В любом случае, делая это таким образом, ориентация оставалась портретной. Мне пришлось повернуть его с помощью средства просмотра PDF, а не отображать в альбомной ориентации, чтобы начать. Таким образом, отображается в альбомной ориентации, не поворачивая его вместе со средством просмотра.   -  person Wt Riker    schedule 27.11.2017


Ответы (1)


Вы используете старый iText 5. В iText 5 есть много причуд, которые решаются в iText 7.

В iText 7 у нас есть концепция UnitValue, которая помогает iText определить, является ли что-то абсолютным значением (в пользовательских единицах/пунктах) или относительным значением (в процентах).

В iText 5 эта концепция неизвестна. Класс PdfPTable имеет два параметра для ширины таблицы:

  • Ширина в процентах: 80% по умолчанию,
  • Абсолютная ширина

По умолчанию используется ширина в процентах. Если вы хотите использовать абсолютную ширину, вам нужно «потянуть переключатель» с помощью метода setLockedWidth():

table.setTotalWidth(sizeY);
table.setLockedWidth(true);

Я знаю, что это странно, но опять же, вы используете старую версию iText. Если вам нужен более согласованный API, используйте iText 7. Это обновление действительно важно. Мы потратили огромное количество времени и денег на улучшение iText, поэтому очень неприятно видеть, что новые разработчики iText предпочитают работать с iText 5, а не с iText 7.

person Bruno Lowagie    schedule 27.11.2017
comment
Бинго. Вот оно. Спасибо. Теперь мне нужно выяснить, почему Eclipse не обновляется до iText 7, но теперь это моя проблема. - person Wt Riker; 27.11.2017
comment
iText 7 — это полностью переписанный iText 5. Если вы просто обновитесь, вы нарушите существующий код. - person Bruno Lowagie; 27.11.2017
comment
Хм, так как я только начинаю этот код, возможно, мне следует сделать это сейчас. Я предполагаю, что мне нужно импортировать другую зависимость Maven. - person Wt Riker; 28.11.2017
comment
Все это здесь: developers.itextpdf.com/itext7/download-and- информация об установке/ - person Bruno Lowagie; 28.11.2017