2016-07-20 13 views
0

Ich muss einen bestimmten Hyperlink in mehreren PDF-Seiten ersetzen, die Bilder, Links, Absatztexte usw. hat. Ich bin in der Lage, die Anmerkungen zu ändern, aber nicht den entsprechenden Linktext. Hier ist der Code so weitSo ersetzen Sie Hyperlink-Text in PDF mit ITEXT

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)); 
    } 
} 
} 

habe ich versucht, den Link-Text ersetzt den Code unten verwenden, aber es ist nicht vorhanden scheint in den Stream-Bytes zu sein.

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()); 
} 

Auch hat der Link-Text unterstrichen

+0

Sie finden die Textstelle mit Hilfe von Text-Extraktionsmechanismen, dann den ursprünglichen Link mit einem weißen Rechteck abdecken (oder entfernen Sie es mit PDF-Bereinigung), und schließlich den neuen Link an der Position schreiben. – mkl

+0

Ich konnte den Text und das Cover finden, aber die Anmerkung darunter wird nicht vollständig entfernt. Versucht mit 'link.remove (PdfName.A);' – Emerald

+0

Können Sie mir bitte helfen mit Code – Emerald

Antwort

1

beibehalten werden Below-Code für mich gearbeitet, wo ich Hyperlinks am gleichen Standort wechseln mussten in mehreren Seiten erscheinen

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); 
}