Định cỡ chính xác hình ảnh PNG trong markdown với pandoc cho html / pdf / docx


25

Tôi đang cố gắng sử dụng markdown với pandoc để chuyển đổi một tài liệu thành html, pdf và docx. Đó là một tài liệu cực kỳ đơn giản chỉ chứa văn bản không có toán học và một vài hình ảnh. Các hình ảnh ở định dạng PNG. Tôi bao gồm một hình ảnh bằng cách sử dụng này trong nguồn markdown:

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

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

</div>

và biên dịch nó thành:

# 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

Tôi nhận thấy rằng một số hình ảnh PNG có cùng kích thước có kích thước khác nhau ở định dạng HTML và PDF. Một PNG có kích thước 250x256 px với độ phân giải thấp (72 px / in) sẽ xuất hiện dưới dạng PDF với kích thước chính xác trên trang và xuất hiện ở kích thước hợp lý trong html, nhưng một PNG có cùng kích thước (250x256 px) nhưng độ phân giải cao (300 px / in) được thay đổi kích thước thành nhỏ trên trang trong đầu ra PDF. Tôi muốn tiếp tục tập hợp các hình ảnh PNG ở kích thước mà tôi chỉ định và để chúng xuất hiện ở kích thước đó ở cả định dạng HTML / PDF / DOCX.

Tôi sẵn sàng từ bỏ hỗ trợ docx tự động (hoặc xử lý nhiều định dạng thủ công sau) chỉ để có PDF / HTML.

Làm cách nào tôi có thể yêu cầu pandoc không thay đổi kích thước PNG cho PDF hoặc hình ảnh và để chúng xuất hiện trong hình ảnh chính xác của chúng? cảm ơn.


2
Một PNG có dung lượng 300dpi nhưng chỉ 250x256px nên khá nhỏ trên trang, phải không? (Nhỏ hơn một inch vuông.) Một PNG có dpi thấp hơn sẽ lớn hơn trên trang. Pandoc tính đến thông tin dpi, cũng như kích thước pixel, trong việc định cỡ hình ảnh. Và không nên sao? Có lẽ bạn có thể sử dụng CSS để thu nhỏ toàn cầu hình ảnh độ phân giải cao trong HTML.
John MacFarlane

1
@JohnMacFarlane: Tôi thấy rằng hành vi của pandoc là chính xác khi tính đến dpi - nhưng tôi muốn nó bỏ qua dpi và gắn với kích thước tuyệt đối, để tôi có thể giữ một PNG độ phân giải cao cho tất cả các hình ảnh. Là cách chính xác để làm điều này để tạo phiên bản hình ảnh có độ phân giải thấp hơn, hay có cách nào để tạo ra pandoc chỉ đơn giản là sử dụng kích thước của hình ảnh và bỏ qua độ phân giải? Điều đó sẽ đơn giản nhất từ ​​cuối của tôi
user46976

Câu trả lời:


17

Kích thước được chuyển đổi thành pixel cho đầu ra ở định dạng giống như HTML. Sử dụng tùy chọn --dpi để chỉ định số pixel trên mỗi inch. Mặc định là 96dpi.

Tìm yếu tố phổ biến nhất trong hình ảnh của bạn và sử dụng đó. Chỉ sửa đổi các ngoại lệ.


Ví dụ: dpi, chiều rộng, chiều cao.

Nếu bạn cung cấp cho nó thông tin dpi:

Thêm tùy chọn --dpi như đã nêu để ghi đè mặc định.


Nếu hầu hết các hình ảnh của bạn có chiều cao hoặc chiều rộng chung, điều đó sẽ dễ dàng được sửa.

Ví dụ: bạn đã thay đổi dòng thành:

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

hoặc là

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

Hoặc làm điều này trong đánh dấu HTML thẳng:

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

hoặc là

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

và tỷ lệ sẽ chính xác.


Tham khảo: Pandoc Readme

Đối với HTML và EPUB, tất cả các thuộc tính ngoại trừ chiều rộng và chiều cao (nhưng bao gồm srcset và kích thước) đều được truyền qua. Các nhà văn khác bỏ qua các thuộc tính không được hỗ trợ bởi định dạng đầu ra của họ.

Các thuộc tính chiều rộng và chiều cao trên hình ảnh được xử lý đặc biệt. Khi được sử dụng mà không có đơn vị, đơn vị được coi là pixel. Tuy nhiên, bất kỳ số nhận dạng đơn vị nào sau đây có thể được sử dụng: px, cm, mm, in, inch và%.

Kích thước được chuyển đổi thành inch cho đầu ra ở định dạng dựa trên trang như LaTeX. Kích thước được chuyển đổi thành pixel cho đầu ra ở định dạng giống như HTML. Sử dụng tùy chọn --dpi để chỉ định số pixel trên mỗi inch. Mặc định là 96dpi.

Đơn vị% thường liên quan đến một số không gian có sẵn. Ví dụ, ví dụ trên sẽ kết xuất thành <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).

Một số định dạng đầu ra có khái niệm về một lớp (ConTeXt) hoặc một mã định danh duy nhất (LaTeX \ caption) hoặc cả hai (HTML).

Khi không có thuộc tính chiều rộng hoặc chiều cao được chỉ định, dự phòng sẽ xem xét độ phân giải hình ảnh và siêu dữ liệu dpi được nhúng trong tệp hình ảnh.


3
Người ta cũng có thể sử dụng { width=100% }cho độ rộng tương đối so với kích thước màn hình / trang / đường truyền tổng thể.
rriemann

Điều này có thể được sử dụng với cú pháp pandoc-crossrefs {#fig:refname}?
oarfish

1
Trả lời bình luận của riêng tôi: {#fig:refname width=50%}công trình.
oarfish
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.