2016-07-20 118 views
0

我需要替换具有图像,链接,段落文本等的多个PDF页面中的特定超链接。我可以更改注释,但不能更改相应的链接文本。这里是到目前为止如何使用itext替换PDF中的超链接文本

for (int i = 1; i <= reader.getNumberOfPages(); i++) { 
PdfArray array = reader.getPageN(i).getAsArray(PdfName.ANNOTS); 
if (array == null) continue; 
for (int j = 0; j < array.size(); j++) {   
    PdfDictionary annot = array.getAsDict(j); 
    PdfDictionary link = (PdfDictionary)reader.getPdfObjectRelease(annot); 
    if(i==1 && j==0 || i==2 && j==0 || i==3 && j==0 || i==4 && j==0 || i==4 && j==1){ 
     link.put(PdfName.A, new PdfAction(newurl)); 
    } 
} 
} 

我曾尝试更换使用下面的代码链接文本的代码,但它似乎并不存在于流的字节。

PdfObject object = dict.getDirectObject(PdfName.CONTENTS); 
if (object instanceof PRStream) { 
    PRStream stream = (PRStream)object; 
    byte[] data = PdfReader.getStreamBytes(stream); 
    stream.setData(new String(data).replace(oldstring, newstring).getBytes()); 
} 

此外,链接文字下划线必须保留

+0

您可以找到文本位置使用文本提取机制,然后用白色矩形覆盖原始链接(或使用pdf清除将其删除),并最终在该位置写入新链接。 – mkl

+0

我能够找到文本和封面,但其下的注释并未完全删除。试着用'link.remove(PdfName.A);' – Emerald

+0

你能帮我用代码 – Emerald

回答

1

下面的代码为我工作,我不得不改变在多个页面

出现在同一个位置的超链接
Chunk url = new Chunk(new_url_text); 
url.setUnderline(0.1f, -2f);   
BaseColor bcolor = new BaseColor(0xFF, 0xFF, 0xFF); 
Font ffont = new Font(); 
ffont.setColor(0, 114, 53); 
ffont.setSize(12); 
Phrase p = new Phrase("",ffont); // Text that appears before the link can be added here (optional) 
p.add(url); 
int pages = reader.getNumberOfPages(); 
for (int j = 1; j <= reader.getNumberOfPages(); j++) { 
    PdfContentByte canvas = stamper.getOverContent(j); 
    canvas.setColorFill(bcolor); 
    canvas.rectangle(270, 135, 500, 40); 
    canvas.fill();   
    ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, p, 340, 160, 0); 
} 
相关问题