From: Kaushal Modi <kaushal.modi@gmail.com>
To: emacs-org list <emacs-orgmode@gnu.org>
Subject: Right way to add special processing to images?
Date: Thu, 12 Jan 2017 16:53:38 +0000 [thread overview]
Message-ID: <CAFyQvY2XSrN4K2VauKNUndGSX_kR7TPAm1E3h58wZFEWg=aSnA@mail.gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 2611 bytes --]
Hello,
I have this elisp function that I run in org-export-before-processing-hook
that coverts a pdf to png where that png file is already linked in the org
file. Just that the png file did not exist to begin with; it is converted
from pdf at the time of exporting. [Code is at the end of this email.]
But for that you work, need to add my special keyword "convertfrompdf t"
and I chose "#+HEADER" just before the image link to do that.
Here is my MWE:
=====
#+TITLE: PDF Image
#+NAME: fig:unicorn
# Below HEADER is required where the pdf version of the referenced png file
exists.
#+HEADER: :convertfrompdf t
# The below caption line is optional
#+CAPTION: Org-mode Unicorn Logo
[[./org-mode-unicorn-logo.png]]
=====
So the question is: Is using #+HEADER for this a good idea? Would the org
devs just a better way to do the same? I basically need to be able to
control per image link if that linked image foo.png needs to be converted
from a foo.pdf.
Thanks.
=====
(defun modi/org-include-img-from-pdf (&rest _)
"Convert the pdf files to image files.
Only looks at #+HEADER: lines that have \":convertfrompdf t\"."
(interactive)
(when (derived-mode-p 'org-mode)
(save-excursion
(goto-char (point-min))
(while (search-forward-regexp
"^\\s-*#\\+HEADER:.*\\s-:convertfrompdf\\s-+t"
nil 'noerror)
(let* (filenoext imgext imgfile pdffile cmd)
;; Keep on going on to the next line till it finds a line with
;; `[[FILE]]'
(while (progn
(forward-line 1)
(not (looking-at "\\[\\[\\(.*\\)\\.\\(.*\\)\\]\\]"))))
(when (looking-at "\\[\\[\\(.*\\)\\.\\(.*\\)\\]\\]")
(setq filenoext (match-string-no-properties 1))
(setq imgext (match-string-no-properties 2))
(setq imgfile (expand-file-name (concat filenoext "." imgext)))
(setq pdffile (expand-file-name (concat filenoext "." "pdf")))
(setq cmd (concat "convert -density 96 -quality 85 "
pdffile " " imgfile))
(when (file-newer-than-file-p pdffile imgfile)
;; This block is executed only if pdffile is newer than
imgfile
;; or if imgfile does not exist
;;
https://www.gnu.org/software/emacs/manual/html_node/elisp/Testing-Accessibility.html
(message "%s" cmd)
(shell-command cmd))))))))
=====
If interested, here is the code and MWE on my github repo:
https://github.com/kaushalmodi/.emacs.d/tree/master/elisp/org-include-img-from-pdf
--
Kaushal Modi
[-- Attachment #2: Type: text/html, Size: 3838 bytes --]
next reply other threads:[~2017-01-12 16:54 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-12 16:53 Kaushal Modi [this message]
2017-01-12 19:59 ` Right way to add special processing to images? Nicolas Goaziou
2017-01-12 20:08 ` Kaushal Modi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAFyQvY2XSrN4K2VauKNUndGSX_kR7TPAm1E3h58wZFEWg=aSnA@mail.gmail.com' \
--to=kaushal.modi@gmail.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.