Подтвердить что ты не робот

Ориентация и позиционирование iText?

Я только начал работать с iText (5.4.2, последняя версия), и есть две вещи, которые мне еще не удалось получить прямо.

  • Создание документов в ландшафте. На всех страницах отображается портрет.
  • Вставка изображений в заданную позицию (количество миллиметров сверху и слева).

У меня есть код ниже.

Document d = new Document(PageSize.A4_LANDSCAPE,0,0,0,0);
PdfWriter writer = PdfWriter.getInstance(d, new FileOutputStream("C:/test.pdf"));
document.open();
document.newPage();
Image img = Image.getInstance(String.format("C:/file.png"));
img.scaleToFit(400,240);
document.left(100f);
document.top(150f);
document.add(img);
document.close();

Но страница отображается в режиме "Портрет" (а не "Пейзаж" ), и изображение помещается в верхний левый угол (не на 10 и 15 единиц от него по запросу). Что я делаю неправильно?

4b9b3361

Ответ 1

Вы используете PageSize.A4_LANDSCAPE, переменную, которая была внесена вкладчиком и которая никогда не должна была добавляться в основной выпуск. Вместо этого используйте PageSize.A4.rotate().

Не понятно, чего вы хотите достичь с помощью строк:

document.left(100f);
document.top(150f);

Это геттеры, а не сеттеры. Похоже, вы считаете, что PDF похож на HTML. Это предположение неверно.

Если вы хотите, чтобы на изображении было поставлено 10 пользовательских единиц слева и 15 пользовательских единиц сверху (в этом случае 100 и 150 являются неправильными значениями), вы можете заменить значения 0 в своем конструкторе документа, чтобы определить левый край 10 пользовательских единиц и верхний край 15 пользовательских единиц.

Другим способом было бы определить абсолютную позицию для изображения с помощью метода setAbsolutePosition(). В этом случае вам нужно знать, что система координат ориентирована таким образом, что нижний левый угол страницы имеет координату x = 0, y = 0 для документов, созданных с нуля.

Ответ 2

iTextSharp.text.Document pdfDoc = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4.Rotate(), 10f, 10f, 10f, 0f);

Ответ 3

Document d = new Document(PageSize.A4.rotate(), 10f, 10f, 10f, 0f);

это сработало для меня, я просто взломал некоторые биты из приведенного выше

Ответ 4

Вы можете использовать этот пример, это работа для меня

 Document document = new Document();
 document.setPageSize(PageSize.A4.rotate());