Org- मोड में पीडीएफ छवियों को प्रदर्शित करें


19

नोट: यह सवाल यहां पहले पूछा गया था , जिसमें कोई सफलता नहीं मिली।

मेरी साप्ताहिक वैज्ञानिक रिपोर्टें लिखने के लिए ऑर्ग-मोड की इनलाइन छवियों को प्रदर्शित करने की क्षमता शानदार है। मैं ग्राफ़ शामिल कर सकता हूं, उन्हें अपने डेटा के साथ लिंक कर सकता हूं, निष्कर्ष के साथ लिंक कर सकता हूं, और वास्तव में ऑर्ग-मोड की शक्ति का दोहन कर सकता हूं।

मेरे पास एकमात्र समस्या यह है कि ओआरजी को पारंपरिक छवि प्रारूपों (जेपीईजी, पीएनजी, आदि) का उपयोग करने के लिए छवियों की आवश्यकता होती है, जबकि मैं अपने ग्राफ़ के लिए पीडीएफ में रहना पसंद करता हूं।

मैं ऑर्ग-मोड में इनलाइन पीडीएफ इमेज कैसे दिखा सकता हूं?

मेरा अंतिम उद्देश्य सिर्फ ऑर्ग-मोड में इस तरह एक लिंक लिखना है:

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

और क्या यह इनलाइन प्रदर्शित होता है जैसे कि अगर यह एक पीएनजी होता।

मुझे पता है कि मैं बस jpeg या कुछ में प्रत्येक ग्राफ की एक प्रति हो सकती है (जो कि अभी मैं क्या कर रहा हूं), लेकिन यह थोड़ा बोझिल है और यह हमेशा पीडीएफ ग्राफ के अपडेट होने का जोखिम रखता है और मैं jpeg को अपडेट करना भूल जाता हूं।


एक समाधान के रूप यह हो सकता है काम: की तर्ज पर जा रहे हैं endless/update-includes, के दौरान अगर before-save-hook, आप के साथ एक लाइन पाते हैं #+NAMEया #+CAPTIONकी तरह एक टैग के साथ :convertfrompdfसाथ एक लाइन के द्वारा पीछा किया [[SOMEFILE.EXT]], तो आप ImageMagick को अंजाम convertपरिवर्तित करने के लिए समारोह SOMEFILE.pdfके लिए SOMEFILE.EXT
कौशल मोदी

@kaushalmodi हाँ। एक अन्य विकल्प कुछ ऐसा होगा जो ऑर्ग-डिस्प्ले-इमेज में हुक करता है।
मालाबार

Pdf-tools / poppler पर आधारित एक समाधान अच्छा होगा।
फिल्स

जवाबों:


15

नोट : convertकाम करने के लिए इस समाधान के लिए आपको अपने सिस्टम पर इमेजमैजिक इंस्टॉल करना होगा।

यह समाधान कैसे लागू किया जाता है

  • फ़ंक्शन org-include-img-from-pdfवर्कहोर्स है जो पीडीएफ टू इमेज फॉर्मेट रूपांतरण का उपयोग करता है convert
  • यदि ऑर्ग फाइल में समाहित है # ()convertfrompdf:t, तो यह माना जाएगा कि उपयोगकर्ता के पास एक पीडीएफ फाइल है जिसे वे एक इमेज फाइल में बदलना चाहते हैं। उपयोगकर्ता को छवि फ़ाइल लिंक के ऊपर उपरोक्त विशेष टिप्पणी डालनी चाहिए जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है।
  • छवि फ़ाइल प्रकार ब्रैकेट लिंक में फ़ाइल एक्सटेंशन द्वारा निर्धारित किया जाता है [[./myimage.EXT]]

  • org-include-img-from-pdfफ़ंक्शन को जोड़ने से before-save-hook, उस फ़ंक्शन को हर बार उपयोगकर्ता द्वारा फ़ाइल को सहेजने के बाद निष्पादित किया जाता है (फ़ंक्शन की परिभाषा का अनुसरण करते हुए elisp स्निपेट देखें)।

उदाहरण सेटअप

इस उदाहरण सेटअप में मेरे पास निम्नलिखित फाइलें हैं:

  • नीचे की तरह एक org फ़ाइल जिसमें एक छवि फ़ाइल शामिल है।
  • पीडीएफ फाइल myimage.pdf
# ()convertfrompdf:t
[[./myimage.png]]

छवि फ़ाइलों के लिए पीडीएफ कन्वर्ट ऑटो के लिए समारोह

(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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.