2015-02-06 76 views
1

我的目標是移動PDF中的文本,該文本位於特定的矩形區域內。有一個在stackoverflow上的項目,這已經讓我接近這個: iText or iTextSharp rudimentary text edititext或itextsharp - 在現有PDF中移動文本

但是,我會回來操縱PDF在一個非常基本的水平。是否有機會使用itext的更高級別的工具來改變文本的位置?恐怕沒有簡單的解決方案,但我很樂意提供一些建議。 PS:還要記住,我只想在矩形區域內移動文本,即匹配原始PDF區域的文本(塊)應該在其x和y座標中移動一些。我對PDF的創建方式沒有影響,我可以接受一個只能模糊的解決方案。

+0

只是要清楚:你想要在矩形區域內移動文本。這是否意味着您知道該矩形的**座標**,並且您想要看起來好像該矩形已被剪切並放置在另一個位置? – 2015-02-06 15:02:42

+0

不,不是圖形效果。它可能會更加混亂。我有座標,並且我發現「在」內的任何文本塊都應該在x和y軸上移動給定數量的點。我發​​誓我上下讀了你的書,但仍然無法將我的頭圍繞在工作流程中這個任務:) – 2015-02-06 19:10:37

+1

你說*不*但有什麼區別? – mkl 2015-02-06 20:00:31

回答

1

我以爲我理解你的問題,但你對我的反問題的回答是令人困惑的,所以讓我給你一個解釋你的問題的例子。

假設你有這樣的文字: enter image description here

我也有一個矩形的座標:new Rectangle(100, 500, 200, 600);和偏移:在矩形移動所有10個點的左側和2點的底部,像這樣:

enter image description here

這是很容易實現的。看看在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(); 
} 

如果這不是你想要的。如果你想檢測實際的單詞並移動這些單詞,那麼你有一個問題。在那種情況下,我們正在討論一個項目,這個項目很容易花費幾個月的時間才能正確完成,而且你的簡短問題很大程度上不足以知道在可以想象的許多邊緣情況下該怎麼做。

+1

Geesh,這確實是我需要的解決方案。我的迴應是基於這樣一個假設,即實際的「剔除」效應確實更難以實現。但它也適合我的任務。非常感謝您提供解決方案和示例。我剛回到書中,也許我自己可以想出解決方案,但我無法將它拼湊在一起。 – 2015-02-07 16:07:50

相關問題