2016-04-14 5 views
2

iTextSharp Verwenden von Inhalten in einem PDF hinzufügen, ich bin in der Lage, ein Bild von einer anderen PDF hinzufügen, indem Sie den folgenden Code verwenden:iTextSharp: Wie füge ich ein Bild von PDF als bewegliches Element hinzu?

void addImageFromPDF(string inputPath, string imagePath, string outputPath, int pageNumber) 
    { 
     PdfReader pdfReader_image = new PdfReader(imagePath); 
     PdfReader pdfReader = new PdfReader(inputPath); 
     PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(outputPath, FileMode.Create)); 
     PdfImportedPage page = pdfStamper.GetImportedPage(pdfReader_image, 1); 
     pdfStamper.GetOverContent(pageNumber).AddTemplate(page, 100, 100); 
     pdfStamper.Close(); 
    } 

Dies erhöht jedoch das Bild PDF als statisches Element - ich kann Klicken Sie nicht einmal darauf, um es zu markieren und ziehen Sie es dann herum oder löschen Sie es, so wie ich es mit einer Anmerkung machen kann. Gibt es eine Möglichkeit, ein PdfAnnotation (oder vergleichbar bewegliches grafisches Element) zu erstellen, das eine PdfImportedPage als Inhalt hat?

+0

Sind Sie sicher, dass dies in der PDF-Spezifikation erlaubt ist? – usr2564301

+0

@RadLexus, ja. Wenn Sie einen benutzerdefinierten Stempel erstellen, dessen Quelle ein PDF-Bild ist, können Sie dieses Bild in einer anderen PDF-Datei stempeln und dann ziehen. – sigil

+0

@RadLexus Bitte schauen Sie sich dieses PDF an und bewegen Sie sich um das iText-Logo: http://gitlab.itextsupport.com/itext/sandbox/raw/master/cmpfiles/annotations/cmp_stamp_annotation.pdf –

Antwort

3

Bitte werfen Sie einen Blick auf das Dokument stamp_annotation.pdf. Dieses Dokument enthält eine Stempelanmerkung mit dem iText-Logo. Da es sich um eine Anmerkung handelt, kann sie vom Benutzer, der das Dokument in Adobe Reader anzeigt, verschoben werden (dies funktioniert in anderen PDF-Viewern möglicherweise nicht ordnungsgemäß).

Der Code für dieses Beispiel finden Sie hier: AddStamp

public void manipulatePdf(String src, String dest) throws IOException, DocumentException { 
    PdfReader reader = new PdfReader(src); 
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); 
    Image img = Image.getInstance(IMG); 
    float w = img.getScaledWidth(); 
    float h = img.getScaledHeight(); 
    Rectangle location = new Rectangle(36, 770 - h, 36 + w, 770); 
    PdfAnnotation stamp = PdfAnnotation.createStamp(
      stamper.getWriter(), location, null, "ITEXT");      
    img.setAbsolutePosition(0, 0); 
    PdfContentByte cb = stamper.getOverContent(1); 
    PdfAppearance app = cb.createAppearance(w, h); 
    app.addImage(img); 
    stamp.setAppearance(PdfName.N, app); 
    stamp.setFlags(PdfAnnotation.FLAGS_PRINT); 
    stamper.addAnnotation(stamp, 1); 
    stamper.close(); 
    reader.close(); 
} 

In diesem Beispiel fügen wir die Stempel-Annotation zu einem vorhandenen Dokument. Wenn Sie ein Dokument von Grund auf neu erstellen, müssen Sie stamper.getWriter() durch writer, stamper.getOverContent(1) durch writer.getDirectContent() und stamper.addAnnotation(stamp, 1) durch writer.addAnnotation(stamp) ersetzen.

Verwandte Themen