Ориентация и позиционирование 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 единиц от него по запросу). Что я делаю неправильно?
Ответы
Ответ 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());