PNG-Bilder beim Markdown mit Pandoc für HTML / PDF / Docx richtig dimensionieren

11392
user46976

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 Text ohne Mathe und einige Bilder enthält. Die Bilder sind im PNG-Format. Ich füge ein Bild mit diesem Code in der Markdown-Quelle ein:

<div style="float:center" markdown="1">  ![my caption](./figures/myimage.png)  </div> 

und kompilieren Sie 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 den gleichen Abmessungen in HTML- und PDF-Formaten unterschiedlich groß werden. Eine PNG-Datei mit einer Auflösung von 250x256 Pixeln und niedriger Auflösung (72 px / Zoll) wird in PDF in etwa auf der Seite in der richtigen Größe und in einer angemessenen Größe in HTML angezeigt. Eine PNG-Datei mit den gleichen Abmessungen (250x256 px) ist jedoch Hochauflösend (300 px / Zoll) wird die Größe der Seite in der PDF-Ausgabe so klein wie möglich. Ich möchte die PNG-Bilder in einer von mir angegebenen Größe beibehalten und in dieser Größe in beiden HTML / PDF / DOCX-Formaten anzeigen.

Ich bin bereit, die automatische Docx-Unterstützung aufzugeben (oder sich mit viel manueller Formatierung zu beschäftigen), nur um PDF / HTML zu erhalten.

Wie kann ich pandoc anweisen, PNGs für PDF oder Bilder nicht zu ändern und sie in den richtigen Bildern anzeigen zu lassen? Vielen Dank.

13
Eine PNG-Datei mit einer Auflösung von 300 dpi, aber nur 250 x 256 Pixel * sollte auf der Seite ziemlich klein sein, oder? (Weniger als ein Zoll-Quadrat.) Eine PNG-Datei mit niedrigerer Auflösung ist auf der Seite größer. Pandoc berücksichtigt bei der Größenanpassung der Bilder sowohl die dpi-Informationen als auch die Pixelgröße. Und sollte es nicht Vielleicht könnten Sie CSS verwenden, um die hochaufgelösten Bilder in HTML global zu verkleinern. John MacFarlane vor 9 Jahren 0
@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, sodass ich eine einzige hochauflösende PNG für alle Bilder beibehalten kann. Ist dies der richtige Weg, um eine Version mit niedrigerer Auflösung der Bilder zu erstellen, oder gibt es einen Weg, um Pandoc zu machen, einfach nur die Abmessungen des Bildes zu verwenden und die Auflösung zu ignorieren? Das wäre von meinem Ende am einfachsten user46976 vor 9 Jahren 0

1 Antwort auf die Frage

5
BloodyEl

Bemaßungen 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 das. Ä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 den Standardwert zu überschreiben.


Wenn die meisten Ihrer Bilder eine gemeinsame Höhe oder Breite haben, sollte dies leicht korrigiert werden.

Beispielsweise haben Sie die Zeile folgendermaßen geändert:

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

oder

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

Oder machen 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 mit Ausnahme von width und height (einschließlich srcset und Größen) unverändert übergeben. Die anderen Autoren ignorieren Attribute, die nicht vom Ausgabeformat unterstützt werden.

Die Breiten- und Höhenattribute in Bildern werden speziell behandelt. Bei Verwendung ohne Einheit werden Pixel als Einheit angenommen. Es können jedoch beliebige der folgenden Einheitenkennungen verwendet werden: px, cm, mm, in, inch und%.

Bemaßungen werden für die Ausgabe in seitenbasierten Formaten wie LaTeX in Zoll konvertiert. Bemaßungen 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 etwas verfügbarem Speicherplatz. Im obigen Beispiel wird zum Beispiel <img href="file.jpg" style="width: 50%;" />(HTML) \includegraphics[width=0.5\textwidth] (LaTeX), or \externalfigure[file.jpg][width=0.5\textwidth](ConTeXt) gerendert.

Einige Ausgabeformate haben eine Vorstellung von einer Klasse (ConTeXt) oder einer eindeutigen Kennung (LaTeX \ caption) oder beidem (HTML).

Wenn keine Breiten- oder Höhenattribute angegeben sind, werden im Fallback die Bildauflösung und die in die Bilddatei eingebetteten dpi-Metadaten betrachtet.

Man kann auch für relative Breiten zur gesamten Bildschirm- / Seiten- / Linienbreite verwenden. rriemann vor 5 Jahren 0
Kann dies mit der `{#fig: refname}` - Syntax von Pandoc-crossref verwendet werden? oarfish vor 5 Jahren 0
Beantworte meinen eigenen Kommentar: `{#fig: refname width = 50%}` funktioniert. oarfish vor 5 Jahren 0