조직 모드에서 PDF 이미지 표시


19

참고 :이 질문은되었다 여기에 질문 성공하지 전에.

인라인 이미지를 표시하는 조직 모드 기능은 주간 과학 보고서를 작성하는 데 환상적입니다. 그래프를 포함시키고, 데이터와 연결하고, 결론과 연결하며, org-mode의 힘을 실제로 활용할 수 있습니다.

내가 가진 유일한 문제는 조직이 기존 이미지 형식 (jpeg, png 등)을 사용하기 위해 이미지가 필요하다는 것과 그래프가 PDF로 표시되는 것을 선호한다는 것입니다.

조직 모드에서 인라인 PDF 이미지를 표시하려면 어떻게해야합니까?

마지막 목표는 org-mode에서 다음과 같은 링크를 작성하는 것입니다.

[[file:~/Work/grap.pdf]]

png 인 경우처럼 인라인으로 표시하십시오.

나는 jpeg 또는 무언가 (지금 내가하는 일)에 각 그래프의 사본을 가질 수 있다는 것을 알고 있지만, 약간 성가 시며 항상 pdf 그래프가 업데이트 될 위험이 있으며 jpeg를 업데이트하는 것을 잊어 버립니다.


솔루션 등이 힘 일 :의 라인을 따라가는 endless/update-includes동안 경우에, before-save-hook당신이 선을 발견 한 경우, #+NAME또는 #+CAPTION같은 태그로 :convertfrompdf있는 선 다음에 [[SOMEFILE.EXT]]당신이있는 Imagemagick의 실행, convert변환하는 기능 SOMEFILE.pdfSOMEFILE.EXT.
Kaushal Modi

@kaushalmodi 예. 또 다른 옵션은 org-display-images에 연결되는 것입니다.
Malabarba

pdf-tools / poppler를 기반으로 한 솔루션이 좋을 것입니다.
phils

답변:


15

참고 : convert이 솔루션이 작동하려면 ImageMagick이 시스템 ( 실행 파일)에 설치되어 있어야 합니다.

이 솔루션을 구현하는 방법

  • 이 기능 org-include-img-from-pdf은을 사용하여 PDF에서 이미지 형식으로 변환하는 주요 기능 convert입니다.
  • org 파일에가 포함되어 있으면 # ()convertfrompdf:t사용자에게 이미지 파일로 변환하려는 pdf 파일이 있다고 가정합니다. 사용자는 아래 예제와 같이 위의 특수 주석을 이미지 파일 링크 위에 놓아야합니다 .
  • 이미지 파일 형식은 괄호 링크의 파일 확장자에 의해 결정됩니다 [[./myimage.EXT]].

  • org-include-img-from-pdf함수를 추가하면 before-save-hook사용자가 파일을 저장할 때마다 해당 함수가 실행됩니다 (아래 함수 정의에 따른 elisp 스 니펫 참조).

설정 예

이 예제 설정에는 다음 파일이 있습니다.

  • 이미지 파일을 포함하는 아래와 같은 조직 파일.
  • pdf 파일 myimage.pdf.
# ()convertfrompdf:t
[[./myimage.png]]

PDF를 이미지 파일로 자동 변환하는 기능

(defun org-include-img-from-pdf (&rest _)
  "Convert pdf files to image files in org-mode bracket links.

    # ()convertfrompdf:t # This is a special comment; tells that the upcoming
                         # link points to the to-be-converted-to file.
    # If you have a foo.pdf that you need to convert to foo.png, use the
    # foo.png file name in the link.
    [[./foo.png]]
"
  (interactive)
  (if (executable-find "convert")
      (save-excursion
        (goto-char (point-min))
        (while (re-search-forward "^[ \t]*#\\s-+()convertfrompdf\\s-*:\\s-*t"
                                  nil :noerror)
          ;; Keep on going to the next line till it finds a line with bracketed
          ;; file link.
          (while (progn
                   (forward-line 1)
                   (not (looking-at org-bracket-link-regexp))))
          ;; Get the sub-group 1 match, the link, from `org-bracket-link-regexp'
          (let ((link (match-string-no-properties 1)))
            (when (stringp link)
              (let* ((imgfile (expand-file-name link))
                     (pdffile (expand-file-name
                               (concat (file-name-sans-extension imgfile)
                                       "." "pdf")))
                     (cmd (concat "convert -density 96 -quality 85 "
                                  pdffile " " imgfile)))
                (when (and (file-readable-p pdffile)
                           (file-newer-than-file-p pdffile imgfile))
                  ;; This block is executed only if pdffile is newer than
                  ;; imgfile or if imgfile does not exist.
                  (shell-command cmd)
                  (message "%s" cmd)))))))
    (user-error "`convert' executable (part of Imagemagick) is not found")))

이 기능을 실행할시기를 지정하기위한 후크 설정

(defun my/org-include-img-from-pdf-before-save ()
  "Execute `org-include-img-from-pdf' just before saving the file."
    (add-hook 'before-save-hook #'org-include-img-from-pdf nil :local))
(add-hook 'org-mode-hook #'my/org-include-img-from-pdf-before-save)

;; If you want to attempt to auto-convert PDF to PNG  only during exports, and not during each save.
;; (with-eval-after-load 'ox
;;   (add-hook 'org-export-before-processing-hook #'org-include-img-from-pdf))

코드 + MWE


이것은 내 보낸 파일이 pdf 대신 png를 사용한다는 것을 의미합니까?
gdkrmr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.