3 คะแนน โดย GN⁺ 2023-10-25 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • SumatraPDF เป็นโปรแกรมอ่านเอกสารหลายรูปแบบสำหรับ Windows รองรับไฟล์ PDF, EPUB, MOBI, CBZ, CBR, FB2, CHM, XPS และ DjVu
  • ใบอนุญาตคือ (A)GPLv3 และโค้ดบางส่วนใช้ใบอนุญาต BSD
  • ข้อมูลเพิ่มเติมดูได้ที่ Website, Manual, Developer Information

1 ความคิดเห็น

 
GN⁺ 2023-10-25
ความคิดเห็นจาก Hacker News
  • เมื่อ Adobe ผลักดันการทำเงินจาก Acrobat อย่างก้าวร้าวมากขึ้น งาน PDF บางส่วนจึงกำลังถูกย้ายไปใช้ เครื่องมือโอเพนซอร์ส SumatraPDF ก็เป็นหนึ่งในเครื่องมือที่ใช้ ส่วน qpdf ใช้สำหรับลบรหัสผ่าน ปลดล็อก และแปลงไฟล์ ติดตั้งบน WSL ได้ด้วย apt-get install qpdf
    สามารถลบรหัสผ่านได้ด้วย qpdf --decrypt --password="" input.pdf output.pdf และ PDF4QT เป็นโปรแกรมแก้ไข PDF แบบโอเพนซอร์สสำหรับลบ จัดเรียง และแยกหน้า แต่ยังไม่มีรีลีสบน Chocolatey จึงต้องติดตั้งเอง
    Inkscape และ LibreOffice Draw เหมาะสำหรับแก้ไข PDF และเพิ่มข้อความ, MuPDF มีเครื่องมือบรรทัดคำสั่งและแพ็กเกจ Python สำหรับพาร์ส กรอกฟอร์ม และเพิ่มข้อความ, SumatraPDF ใช้สำหรับเปิดดู และ pdfplumber มีประโยชน์ในการดึงตารางจาก PDF เข้าสู่ data pipeline ร่วมกับ Jupyter Lab

    • Firefox ก็สามารถเปิดดู PDF, เซ็นชื่อ และเพิ่มข้อความได้เช่นกัน หลังปลดล็อกแล้วถ้า พิมพ์เป็น PDF ก็ลบรหัสผ่านได้ด้วย
    • PDFTK และ pdfjam ก็เป็นเครื่องมือบรรทัดคำสั่งที่มีประโยชน์เช่นกัน PDFTK ใช้สำหรับรวม PDF, แยก ลบ และทำสำเนาหน้า รวมถึงคลายการบีบอัดเพื่อดึงข้อความและข้อมูลจากคำสั่ง PDF ดิบมาจัดการ ส่วน pdfjam ใช้สำหรับพิมพ์หลายหน้ารวมกันและปรับขนาดหน้ากับระยะขอบ
    • มีคนบอกว่า qpdf ไม่มีใน Chocolatey แต่ใน Scoop ซึ่งเป็น package manager อีกตัวของ Windows มีอยู่: https://github.com/ScoopInstaller/Main/blob/master/bucket/qp...
    • สำหรับการดึงตาราง ใช้ http://tabula.technology/ มาหลายปีแล้ว ตารางที่ค่อนข้างซับซ้อนก็จัดการได้ดี และไม่ค่อยมีปัญหาอะไร
    • จริง ๆ แล้วตอนนี้ SumatraPDF ใช้ MuPDF อยู่ เพียงแต่ยังมีข้อจำกัดบางอย่างในการเรนเดอร์ PDF และอีบุ๊ก เช่น การจัดการฟอร์แมตของ PDF หรือการแสดงอักขระ Unicode ใน epub
  • บทความ retrospective ที่ยอดเยี่ยมจากผู้เขียน SumatraPDF: https://blog.kowalczyk.info/article/2f72237a4230410a888acbfc...

    • สี่ประโยคในบทความ retrospective ที่ว่า “สามารถเขียนโค้ดที่ซับซ้อนและค่อนข้างปลอดบั๊กได้แม้ไม่มีการทดสอบ”, “ทำได้แม้ไม่มี code review”, “ถ้าไม่มีใครใช้แอป ต่อให้แครชก็ไม่เป็นไร”, “ถ้ามีคนใช้เยอะ เขาจะรายงานแครช แล้วเราก็แก้” ขัดแย้งกันเอง
      ความหมายจริง ๆ น่าจะใกล้เคียงกับว่า ให้ผู้ใช้เป็นคนทดสอบแทนได้ มากกว่า ไม่ใช่ว่าไม่จำเป็นต้องมีการทดสอบหรือ code review
      ผู้เขียนเองก็คงทดสอบโค้ดอยู่บ้าง เพราะการลองรันแอปก็ถือเป็นการทดสอบเหมือนกัน เพียงแต่น่าจะไม่ใช่วิธีที่เข้มงวดหรือเป็นระบบพอจะพูดถึงความอุ่นใจจาก regression test ได้
      แทบไม่มีใครจริงจังกับการอ้างว่าเป็นไปไม่ได้ที่จะเขียนโค้ดซับซ้อนโดยไม่มี automated test ผมสนับสนุน automated test อย่างมาก แต่ช่วงปลายยุค 90 ถึงต้นยุค 2000 เคยสร้าง renderer แบบ cross-platform ที่ค่อนข้างใหญ่โดยไม่มี automated test เลย กระบวนการนั้นใช้เวลานาน และยิ่งแก้ไขก็ยิ่งน่ากลัวขึ้นเรื่อย ๆ
    • กระทู้ HN เก่า ๆ ของบทความ retrospective 15 ปีของ SumatraPDF: https://news.ycombinator.com/item?id=27968900 - กรกฎาคม 2021, 133 ความเห็น
      กระทู้ปี 2023 ที่นำบทความเดียวกันมาโพสต์ซ้ำ: https://news.ycombinator.com/item?id=35065785 - มีนาคม 2023, 173 ความเห็น
    • จากส่วนที่ว่า “Gtk หน้าตาน่าเกลียด, Qt บวมมหาศาล, WxWidgets แทบใช้การไม่ได้” ดูเหมือนผู้เขียนจะไม่ได้ตามดู cross-platform toolkit มาตั้งแต่ยุค 90 แล้ว
    • เป็นบทความที่น่าสนใจ และส่วนที่พูดถึงการ เพิ่มฟังก์ชันแก้ไข ในตอนท้ายทำให้ประหลาดใจเป็นพิเศษ ฟังดูเหมือนหลุมดำที่ดูด feature request และความบวมของซอฟต์แวร์เข้าไปอย่างไม่มีที่สิ้นสุด
  • อยากให้นักพัฒนา PDF reader ทุกคนทำ ฟีเจอร์ overview ของ sioyek[0] เวลาวางเมาส์เหนือรายการ cross-reference เนื้อหาที่อ้างอิงจะเปิดขึ้นในหน้าต่างพรีวิวเล็ก ๆ
    เป็นฟีเจอร์ที่เปลี่ยนเกมโดยสิ้นเชิงเวลาอ่านตำราเรียนและบทความวิชาการด้านเทคนิค และจะเน้นย้ำประโยชน์ของมันเท่าไรก็ไม่เกินจริง
    [0] https://github.com/ahrm/sioyek#overview

    • ในฐานะผู้สร้าง SumatraPDF รู้จัก sioyek อยู่แล้ว และกำลังคิดจะหยิบไอเดียบางอย่างจากที่นั่นมาใช้ อาจจะอยู่ในเวอร์ชันถัดไป
    • Wikipedia ก็ทำงานคล้าย ๆ กัน ซึ่งคิดว่าคุณคงรู้อยู่แล้ว เลยสงสัยว่าผมเข้าใจอะไรผิดไป
      อีกอย่าง ถ้าฟีเจอร์นั้นทำให้ PDF reader รันโค้ดระยะไกลตามอำเภอใจได้ ก็น่าจะเป็นความเสี่ยงร้ายแรงไม่ใช่หรือ
    • นี่ไม่ใช่ transclusion ของ Ted Nelson หรอกเหรอ? กล่าวคือ “เนื้อหาเดียวกันปรากฏอยู่มากกว่าหนึ่งตำแหน่งในแบบที่รับรู้ได้”
      https://en.m.wikipedia.org/wiki/Transclusion
    • เจ๋งมาก อยากนำไอเดียบางส่วนเหล่านี้ไปใช้ในแอป Kavita ของผมด้วย
  • เพิ่งลองติดตั้งเป็นครั้งแรกเมื่อกี้ ประสิทธิภาพเหนือกว่า Adobe Reader แน่นอน และยังเหนือกว่า Foxit ด้วย การชนะ Adobe Reader ไม่ใช่เรื่องใหญ่อะไร แต่การชนะ Foxit นี่ค่อนข้างน่าประทับใจ
    ขนาดติดตั้งก็มีแค่ราว ๆ 10% ของโปรแกรมพวกนั้นเอง สงสัยจริง ๆ ว่า Adobe กำลังทำอะไรอยู่ ทำไมซอฟต์แวร์ถึงได้ช้าจนทนไม่ได้และใช้งานลำบากขนาดนี้

    • Adobe น่าจะกำลังรับมือกับการ รองรับสเปก PDF 100% และคำขอฟีเจอร์ลึกลับซับซ้อนที่บริษัท 6 แห่งในอุตสาหกรรมเฉพาะทางแคบ ๆ ต้องการอย่างสุด ๆ อยู่
      Sumatra นั้นยอดเยี่ยม และแทบจะเป็น PDF reader ตัวเดียวที่ใช้บน Windows แต่มีฟีเจอร์แค่ประมาณ 10% ของ Adobe Acrobat เท่านั้น อย่างไรก็ตาม 10% นั้นคือฟีเจอร์ที่แทบทุกคนต้องการ
    • สิ่งที่น่าประทับใจกว่านั้นน่าจะเป็นการที่มันเป็นโปรเจกต์ของ นักพัฒนาคนเดียว SumatraPDF เป็นหนึ่งในตัวอย่างเด่นของโปรเจกต์ซอฟต์แวร์ที่ยอดเยี่ยม และเป็นสิ่งที่น่าเอาเป็นเป้าหมาย
    • ถ้าถามว่า Adobe ทำอะไรอยู่ ก็อาจจะกำลังจัดการกับรายการฟีเจอร์ที่ผู้ใช้เคยขอไว้ทั้งหมดจนถึงตอนนี้ก็ได้ คอมเมนต์ในนี้ก็ล้วนเป็นแนว “Sumatra ดีนะ แต่ขาดฟีเจอร์โน่นนี่” ทั้งนั้น
    • หลังจากโดนตอนที่ Foxit เริ่มพ่วง สปายแวร์ มาด้วย ก็ลังเลที่จะลองตัวอื่น ๆ ไปเลย
    • https://old.reddit.com/r/geek/comments/ddh5p/comment/c0zfics...
  • ขออวยพรให้คนที่เห็นสเปก PDF แล้วคิดว่า “ดีเลย อยากลองเขียน parser สำหรับสิ่งนี้”

    • ในฐานะคนที่สร้าง SumatraPDF ถ้าพูดอย่างเป็นธรรม ผมไม่ได้เขียนการเรนเดอร์ PDF เองจริง ๆ นั่นเป็นงานที่ไม่ง่ายเลย
      เมื่อก่อนใช้ poppler แล้วเปลี่ยนมาใช้ MuPDF ตอนนั้น MuPDF มีความเคลื่อนไหวมากกว่า และหลังจากนั้น poppler ก็ดูเหมือนจะเริ่มพัฒนาเร็วขึ้นด้วย
      ชุดฟีเจอร์ PDF หลัก ๆ เองไม่ได้แย่ขนาดนั้นในแง่การนำไป implement เท่าที่เห็น ส่วนที่แย่และซับซ้อนคือสิ่งที่เพิ่มเข้ามาทีหลังอย่าง XML, JavaScript ในฟอร์ม, ฟีเจอร์กราฟิกเวกเตอร์ซับซ้อนอย่าง vector masking, การรองรับ color space หลายแบบและ CMYK separation, การจัดการฟอนต์และการเรนเดอร์ข้อความ
      ความยากอีกอย่างคือยังต้องเรนเดอร์ PDF ที่สร้างผิด ๆ ให้เร็วด้วย PDF นั้นทำพังได้ง่ายตอนสร้าง และผู้คนก็ทำพังกันในทุกวิธีที่จินตนาการได้ ถ้า Adobe หรือ Chrome เปิดได้ ก็จะพูดได้ยากว่าเป็น “PDF ที่ผิด” ดังนั้นนักพัฒนา MuPDF จึงเพิ่ม heuristic จำนวนมากเพื่อให้เอกสาร PDF ที่เสียยังแสดงผลได้
    • ต่อให้ทำตัว parser เองเสร็จแล้ว งานในการหาว่าจริง ๆ ควรแสดงอะไรตรงไหนก็น่าสนใจ โดยเฉพาะกับเอกสารที่ถูก generate มากกว่าเอกสารที่ทำด้วยมือ และถ้าจะหาตำแหน่งขององค์ประกอบต่าง ๆ ก็ต้องคูณเมทริกซ์ ส่วนถ้าจะรู้เนื้อหาข้อความ ก็ต้องเขียน parser อีกตัวสำหรับตาราง codepoint ที่ปรับแต่งเฉพาะอย่างมาก
    • ไม่ได้ล้อเล่นนะ เมื่อวานเพิ่งรู้ว่าใน PDF อาจมี ฟอร์มที่มี JavaScript อยู่ข้างใน ได้
      https://tcpdf.org/examples/example_014/
      ไม่รู้เลยว่าสิ่งนี้ทำงานได้อย่างไรกันแน่
    • จากประสบการณ์ที่เคยทำเอง สเปก PDF ในหลายแง่นั้นสมเหตุสมผลและออกแบบมาดีกว่า “API” จำนวนมากที่นักพัฒนา JavaScript สมัยใหม่ทำขึ้นมาเสียอีก
      สเปกดั้งเดิมหน้าตาไม่ค่อยสวยนัก เช่น ใช้คีย์ใน dictionary เป็นตัวอักษรตัวเดียวเพื่อประหยัดไบต์ในฟอร์แมต แต่ก็มีส่วนที่คิดมาดีจริง ๆ อยู่ Appearance Streams นั้นยอดเยี่ยมสำหรับความเข้ากันได้ทั้งย้อนหลังและไปข้างหน้า และอาจเป็นเหตุผลใหญ่ที่สุดที่ยังไม่มีอะไรมาแทน PDF ได้
    • การเขียน parser สำหรับไฟล์ PDF ที่ทำตามสเปกอาจไม่ได้ยากนัก แน่นอนว่าการเขียน renderer และ interface ที่สมบูรณ์นั้นยากแน่ ๆ
      แต่เพราะไฟล์ PDF จำนวนมากไม่ได้ทำตามสเปก จึงต้องยอมรับไฟล์ PDF ที่ผิด ๆ อย่างผ่อนปรนเหมือน parser ของ Adobe ด้วย
  • อัปเดตใหญ่ ของ SumatraPDF เพิ่งออกเมื่อวาน [1] รายการงานที่ค้างอยู่ [2] มีการแก้บั๊กและการปรับปรุงจำนวนมาก
    [1] https://github.com/sumatrapdfreader/sumatrapdf/releases/tag/...
    [2] https://github.com/sumatrapdfreader/sumatrapdf/issues/3672

    • ผมใช้ตัวเลือกขั้นสูงให้เหมือน dark mode แบบนี้ โดยตั้งค่าสีหน้ากระดาษโทนอุ่นและพื้นหลังสีเข้ม
      MainWindowBackground = #191919
      FixedPageUI [
      TextColor = #282828
      BackgroundColor = #ebdbb2
      SelectionColor = #2d938f
      ...
      จนถึงตอนนี้ผมใช้ AutoHotkey เขียนทับ SumatraPDF-settings.txt เพื่อสลับไปมาระหว่างโหมดต่าง ๆ อยากแชร์สคริปต์เล็ก ๆ นี้ แต่เมื่อไม่นานมานี้มันดันพังขึ้นมาเฉย ๆ
    • dark mode และการสลับแท็บด้วยคีย์บอร์ดเป็นฟีเจอร์เสริมที่ยอดเยี่ยมสำหรับ PDF reader น้ำหนักเบาที่ดีที่สุด
    • สงสัยว่าพวกปัญหาเกี่ยวกับการพิมพ์แก้ไปหรือยัง เพราะเรื่องนั้นทำให้ต้องไปใช้ PDF viewer ตัวอื่นอยู่ตลอด
  • อย่างที่หลายคนบอก Sumatra เป็นหนึ่งในยูทิลิตีเฉพาะ Windows ไม่กี่ตัวที่มักจะคิดถึงเสมอเมื่อใช้ Mac หรือ Linux โดยเฉพาะเวล ดูแผนผังวงจร แบบเครื่องกล/เทคนิค และ datasheet มีการใช้งานง่าย ๆ สองอย่างที่คิดถึงทุกวัน
    คือ Alt + เลื่อนเมาส์เพื่อซูมเข้า/ออก, และ คลิกขวา + ลากเพื่อเลื่อนมุมมอง อยากรู้ว่าบน Mac หรือ Linux มี viewer ตัวไหนที่รองรับสองฟังก์ชันนี้ไหม Skim บน Mac รองรับ Option + เลื่อนเมาส์ และคลิกซ้าย + ลากเพื่อเลื่อน แต่ตั้งค่าใหม่ให้เป็นคีย์หรือปุ่มเมาส์อื่นไม่ได้

    • บน Linux Zathura รองรับสิ่งนั้น ต่างกันตรงที่การซูมเข้า/ออกใช้ Ctrl ไม่ใช่ Alt ส่วนการคลิกขวาแล้วลากทำงานเป็นการเลื่อนมุมมอง
      ฟีเจอร์หนึ่งที่ชอบมากคือ Page Down จะพาไปที่ด้านบนสุดของหน้าถัดไป มันใช้งานได้จริงมากเวลาต้องการไล่ดูเร็ว ๆ ด้วยระดับซูมที่ไม่พอดีกับขนาดหน้า
    • ชอบ Okular มาก โดยเฉพาะธีมที่ทำให้อ่าน PDF ด้วยพื้นหลังสีแดงเข้มและตัวอักษรสีเหลืองได้ แต่บน Apple Silicon Mac Mini ผมรันไม่ได้ เหมือน brew formula สำหรับ Mac รุ่นล่าสุดจะพัง
    • Foxit ซูมเข้า/ออกด้วย Ctrl+เลื่อนเมาส์ และเลื่อนมุมมองด้วยคลิกซ้าย+ลาก ทำงานบน Mac และ Linux ก็น่าจะได้
      คิดว่าคล้ายกันพอสมควรแล้ว ถ้าอยากบังคับให้ได้จริง ๆ ก็น่าจะมีแอปแชร์แวร์ที่ทำ keyboard emulation เฉพาะแอปและ remap input แบบทันทีได้
      เท่าที่รู้ https://www.keyboardmaestro.com/main/ เป็นวิธีแก้มาตรฐาน
    • ใช้ qpdfview อยู่และพอใจมาก ปรับแต่งเอง ได้เยอะ
    • น่าจะ remap input นั้นด้วย Karabiner Elements และ BetterTouchTool เฉพาะตอนที่ Skim อยู่หน้าสุดได้ไหม
  • สิ่งที่สะดวกมากใน SumatraPDF คือเมื่อไฟล์ภาพทั่วไปถูกแก้ไข มันจะ โหลดใหม่อัตโนมัติ ดังนั้นจึงง่ายที่จะแสดงผลลัพธ์กราฟิกในหน้าต่างด้วยวิธีบันทึกเป็นไฟล์ภาพ

    • ไม่ใช่แค่ภาพ แต่ PDF ทั้งไฟล์ก็เช่นกัน ผมทำงานสร้าง PDF อยู่ พอรันคำสั่งอัปเดตแล้วทันทีที่เสร็จก็เห็นการเปลี่ยนแปลงทันที ยอดเยี่ยมมาก
    • การส่ง PDF ไปยังเครื่องพิมพ์ที่เลือกจาก command line ได้ก็สะดวกมาก อย่างน้อยบน Windows นี่เป็น killer feature เลย
  • ชอบ SumatraPDF มาก ใช้มาหลายปีแล้วและยอดเยี่ยม เวลาใช้ LaTeX ใน vim แล้วเปิดเอกสารไว้ข้าง ๆ ใน Sumatra พอคอมไพล์ก็อัปเดตทันที
    การโหลดหน้าใหม่ทันทีทำให้ workflow ลื่นไหลมาก

    • ใช่ และต้องให้เครดิต lervag ด้วย vimtex plugin ของเขานี่โหดมาก
      มีโอกาสสูงว่าคุณน่าจะใช้อยู่ มัน integrate กับ Sumatra เป็นค่าเริ่มต้น และยัง integrate กับ MuPDF, Skim ฯลฯ ด้วย จุดนี้แหละที่เจ๋ง
    • Evince ก็รองรับฟีเจอร์นี้ โดยส่วนตัวมองว่าเป็นฟีเจอร์ที่ขาดไม่ได้เลย
      ก่อนย้ายมา Linux เคยลองใช้ Sumatra อยู่พักหนึ่ง ก็ถือว่าค่อนข้างดีและเร็ว
    • Atril ก็โหลดใหม่อัตโนมัติเช่นกัน
  • ระหว่างเรียนปริญญาเอก ตอนเขียนต้นฉบับและ论文 ผมใช้ Sumatra PDF เป็นเครื่องมือหลักในการดูการเปลี่ยนแปลงของ PDF แบบเรียลไทม์ Acrobat รุ่นจ่ายเงินและ Foxit รุ่นฟรีมีฟีเจอร์มากกว่า แต่จะ ล็อก ไฟล์ที่กำลังเปลี่ยนแปลงอยู่

    • นี่เป็นตัวอย่างที่ดีว่าถ้าเวลา implement ข้อจำกัดที่ไม่จำเป็นแล้วไม่พิจารณาให้ดีว่าข้อจำกัดนั้นจะขัดขวางผู้ใช้อย่างไร ก็อาจทำร้ายผลิตภัณฑ์ได้ หวังว่าซอฟต์แวร์บน Android ที่ทำสิ่งคล้ายกัน เช่น SafetyNet หรือการกัน screenshot จะกลายเป็นสิ่งไร้ความหมายเหมือน Acrobat Reader