我以为我理解了你的问题,但你对我的反问题的回答令人困惑,所以让我举一个例子,在我解释它时回答你的问题。
假设您有这样的文本:
我还有一个矩形的坐标:new Rectangle(100, 500, 200, 600); 和一个偏移量:将该矩形中的所有内容向左移动 10 个点,向底部移动 2 个点,如下所示:
这很容易实现。看看CutAndPaste 的例子:
public void manipulatePdf(String src, String dest)
throws IOException, DocumentException {
// Creating a reader
PdfReader reader = new PdfReader(src);
// step 1
Rectangle pageSize = reader.getPageSize(1);
Rectangle toMove = new Rectangle(100, 500, 200, 600);
Document document = new Document(pageSize);
// step 2
PdfWriter writer
= PdfWriter.getInstance(document, new FileOutputStream(dest));
// step 3
document.open();
// step 4
PdfImportedPage page = writer.getImportedPage(reader, 1);
PdfContentByte cb = writer.getDirectContent();
PdfTemplate template1 = cb.createTemplate(pageSize.getWidth(), pageSize.getHeight());
template1.rectangle(0, 0, pageSize.getWidth(), pageSize.getHeight());
template1.rectangle(toMove.getLeft(), toMove.getBottom(),
toMove.getWidth(), toMove.getHeight());
template1.eoClip();
template1.newPath();
template1.addTemplate(page, 0, 0);
PdfTemplate template2 = cb.createTemplate(pageSize.getWidth(), pageSize.getHeight());
template2.rectangle(toMove.getLeft(), toMove.getBottom(),
toMove.getWidth(), toMove.getHeight());
template2.clip();
template2.newPath();
template2.addTemplate(page, 0, 0);
cb.addTemplate(template1, 0, 0);
cb.addTemplate(template2, -20, -2);
// step 4
document.close();
reader.close();
}
如果这不是你想要的。如果您想检测实际单词并移动这些单词,那么您就有问题了。在这种情况下,我们谈论的项目可能很容易花费几个月的时间才能正确完成,而您的简短问题在很大程度上不足以知道在可以想象的许多边缘情况下该怎么做。