emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Instructor account <instructor@andrew.cmu.edu>
To: Rainer M Krug <Rainer@krugs.de>
Cc: Andreas Leha <andreas.leha@med.uni-goettingen.de>, emacs-orgmode@gnu.org
Subject: Re: pdf images in html export
Date: Thu, 13 Nov 2014 07:21:58 -0500	[thread overview]
Message-ID: <m2tx2347fd.fsf@andrew.cmu.edu> (raw)
In-Reply-To: <m2mw7wwlph.fsf@krugs.de> (Rainer M. Krug's message of "Wed, 12 Nov 2014 15:13:46 +0100")


I think the best thing to do here is create a derived backend. Filters
could work to, but you will have to parse the img link, get the pdf
file, convert it and replace the path in the link.

with a derived backend you can get that a little more directly like
this. This code block works on a minimal example for me. I guess you
could make a little function to do the last line, and put this all in
your init files and it would work. This is a very unsophisticated format
function that does not check for attributes like width or height or link
descriptions... but, I get a png image in the html export of an org file
with a pdf image ;)


#+BEGIN_SRC emacs-lisp
(defun my-link-format (link contents info)
  (let ((type (org-element-property :type link))
	(path (org-element-property :path link)))
    (cond
     ((and
       (string= type "file")
       (string-match "\.pdf" path))
      (shell-command
       (format
	"convert %s %s"
	path
	(replace-regexp-in-string "\.pdf" ".png" path)))
      (format "<img src=\"%s\">" (replace-regexp-in-string "\.pdf" ".png" path)))
     ;; anything else, we just do the regular thing
     (t
      (org-html-link link contents info)))))

(org-export-define-derived-backend 'my-html 'html
  :translate-alist '((link . my-link-format)))


(browse-url (org-export-to-file 'my-html "custom-link.html"))
#+END_SRC

Rainer M Krug <Rainer@krugs.de> writes:

> Andreas Leha <andreas.leha@med.uni-goettingen.de> writes:
>
>> Hi Rainer,
>>
>> Rainer M Krug <Rainer@krugs.de> writes:
>>> Andreas Leha <andreas.leha@med.uni-goettingen.de> writes:
>>>
>>>> Hi Marco,
>>>>
>>>> Marco Wahl <marcowahlsoft@gmail.com> writes:
>>>>> Andreas Leha <andreas.leha@med.uni-goettingen.de> writes:
>>>>>
>>>>>> how would I export an org file containing
>>>>>>
>>>>>>   [[file:./myimage.pdf]]
>>>>>>
>>>>>> to html so that a say png version myimage.pdf is inlined in the html
>>>>>> which links to the pdf?
>>>>>>
>>>>>> I guess it should be possible to run imagemagick on all pdf links during
>>>>>> export somehow.
>>>>>      
>>>>> You could introduce a relation of the pdf-filenames to the respective
>>>>> thumb-filenames e.g. by using the suffix '_thumb'.  Before the export
>>>>> the conversion tool would create the thumbs.
>>>>>
>>>>> The org-file could reference the data as
>>>>>
>>>>> [[file:./myimage.pdf][file:myimage_thumb.png]]
>>>>>
>>>>> See the info page (info "(org)Images in HTML export")?
>>>>>
>>>>> Untested.  I just accidentially browsed that info page yesterday.
>>>>>
>>>>>
>>>>
>>>> Thanks for your thoughts.  I would like to automate all of that.  So, I
>>>> guess the first question is where to put code that would trigger the
>>>> conversion and how to best detect links to pdfs.
>>>
>>> Well - this is coming again and again - but no solution out of the
>>> box. There are effectively two approaches:
>>>
>>> 1) Macro to change properties according to backend used.  
>>>
>>> One usage is changing the file name extension according to the
>>> backend. This is implemented as a simplified macro below. This could
>>> be done by using ~(by-backend (html "graph.png") (latex "graph.pdf") (t "graph.pdf"))~
>>>  
>>> See [[http://orgmode.org/worg/org-contrib/babel/languages/ob-doc-LaTeX.html#sec-4-3][work section ob-doc-LaTeX]] for details.
>>>
>>> #+begin_src emacs-lisp
>>>   (setq org-babel-latex-htlatex "htlatex")
>>>   (defmacro rmk-by-backend (&rest body)
>>>     `(case (if (boundp 'backend) (org-export-backend-name backend) nil) ,@body))
>>> #+end_src
>>>
>>> 2) To use svg image format, which is supported by both (although has
>>>    it's drawbacks: slow rendering of the html, need to run external programs upon compilation)
>>>
>>> So the first might be the modst feasible option.
>>>
>>
>> Thanks for this.  I am aware of how to *produce* graphics in different
>> formats for different export backends.  I use your first approach,
>> which I think is the better solution.
>
> I agree with you.
>
>>
>> Here, I am after a solution, that works on images that are not produced
>> but merely included via [[file:./some.pdf]].
>
> OK - understood.
>
>>
>> I think there should be the possibility to include these into html (and
>> odt) export without any user interaction.  So, I
>> - do not want to write a source block just to produce the by-backend image
>> - do not want to change the link manually
>> - do not want to run the converter manually
>
> I agree with you - this *should* be possible, and I assume not to
> difficult to implement. In my opinion, this should also work out of the
> box when enabling it e.g. via a property.
>
>>
>> I am pretty sure this should be achievable with standard orgmode tools
>> (like filters, export hooks, or anything).
>
> Yes - it should be.
>
>>
>> Since 'this is coming again and again' it seems a non-esoteric task.
>> And as there is 'no solution out of the box', I assume(d) that somebody has
>> written these filters already.
>
> Unfortunately  not...
>
> Cheers,
>
> Rainer
>
>>
>> Regards,
>> Andreas
>>
>>
>>

-- 
-----------------------------------
John Kitchin
Professor
Doherty Hall A207F
Department of Chemical Engineering
Carnegie Mellon University
Pittsburgh, PA 15213
412-268-7803
http://kitchingroup.cheme.cmu.edu

  reply	other threads:[~2014-11-13 12:59 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-12  0:48 pdf images in html export Andreas Leha
2014-11-12  8:27 ` Marco Wahl
2014-11-12  9:30   ` Andreas Leha
2014-11-12 13:09     ` Rainer M Krug
2014-11-12 13:36       ` Andreas Leha
2014-11-12 14:13         ` Rainer M Krug
2014-11-13 12:21           ` Instructor account [this message]
2014-11-13 19:10             ` Andreas Leha
2014-11-12 19:03         ` Charles C. Berry
2014-11-12 20:50           ` Andreas Leha
2014-11-12 21:04         ` John Hendy
2014-11-12 21:32           ` Andreas Leha
2014-11-12 22:59             ` John Hendy
2014-11-13  9:11             ` Eric S Fraga

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

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m2tx2347fd.fsf@andrew.cmu.edu \
    --to=instructor@andrew.cmu.edu \
    --cc=Rainer@krugs.de \
    --cc=andreas.leha@med.uni-goettingen.de \
    --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 public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).