Я не знаю, кого вы должны винить, но есть очевидная причина разницы.
В документе Google Docs есть поток страниц, который начинается с:
1 0 0 -1 0 792 cm
Это в основном вертикальное переворачивание страницы, 792 служит для компенсации и перемещения элементов обратно на страницу - это должна быть высота страницы в точках.
Это не инкапсулируется в q ... Q
пара, чтобы выполнить «сохранить ... восстановить», что означает, что эта матрица теперь установлена для оставшейся части всего, что следует на странице. Как вы, возможно, уже знаете, спецификация PDF не дает возможности сбросить матрицу страницы, вы можете только добавить к ней.
Когда вы добавляете контент на страницу в конце, ваш контент теперь наследует эту матрицу , поэтому вы видите его перевернутым и внизу.
Файл Microsoft этого не делает, и в результате он обрабатывается правильно. В этом случае матрица остается единичной матрицей, и вы получаете контент там, где вы его ожидали.
Как это исправить? Что ж, если ваша библиотека не предоставляет способ узнать, что такое текущая матрица страниц, это будет очень сложно. Конечно, ее можно решить «только для этого документа», применив обратную матрицу, чтобы отменить глупую вещь, которую Google сделал здесь, но я могу представить, что это не лучший способ справиться с тем, что вы бы искали.