2016-05-26 7 views
2

Ich habe ein Bild und einen Text in der PDF-Datei mit iTextSharp hinzugefügt. Ich möchte jedoch mein Bild und meinen Text an einer bestimmten Stelle im PDF positionieren. Wie mache ich es?Stellen Sie die Position eines Textes oder eines Bildes in einem PDF mit iutxtsharp (C#/asp.net)

Bisher habe ich versucht,

img.SetAbsolutePosition(10000f,10000f); 

Aber es funktioniert nicht. Hier ist mein kompletter Code für die PDF-Generierung

private void generatepdf(byte[] byteImage) 
    { 


    //byte[] imageBytes = Convert.FromBase64String(base64); 

    string text1= "Some Text"; 
    iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(byteImage); 
    image.ScalePercent(0.3f * 100); 
    string logopath = Server.MapPath("~/images/img1.png"); 
    iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(logopath); 
    img.SetAbsolutePosition(1000f,1000f); 
    img.ScaleAbsolute(1500f, 0f); 
    img.ScalePercent(0.5f*100); 
    Paragraph ShopName = new Paragraph(text1); 
    Paragraph id = "Some Text"; 

    using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream()) 
    { 
     Document document = new Document(PageSize.A4, 188f, 88f, 5f, 10f); 
     PdfWriter writer = PdfWriter.GetInstance(document, memoryStream); 
     document.Open(); 
     document.Add(img); 
     document.Add(ShopName); 
     document.Add(image); 
     document.Add(id); 
     document.Close(); 
     byte[] bytes = memoryStream.ToArray(); 
     memoryStream.Close(); 

     Response.Clear(); 
     Response.ContentType = "application/pdf"; 
     Response.AddHeader("Content-Disposition", "attachment; filename=QRCode.pdf"); 
     Response.ContentType = "application/pdf"; 
     Response.Buffer = true; 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.BinaryWrite(bytes); 
     Response.End(); 
    } 

} 

Antwort

6

Wenn Sie versucht img.SetAbsolutePosition(10000f,10000f); dann Ihr Bild Art und Weise aus dem sichtbaren Bereich des PDF ist. Sie sind Ihre Document wie folgt zu erstellen:

Document document = new Document(PageSize.A4, 188f, 88f, 5f, 10f); 

Dies bedeutet, dass die Größe der Seite Benutzer 595 x 842 Einheiten ist. Mit x = 10000 und y = 10000 paßt nicht in einem Rechteck von 595 x 842.

Bitte versuchen:

img.SetAbsolutePosition(0,0); 

Wenn Sie diese Koordinaten verwenden, die linke untere Ecke des Bildes zusammenfallen mit der Minus- linke Ecke der Seite.

Bitte konsultieren Sie die offizielle iText-Dokumentation und suchen Sie nach coordinate system. Siehe zum Beispiel:

Dies wird Ihnen helfen zu finden, wie die Koordinaten für die SetAbsolutePosition() Methode zu definieren.

Update:

Sie auch über das Hinzufügen von Text in absoluten Positionen fragen. Hier müssen wir zwischen einer einzelnen Textzeile und einem Textblock unterscheiden. Siehe auch den Abschnitt Absolute positioning of text auf der offiziellen Website.

Eine einzelne Textzeile:

Siehe zum Beispiel How to position text relative to page? und Sie werden die showTextAligned() Methode finden:

ColumnText.showTextAligned(canvas, Element.ALIGN_CENTER, 
    new Phrase("Some text"), 100, 100, 0); 

Bitte stellen Sie sicher, dass Sie andere Beispiele zu lesen, so dass Sie, was entdecken Das canvas Objekt ist ungefähr.

Ein Textblock:

Werfen Sie einen Blick auf How to add text inside a rectangle?

ColumnText ct = new ColumnText(cb); 
ct.SetSimpleColumn(rect); 
ct.AddElement(new Paragraph("This is the text added in the rectangle")); 
ct.Go(); 

Bitte nehmen Sie sich einen Blick auf die volle Beispiel, um herauszufinden, was cb und rect über.

+0

Danke, Das hat gut für ein Bild funktioniert, wie wäre es mit dem Text? Wie kann ich das gleiche für einen Text tun? –

+0

Nachdem ich die Beschreibung von iText gelesen habe, habe ich diese Antwort nicht mehr akzeptiert und ColumnText.showTextAligned erfolgreich in meinem Code verwendet. –

Verwandte Themen