แสดงภาพ PDF ในโหมดองค์กร


19

หมายเหตุ: คำถามนี้ถูกถามที่นี่ก่อนหน้านี้โดยไม่ประสบความสำเร็จ

ความสามารถของโหมด Org ในการแสดงภาพอินไลน์นั้นยอดเยี่ยมสำหรับการเขียนรายงานทางวิทยาศาสตร์ประจำสัปดาห์ของฉัน ฉันสามารถรวมกราฟเชื่อมโยงข้อมูลของพวกเขาเชื่อมโยงกับข้อสรุปและใช้ประโยชน์จากพลังของโหมดองค์กร

ปัญหาเดียวที่ฉันมีคือองค์กรต้องการภาพที่จะใช้รูปแบบภาพทั่วไป (jpeg, png, ฯลฯ ) ในขณะที่ฉันต้องการให้กราฟของฉันเป็น PDF

ฉันจะแสดงรูปภาพ pdf แบบอินไลน์ในโหมดองค์กรได้อย่างไร

วัตถุประสงค์สุดท้ายของฉันคือการเขียนลิงค์เช่นนี้ในโหมดองค์กร:

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

และให้มันแสดงแบบอินไลน์เหมือนว่ามันจะเกิดขึ้นถ้ามันเป็น png

ฉันรู้ว่าฉันสามารถมีสำเนาของกราฟแต่ละอันใน jpeg หรืออะไรบางอย่าง (ซึ่งเป็นสิ่งที่ฉันทำอยู่ตอนนี้) แต่มันก็ค่อนข้างยุ่งยากและมันก็มีความเสี่ยงที่จะได้รับการอัพเดตกราฟ pdf และฉันก็ลืมปรับปรุง jpeg


งานนี้อาจเป็นวิธีแก้ปัญหา: ไปตามสายของendless/update-includesถ้าในระหว่างbefore-save-hookถ้าคุณพบว่าสอดคล้องกับ#+NAMEหรือ#+CAPTIONมีแท็กเช่น:convertfrompdfตามสายด้วย[[SOMEFILE.EXT]]แล้วคุณรัน ImageMagick convertฟังก์ชั่นแปลงไปSOMEFILE.pdf SOMEFILE.EXT
Kaushal Modi

@kaushalmodi ใช่ ตัวเลือกอื่นจะเป็นสิ่งที่ hooks ลงใน org-display-images
Malabarba

วิธีแก้ปัญหาจาก pdf-tools / poppler น่าจะดี
phils

คำตอบ:


15

หมายเหตุ : คุณต้องติดตั้ง ImageMagick ในระบบของคุณ ( convertปฏิบัติการได้) เพื่อให้วิธีนี้ใช้งานได้

วิธีการใช้งานวิธีแก้ไขปัญหานี้

  • ฟังก์ชั่นorg-include-img-from-pdfเป็นเทียมที่ไม่ PDF convertเพื่อการแปลงรูปแบบภาพที่ใช้
  • หากไฟล์ org มีอยู่# ()convertfrompdf:tจะถือว่าผู้ใช้มีไฟล์ pdf ที่ต้องการแปลงเป็นไฟล์รูปภาพ ผู้ใช้ควรใส่ความคิดเห็นพิเศษด้านบนลิงค์ไฟล์ภาพตามที่แสดงในตัวอย่างด้านล่าง
  • [[./myimage.EXT]]ประเภทไฟล์ภาพจะถูกกำหนดโดยนามสกุลของไฟล์ในการเชื่อมโยงในวงเล็บ

  • โดยการเพิ่มorg-include-img-from-pdfฟังก์ชั่นให้กับbefore-save-hookฟังก์ชั่นนั้นจะถูกดำเนินการทุกครั้งที่ผู้ใช้บันทึกไฟล์ (ดูตัวอย่าง elisp ตามคำนิยามฟังก์ชั่นด้านล่าง)

ตัวอย่างการตั้งค่า

ในตัวอย่างนี้ฉันมีไฟล์ดังต่อไปนี้:

  • ไฟล์ org เช่นด้านล่างที่มีไฟล์รูปภาพ
  • myimage.pdfไฟล์ 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")))

การตั้งค่า Hook เพื่อระบุเวลาที่จะเรียกใช้ฟังก์ชันนี้

(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


นี่หมายความว่าไฟล์ที่ส่งออกใช้ png แทนที่จะเป็น pdf หรือไม่
gdkrmr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.