В случаях, когда вам необходимо, чтобы система координат находилась в верхнем левом углу, пользователь может использовать простую математику для изменения координат. Использование другой CTM для этой цели является более сложным и может привести ко всем видам побочных эффектов, как вы себя пережили. Например: вращение CTM также поворачивает содержимое (текст может быть перевернутым, зеркальным, ...).
Почему бы просто не использовать метод, который пересчитывает координаты. Например: вы хотите иметь координаты (10, 10), считая от верхней части страницы, а затем используйте преобразование (размер_страницы, у), где метод преобразования определяются следующим образом:
public float transform(Rectangle pagesize, float y) {
return pagesize.top() - y;
}
Таким образом, вы можете делать такие вещи, как:
float x = 50;
float y = transform(pagesize, 50);
table.writeSelectedRows(0, 10, x, y, canvas);
Лично я считаю, что это плохая идея, чтобы не уважать систему координат, как это определено в ISO-32000-1, потому что вы предпочитаете работать с нечетным системе координат, где все большее значение Y указывают вниз, а (это настолько противоречиво), но если вы настаиваете на этом, вы не должны вмешиваться в CTM, если ваш PDF-файл действительно большой.
Если вы переверните системы координат в PDF-файлах, вы также автоматически переверните содержимое. Если вы просто хотите получить начало в левом верхнем углу и можете работать с отрицательными координатами y, простой перевод выполнит эту работу. – mkl