Избавление от изменений графического состояния из существующего содержимого страницы
Вы используете конструктор PDPageContentStream
с двумя аргументами boolean
:
new PDPageContentStream(document, page,true,true);
Этот конструктор реализован как:
this(document, sourcePage, appendContent, compress, false);
то есть он вызывает конструктор с тремя аргументами boolean
, используя false
в качестве последнего. Этот последний аргумент boolean
задокументирован как:
* @param resetContext Tell if the graphic context should be reseted.
Таким образом, вы добавляете к содержимому страницы без сброса графического контекста. Это означает, что любые изменения в текущей матрице преобразования, сделанные в существующем содержимом страницы, по-прежнему преобразуют ваши координаты. Чтобы этого не произошло, вы должны использовать конструктор PDPageContentStream
с тремя аргументами boolean
:
new PDPageContentStream(document, page, true, true, true);
С помощью этого можно легко разместить текст.
Рисование прямоугольников и тест
ОП упомянул, что он успешно рисовал прямоугольники, но не рисовал текст.
Следующий код
PDPage firstPage = allPages.get(0);
PDRectangle pageSize = firstPage.findMediaBox();
float x = 121;
float y = 305;
float w = 262;
float h = 104;
PDPageContentStream contentStream = new PDPageContentStream(document, firstPage, true, true, true);
contentStream.setNonStrokingColor(Color.yellow);
contentStream.fillRect(pageSize.getLowerLeftX() + x, pageSize.getLowerLeftY() + y, w, h);
contentStream.beginText();
contentStream.moveTextPositionByAmount(pageSize.getLowerLeftX() + x, pageSize.getLowerLeftY() + y);
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
contentStream.setNonStrokingColor(Color.red);
contentStream.drawString("My Text Here");
contentStream.endText();
contentStream.close();
приводит к
![Скриншот результата](https://i.stack.imgur.com/0ERJj.png)
как и следовало ожидать.
Необходимо пояснить значение введенных координат.
ОП также упомянул X:-121,Y:-305,W:-262,h:-104 как координаты из внешнего приложения в своих комментариях.
Поскольку PDF-файлы чаще всего имеют положительные координаты внутри медиабокса, эти координаты X и Y не имеют смысла для PDF-файлов в целом.
Кроме того, оператору не удалось поделиться документом.
Следовательно, невозможно выяснить, имеют ли смысл эти отрицательные координаты для его специальной PDF.
Кроме того, отрицательные значения ширины и высоты принимаются операциями рисования прямоугольников, но если они используются для текста, они могут подразумевать, что координата Y не обозначает базовую линию или что ожидается, что текст не будет начинаться с X, а заканчиваться там. или что текст будет зеркально отражен, или, или, или...
Таким образом, сначала необходимо объяснить значение этих отрицательных координат и размеров. Что является началом этих координат, являются положительными координатами y выше или ниже, являются ли X, Y нижним левым углом прямоугольника, что означает отрицательная ширина или высота, где по отношению к X, Y должен строка будет нарисована?
person
mkl
schedule
28.07.2014