Die Größe von PNG-Bildern im Markdown mit Pandoc für html / pdf / docx wurde korrekt angepasst

25

Ich versuche, Markdown mit Pandoc zu verwenden, um ein einzelnes Dokument in HTML, PDF und Docx zu konvertieren. Es ist ein extrem einfaches Dokument, das nur mathematikfreien Text und ein paar Bilder enthält. Die Bilder sind im PNG-Format. Ich füge ein Bild mit diesem Code in die Markdown-Quelle ein:

<div style="float:center" markdown="1">

![my caption](./figures/myimage.png)

</div>

und kompiliere es als:

# html
pandoc myarticle.md -c mystyle.css -o myarticle.html
# pdf
pandoc myarticle.md -V geometry:margin=1in -o myarticle.pdf
# docx
pandoc myarticle.md -o myarticle.docx

Ich habe festgestellt, dass einige PNG-Bilder mit denselben Abmessungen in HTML- und PDF-Formaten unterschiedlich groß sind. Eine PNG-Datei mit einer Auflösung von 250 x 256 Pixel und einer Auflösung von 72 Pixel / Zoll wird im PDF-Format ungefähr auf der Seite in der richtigen Größe und in einer vernünftigen Größe in HTML angezeigt, eine PNG-Datei mit den gleichen Abmessungen (250 x 256 Pixel) jedoch Bei hoher Auflösung (300 px / in) wird die Größe der Seite in der PDF-Ausgabe so geändert, dass sie winzig ist. Ich möchte eine Reihe von PNG-Bildern in einer von mir festgelegten Größe beibehalten und sie in dieser Größe sowohl in den Formaten HTML / PDF / DOCX anzeigen lassen.

Ich bin bereit, die automatische DocX-Unterstützung aufzugeben (oder mich danach mit vielen manuellen Formatierungen zu befassen), um nur PDF / HTML zu haben.

Wie kann ich pandoc anweisen, die Größe von PNGs für PDFs oder Bilder nicht zu ändern und sie in den richtigen Bildern anzuzeigen? Vielen Dank.

user46976
quelle
2
Ein PNG mit 300 dpi, aber nur 250 x 256 Pixel sollte auf der Seite recht klein sein, oder? (Weniger als ein Quadratzoll.) Eine PNG-Datei mit einer niedrigeren Auflösung wird auf der Seite größer. Bei der Größenanpassung der Bilder berücksichtigt Pandoc sowohl die dpi-Informationen als auch die Pixelgröße. Und sollte es nicht? Vielleicht könnten Sie CSS verwenden, um die hochauflösenden Bilder in HTML global zu verkleinern.
John MacFarlane
1
@JohnMacFarlane: Ich sehe, dass das Verhalten von pandoc bei der Berücksichtigung von dpi korrekt ist - aber ich möchte, dass es dpi ignoriert und bei absoluten Größen bleibt, damit ich eine einzige hochauflösende PNG für alle Bilder behalten kann. Ist der richtige Weg dies zu tun, um eine Version der Bilder mit niedrigerer Auflösung zu erstellen, oder gibt es eine Möglichkeit, Pandoc dazu zu bringen, einfach nur die Bildabmessungen zu verwenden und die Auflösung zu ignorieren? Das wäre für mich am einfachsten
user46976

Antworten:

17

Die Abmessungen werden für die Ausgabe in HTML-ähnlichen Formaten in Pixel konvertiert. Verwenden Sie die Option --dpi, um die Anzahl der Pixel pro Zoll anzugeben. Der Standardwert ist 96 dpi.

Finden Sie das häufigste Element in Ihren Bildern und verwenden Sie dieses. Ändern Sie nur die Ausnahmen.


Beispiele: dpi, Breite, Höhe.

Wenn Sie die dpi-Informationen angeben:

Fügen Sie die Option --dpi wie angegeben hinzu, um die Standardeinstellung zu überschreiben.


Wenn die meisten Ihrer Bilder eine gemeinsame Höhe oder Breite haben, sollte dies leicht zu korrigieren sein.

Beispielsweise haben Sie die Zeile geändert in:

![my caption](./figures/myimage.png){ width=250px }

oder

![my caption](./figures/myimage.png){ height=256px }

Oder tun Sie dies in direktem HTML-Markup:

<img src="./figures/myimage.png" alt="my caption" style="width: 250px;"/>

oder

<img src="./figures/myimage.png" alt="my caption" style="height: 256px;"/>

und das Verhältnis wird korrekt sein.


Referenz: Pandoc Readme

Bei HTML und EPUB werden alle Attribute außer width und height (einschließlich srcset und sizes) unverändert übergeben. Die anderen Autoren ignorieren Attribute, die von ihrem Ausgabeformat nicht unterstützt werden.

Die Attribute width und height für Bilder werden speziell behandelt. Bei Verwendung ohne Einheit wird angenommen, dass die Einheit Pixel ist. Es kann jedoch eine der folgenden Einheitenkennungen verwendet werden: px, cm, mm, in, inch und%.

Abmessungen werden für die Ausgabe in seitenbasierten Formaten wie LaTeX in Zoll konvertiert. Die Abmessungen werden für die Ausgabe in HTML-ähnlichen Formaten in Pixel konvertiert. Verwenden Sie die Option --dpi, um die Anzahl der Pixel pro Zoll anzugeben. Der Standardwert ist 96 dpi.

Die% -Einheit ist im Allgemeinen relativ zu verfügbarem Speicherplatz. Zum Beispiel wird das obige Beispiel in <img href="file.jpg" style="width: 50%;" />(HTML), \includegraphics[width=0.5\textwidth]{file.jpg} (LaTeX), or \externalfigure[file.jpg][width=0.5\textwidth](ConTeXt) gerendert.

Einige Ausgabeformate haben die Bezeichnung einer Klasse (ConTeXt) oder eine eindeutige Kennung (LaTeX \ caption) oder beides (HTML).

Wenn keine Breiten- oder Höhenattribute angegeben sind, werden als Ersatz die Bildauflösung und die in die Bilddatei eingebetteten dpi-Metadaten verwendet.

BloodyEl
quelle
3
Man kann auch { width=100% }für relative Breiten zur gesamten Bildschirm- / Seiten- / Linienbreitengröße verwenden.
Riemann
Kann dies mit pandoc-crossrefs {#fig:refname}Syntax verwendet werden?
Oarfish
1
Auf meinen eigenen Kommentar antworten: {#fig:refname width=50%}funktioniert.
Oarfish