Dateigröße mit Base64-Bildkopf- und Fußzeilen reduzieren

This article was translated from English: Does it need improvement?
Translated
View the article in English

Das Hinzufügen eines Base64-Bildes zu einer Kopf- oder Fußzeile in einem großen mehrseitigen PDF kann die Ausgabedatei erheblich aufblähen. Die Lösung besteht darin, das Bild nur einmal einzubetten, anstatt auf jeder Seite, während Seitentext wie {page} weiterhin normal gerendert wird.

Die Aufblähung tritt auf, weil der Renderer einen kombinierten Fragment behandelt. Wenn ein einzelnes Fragment sowohl das Bild als auch dynamische Inhalte wie {page} enthält, behandelt die Engine das gesamte HTML als dynamisch und bettet das Base64-Bild auf jeder Seite erneut ein. Das Aufteilen der Arbeit in zwei Durchgänge hält das Bild statisch und die Seitennummer-Schicht klein.

Lösung

1. Teilen Sie die Kopf- oder Fußzeile in zwei Fragmente

Trennen Sie den Inhalt in ein statisches Fragment und ein dynamisches. Legen Sie das Bild und jeden nicht veränderlichen Text in das statische Fragment. Legen Sie Seitentexte wie {page} in das dynamische Fragment. Geben Sie beiden Fragmenten das gleiche Tabellenlayout und die gleiche Zellbreite, sodass der dynamische Text korrekt über der statischen Schicht landet.

2. Fügen Sie zuerst das statische Fragment hinzu

Rufen Sie AddHtmlHeadersAndFooters nur mit dem statischen Fragment auf. Das Base64-Bild wird einmalig gerendert und eingebettet.

3. Fügen Sie das dynamische Fragment in einem zweiten Durchgang hinzu

Rufen Sie AddHtmlHeadersAndFooters erneut nur mit dem dynamischen Fragment auf. Da dieser Durchgang kein Bild enthält, bleibt der Seitentext klein.

using IronPdf;

var pdf = PdfDocument.FromFile("input.pdf");

// Static layer: holds the Base64 image. The page-number cell is left empty.
string staticFooter = @"
<table style='width:100%; table-layout:fixed;'>
  <tr>
    <td style='width:20%;'>
      <img src='data:image/png;base64,iVBORw0KGg...' style='width:150px;' />
    </td>
    <td style='width:80%; text-align:right;'></td>
  </tr>
</table>";

// Dynamic layer: holds only {page}. Same layout, but no image.
string dynamicFooter = $@"
<table style='width:100%; table-layout:fixed;'>
  <tr>
    <td style='width:20%;'></td>
    <td style='width:80%; text-align:right; font-size:10px;'>Page {{page}} of {pdf.PageCount}</td>
  </tr>
</table>";

// Pass 1: add the static image footer (image embedded once).
pdf.AddHtmlHeadersAndFooters(new ChromePdfRenderOptions
{
    HtmlFooter = new HtmlHeaderFooter { HtmlFragment = staticFooter, MaxHeight = 40 }
});

// Pass 2: add the dynamic page-number footer (no image, stays small).
pdf.AddHtmlHeadersAndFooters(new ChromePdfRenderOptions
{
    HtmlFooter = new HtmlHeaderFooter { HtmlFragment = dynamicFooter, MaxHeight = 40 }
});

pdf.SaveAs("output.pdf");
using IronPdf;

var pdf = PdfDocument.FromFile("input.pdf");

// Static layer: holds the Base64 image. The page-number cell is left empty.
string staticFooter = @"
<table style='width:100%; table-layout:fixed;'>
  <tr>
    <td style='width:20%;'>
      <img src='data:image/png;base64,iVBORw0KGg...' style='width:150px;' />
    </td>
    <td style='width:80%; text-align:right;'></td>
  </tr>
</table>";

// Dynamic layer: holds only {page}. Same layout, but no image.
string dynamicFooter = $@"
<table style='width:100%; table-layout:fixed;'>
  <tr>
    <td style='width:20%;'></td>
    <td style='width:80%; text-align:right; font-size:10px;'>Page {{page}} of {pdf.PageCount}</td>
  </tr>
</table>";

// Pass 1: add the static image footer (image embedded once).
pdf.AddHtmlHeadersAndFooters(new ChromePdfRenderOptions
{
    HtmlFooter = new HtmlHeaderFooter { HtmlFragment = staticFooter, MaxHeight = 40 }
});

// Pass 2: add the dynamic page-number footer (no image, stays small).
pdf.AddHtmlHeadersAndFooters(new ChromePdfRenderOptions
{
    HtmlFooter = new HtmlHeaderFooter { HtmlFragment = dynamicFooter, MaxHeight = 40 }
});

pdf.SaveAs("output.pdf");
Imports IronPdf

Dim pdf = PdfDocument.FromFile("input.pdf")

' Static layer: holds the Base64 image. The page-number cell is left empty.
Dim staticFooter As String = "
<table style='width:100%; table-layout:fixed;'>
  <tr>
    <td style='width:20%;'>
      <img src='data:image/png;base64,iVBORw0KGg...' style='width:150px;' />
    </td>
    <td style='width:80%; text-align:right;'></td>
  </tr>
</table>"

' Dynamic layer: holds only {page}. Same layout, but no image.
Dim dynamicFooter As String = $"
<table style='width:100%; table-layout:fixed;'>
  <tr>
    <td style='width:20%;'></td>
    <td style='width:80%; text-align:right; font-size:10px;'>Page {{page}} of {pdf.PageCount}</td>
  </tr>
</table>"

' Pass 1: add the static image footer (image embedded once).
pdf.AddHtmlHeadersAndFooters(New ChromePdfRenderOptions With {
    .HtmlFooter = New HtmlHeaderFooter With {.HtmlFragment = staticFooter, .MaxHeight = 40}
})

' Pass 2: add the dynamic page-number footer (no image, stays small).
pdf.AddHtmlHeadersAndFooters(New ChromePdfRenderOptions With {
    .HtmlFooter = New HtmlHeaderFooter With {.HtmlFragment = dynamicFooter, .MaxHeight = 40}
})

pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

Die beiden table-layout:fixed-Fragmente haben identische Zellbreiten, sodass die Seitennummer im zweiten Durchgang genau dort sitzt, wo die leere Zelle im ersten war. Die gleiche Technik gilt für Kopfzeilen: Halten Sie das Bild im statischen Durchgang und platzieren Sie jeden dynamischen Kopfzeilentext im zweiten Durchgang.

Wenn beide Fragmente nicht die gleiche Tabellenstruktur und Zellbreiten haben, wird der dynamische Text wie die Seitennummer nicht über der statischen Schicht ausgerichtet.

Option: Referenzieren Sie ein externes Bild oder SVG

Wenn das Bild nicht als Base64 eingebettet werden muss, kann das Verweisen von <img> auf eine externe Datei oder die Verwendung eines SVG die Ausgabegröße weiter als ein Base64-String verringern.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen
Bereit anzufangen?
Nuget Downloads 20,296,129 | Version: 2026.7 gerade veröffentlicht
Still Scrolling Icon

Scrollst du immer noch?

Sie brauchen schnell einen Beweis? PM > Install-Package IronPdf
Führen Sie eine Probe aus Sehen Sie zu, wie Ihr HTML-Code in eine PDF-Datei umgewandelt wird.