您的代码本身不会导致镜像输出,因此原因必须在您正在标记的 PDF 内部。不幸的是,您没有提供相关的 PDF,所以我们只能在这里猜测。
该问题很可能是由预先存在的页面内容将当前变换矩阵设置为镜像仿射变换而没有在最后重置它引起的。
如果确实如此,PDFBox 提供了一个简单的解决方法:
你构建你的PDPageContentStream
像这样:
PDPageContentStream contentStream = new PDPageContentStream(document, page,PDPageContentStream.AppendMode.APPEND,true);
还有另一个构造函数接受额外的boolean
争论。如果您使用该构造函数将附加参数设置为true
,PDFBox 尝试重置内容的图形状态:
PDPageContentStream contentStream = new PDPageContentStream(document, page,PDPageContentStream.AppendMode.APPEND,true,true);
Beware:如果这确实解决了问题,则您当前使用的坐标和偏移量依赖于变换矩阵的原样更改。在这种情况下,您将必须相应地更新它们。
或者,引入反镜像可能会有所帮助,例如通过在每个文本对象的开头设置这样的文本矩阵:
contentStream.beginText();
contentStream.setTextMatrix(new Matrix(1f, 0f, 0f, -1f, 0f, 0f));
此后所有y坐标变化需要被否定,特别是第二个参数contentStream.moveTextPositionByAmount
and contentStream.newLineAtOffset
.
(顺便一提,moveTextPositionByAmount
and newLineAtOffset
执行相同的操作,前者只是已弃用的变体,因此您可能希望在这两种情况下使用后者。)