3 điểm bởi GN⁺ 2023-10-25 | 1 bình luận | Chia sẻ qua WhatsApp
  • SumatraPDF là trình đọc tài liệu đa định dạng dành cho Windows, hỗ trợ các định dạng PDF, EPUB, MOBI, CBZ, CBR, FB2, CHM, XPS, DjVu
  • Giấy phép là (A)GPLv3, và một phần mã nguồn áp dụng giấy phép BSD
  • Thông tin bổ sung có tại Website, Manual, Developer Information

1 bình luận

 
GN⁺ 2023-10-25
Ý kiến trên Hacker News
  • Khi Adobe đẩy mạnh việc kiếm tiền từ Acrobat một cách quyết liệt hơn, một số tác vụ PDF đang được chuyển sang công cụ mã nguồn mở. SumatraPDF là một trong những công cụ được dùng; qpdf được dùng để gỡ mật khẩu, mở khóa và chuyển đổi, có thể cài trên WSL bằng apt-get install qpdf
    Có thể gỡ mật khẩu bằng qpdf --decrypt --password="" input.pdf output.pdf; PDF4QT là trình biên tập PDF mã nguồn mở để xóa, sắp xếp và trích xuất trang, nhưng hiện chưa có bản phát hành trên Chocolatey nên cần cài thủ công
    Inkscape và LibreOffice Draw hữu ích cho chỉnh sửa PDF và thêm văn bản; MuPDF hữu ích dưới dạng công cụ dòng lệnh và gói Python để phân tích cú pháp, điền biểu mẫu và thêm văn bản; SumatraPDF để xem; còn pdfplumber hữu ích khi dùng cùng Jupyter Lab để trích xuất bảng PDF vào pipeline dữ liệu

    • Firefox cũng có thể xem PDF, ký và thêm văn bản. Sau khi mở khóa, in ra PDF cũng có thể gỡ mật khẩu
    • PDFTKpdfjam cũng là các công cụ dòng lệnh hữu ích. PDFTK được dùng để gộp PDF, trích xuất/xóa/nhân bản trang, và giải nén nhằm lấy văn bản và dữ liệu ra khỏi các lệnh PDF thô để thao tác; pdfjam được dùng để in nhiều trang trên một tờ và điều chỉnh kích thước trang/lề
    • Có người nói qpdf không có trên Chocolatey, nhưng nó có trên Scoop, một trình quản lý gói Windows khác: https://github.com/ScoopInstaller/Main/blob/master/bucket/qp...
    • Về trích xuất bảng, tôi đã dùng http://tabula.technology/ suốt vài năm nay. Nó xử lý tốt cả các bảng khá phức tạp và không gặp vấn đề đáng kể
    • Thực ra SumatraPDF hiện dùng MuPDF. Tuy vậy vẫn có một số hạn chế trong việc render PDF và ebook, chẳng hạn như xử lý định dạng PDF hay hiển thị ký tự Unicode trong epub
  • Một bài hồi tưởng rất hay do tác giả SumatraPDF viết: https://blog.kowalczyk.info/article/2f72237a4230410a888acbfc...

    • Bốn câu trong bài hồi tưởng: “có thể viết mã phức tạp và tương đối ít lỗi mà không cần test”, “cũng có thể không cần code review”, “nếu không ai dùng ứng dụng thì crash cũng không sao”, “nếu nhiều người dùng, họ sẽ báo crash và lúc đó sửa” mâu thuẫn với nhau
      Ý nghĩa thực sự gần với việc có thể giao việc test cho người dùng hơn là không cần test hay code review
      Có lẽ tác giả cũng test mã. Vì chạy thử ứng dụng cũng là test. Chỉ là nhiều khả năng đó không phải cách nghiêm ngặt hay có hệ thống đến mức đem lại cảm giác an toàn như regression test
      Hầu như không ai nghiêm túc tuyên bố rằng không thể viết mã phức tạp nếu không có test tự động. Tôi rất ủng hộ test tự động, nhưng cuối thập niên 90/đầu thập niên 2000 tôi từng làm một renderer đa nền tảng khá lớn mà không có test tự động nào; quá trình đó mất nhiều thời gian và càng thay đổi càng thấy sợ hơn
    • Các thảo luận HN trước đây về bài hồi tưởng 15 năm SumatraPDF: https://news.ycombinator.com/item?id=27968900 - tháng 7/2021, 133 bình luận
      Thảo luận khi cùng bài được đăng lại năm 2023: https://news.ycombinator.com/item?id=35065785 - tháng 3/2023, 173 bình luận
    • Nhìn vào đoạn “Gtk xấu, Qt cực kỳ cồng kềnh, WxWidgets gần như không hoạt động”, có vẻ tác giả đã không xem xét các toolkit đa nền tảng kể từ sau thập niên 90
    • Đây là một bài viết thú vị, và phần nhắc đến việc thêm tính năng chỉnh sửa ở cuối đặc biệt gây ngạc nhiên. Nghe như một hố đen hút vào vô tận các yêu cầu tính năng và sự phình to phần mềm
  • Ước gì mọi nhà phát triển trình đọc PDF đều triển khai tính năng overview của sioyek[0]. Khi rê chuột lên một mục tham chiếu chéo, nội dung tham chiếu sẽ mở trong một cửa sổ xem trước nhỏ
    Đây là tính năng thay đổi hoàn toàn cuộc chơi khi đọc giáo trình và bài báo kỹ thuật; nhấn mạnh bao nhiêu về mức độ hữu ích của nó cũng không đủ
    [0] https://github.com/ahrm/sioyek#overview

    • Với tư cách người tạo SumatraPDF, tôi có biết sioyek và đang nghĩ đến việc lấy một vài ý tưởng từ đó. Có thể sẽ có trong phiên bản tiếp theo
    • Wikipedia cũng hoạt động tương tự, có lẽ bạn đã biết điều đó. Tôi tò mò không biết mình đang hiểu lầm điều gì
      Ngoài ra, nếu vì tính năng đó mà trình đọc PDF phải chạy mã từ xa tùy ý thì chẳng phải đó là rủi ro nghiêm trọng sao
    • Đây chẳng phải là transclusion của Ted Nelson sao? Tức là “cùng một nội dung tồn tại ở hơn một nơi theo cách có thể nhận biết được”
      https://en.m.wikipedia.org/wiki/Transclusion
    • Thật tuyệt. Tôi cũng muốn đưa một phần các ý tưởng này vào ứng dụng Kavita của mình
  • Vừa thử cài lần đầu, hiệu năng áp đảo không chỉ Adobe Reader mà cả Foxit. Đánh bại Adobe Reader thì không có gì ghê gớm, nhưng vượt Foxit thì khá ấn tượng
    Dung lượng cài đặt cũng chỉ khoảng 10% so với mấy chương trình đó. Không hiểu Adobe đang làm gì mà phần mềm của họ lại chậm đến mức không chịu nổi và khó dùng như vậy

    • Có lẽ Adobe đang xử lý việc hỗ trợ 100% đặc tả PDF, cùng những yêu cầu tính năng khó hiểu mà 6 công ty trong một ngành rất hẹp thật sự cần đến mức khẩn thiết
      Sumatra rất tuyệt và gần như là trình đọc PDF duy nhất tôi dùng trên Windows, nhưng nó chỉ có khoảng 10% tính năng của Adobe Acrobat. Có điều 10% đó lại là những tính năng gần như ai cũng cần
    • Điều ấn tượng hơn có lẽ là đây là dự án của một lập trình viên duy nhất. SumatraPDF là một trong những ví dụ tiêu biểu về một dự án phần mềm xuất sắc, và là mục tiêu đáng hướng tới
    • Adobe đang làm gì ư, có lẽ họ đang xử lý mọi danh sách mong muốn về tính năng từng được đưa ra đến nay. Các bình luận ở đây cũng toàn kiểu “Sumatra tốt, nhưng thiếu tính năng này tính năng kia”
    • Sau lần bị Foxit làm cho chán khi bắt đầu phân phối kèm spyware, tôi ngại thử cả những thứ khác
    • https://old.reddit.com/r/geek/comments/ddh5p/comment/c0zfics...
  • Xin chúc phúc cho ai nhìn vào đặc tả PDF rồi nghĩ “hay đấy, mình muốn viết một parser cho cái này”

    • Với tư cách người tạo ra SumatraPDF, nói cho công bằng thì tôi không tự viết phần render PDF. Việc đó thật sự không dễ
      Trước đây tôi dùng poppler rồi chuyển sang MuPDF. Khi đó MuPDF hoạt động tích cực hơn, và về sau poppler dường như cũng tăng tốc
      Bản thân tập tính năng PDF cốt lõi không quá tệ để triển khai. Theo những gì tôi thấy, các phần tệ và phức tạp là những thứ được thêm vào sau này như XML, JavaScript trong form, các tính năng đồ họa vector phức tạp như vector masking, hỗ trợ nhiều color space và tách màu CMYK, xử lý phông chữ và render văn bản
      Việc phải render nhanh cả các PDF được tạo sai cũng khó; PDF rất dễ bị làm hỏng khi tạo, và người ta làm hỏng nó theo mọi cách có thể tưởng tượng. Nếu Adobe hoặc Chrome mở được thì không thể chỉ gọi là “PDF sai”, nên các nhà phát triển MuPDF đã thêm rất nhiều heuristic để hiển thị được cả tài liệu PDF bị lỗi
    • Ngay cả sau khi viết xong parser, việc thực sự xác định phải hiển thị cái gì ở đâu cũng thú vị. Đặc biệt là với tài liệu được sinh tự động hơn là tài liệu làm thủ công; muốn tính vị trí phần tử thì phải nhân ma trận, còn muốn biết nội dung văn bản thì lại phải viết thêm parser cho các bảng codepoint cực kỳ tùy biến
    • Không đùa đâu. Hôm qua tôi mới biết PDF có thể có form chứa JavaScript
      https://tcpdf.org/examples/example_014/
      Tôi không hiểu rốt cuộc thứ này hoạt động kiểu gì
    • Với tư cách người đã tự làm thử, đặc tả PDF ở nhiều mặt còn tỉnh táo và được thiết kế tốt hơn rất nhiều “API” do các lập trình viên JavaScript hiện đại tạo ra
      Đặc tả gốc hơi xấu, như dùng khóa dictionary một chữ cái để tiết kiệm byte trong định dạng, nhưng cũng có những phần thật sự được suy nghĩ kỹ. Appearance Streams rất tuyệt cho tương thích tiến/lùi, và có lẽ là lý do lớn nhất khiến chưa có gì thay thế được PDF
    • Viết parser cho các tệp PDF tuân thủ đặc tả có thể không quá khó. Tất nhiên viết một renderer và giao diện hoàn chỉnh thì chắc chắn khó
      Nhưng vì nhiều tệp PDF không tuân thủ đặc tả, bạn phải chấp nhận các tệp PDF sai một cách khoan dung như parser của Adobe
  • Hôm qua SumatraPDF vừa có bản cập nhật lớn [1]. Danh sách công việc tồn đọng [2] có rất nhiều bản sửa lỗi và cải tiến
    [1] https://github.com/sumatrapdfreader/sumatrapdf/releases/tag/...
    [2] https://github.com/sumatrapdfreader/sumatrapdf/issues/3672

    • Tôi đang dùng các tùy chọn nâng cao như một kiểu chế độ tối như thế này. Kiểu đặt màu trang ấm và nền tối
      MainWindowBackground = #191919
      FixedPageUI [
      TextColor = #282828
      BackgroundColor = #ebdbb2
      SelectionColor = #2d938f
      ...
      Từ trước đến nay tôi dùng AutoHotkey để ghi đè SumatraPDF-settings.txt và chuyển giữa các chế độ khác nhau. Tôi muốn chia sẻ một script nhỏ, nhưng gần đây tự nhiên nó bị hỏng
    • Chế độ tối và chuyển tab bằng bàn phím là những bổ sung tuyệt vời cho trình đọc PDF nhẹ tốt nhất
    • Không biết các vấn đề liên quan đến in ấn đã được sửa chưa. Vì chuyện đó mà tôi luôn phải dùng trình xem PDF khác
  • Như nhiều người đã nói, Sumatra là một trong số ít tiện ích chỉ có trên Windows mà tôi luôn thấy nhớ mỗi khi dùng Mac hoặc Linux. Đặc biệt khi xem sơ đồ mạch, bản vẽ cơ khí/kỹ thuật và datasheet, có hai thao tác đơn giản mà ngày nào tôi cũng nhớ:
    Alt + cuộn để phóng to/thu nhỏ, nhấp chuột phải + kéo để di chuyển. Tôi tự hỏi liệu trên Mac hay Linux có trình xem nào cung cấp hai tính năng này không. Skim trên Mac hỗ trợ Option + cuộn và nhấp chuột trái + kéo để di chuyển, nhưng không thể thiết lập lại sang phím hoặc nút chuột khác

    • Trên Linux, Zathura hỗ trợ điều đó. Khác biệt là phóng to/thu nhỏ dùng Ctrl chứ không phải Alt. Kéo bằng chuột phải hoạt động như thao tác di chuyển
      Một tính năng tôi thật sự thích là Page Down sẽ chuyển đến đầu trang tiếp theo. Nó rất thực dụng khi muốn lướt nhanh ở mức phóng to không vừa khít với kích thước trang
    • Tôi rất thích Okular. Đặc biệt là theme cho phép đọc PDF với nền đỏ sẫm và chữ vàng. Nhưng tôi không chạy được nó trên Apple Silicon Mac Mini. Có vẻ brew formula mới nhất cho Mac đã bị hỏng
    • Foxit phóng to/thu nhỏ bằng Ctrl+cuộn, và di chuyển bằng nhấp chuột trái+kéo. Nó chạy trên Mac và có lẽ Linux cũng được
      Tôi nghĩ như vậy cũng đủ tương tự. Nếu thật sự muốn ép cho bằng được, chắc sẽ có ứng dụng shareware nào đó làm mô phỏng bàn phím theo từng ứng dụng và remap input ngay tức thì
      Tôi biết https://www.keyboardmaestro.com/main/ là giải pháp tiêu chuẩn
    • Tôi đang dùng qpdfview và rất hài lòng. Nó có thể tùy chỉnh rất nhiều
    • Có lẽ có thể remap các input đó bằng Karabiner Elements và BetterTouchTool chỉ khi Skim đang ở foreground
  • Một điểm rất tiện ở SumatraPDF là khi một tệp ảnh thông thường được chỉnh sửa, nó sẽ tự động tải lại. Vì vậy, rất dễ hiển thị đầu ra đồ họa trong cửa sổ bằng cách lưu vào tệp ảnh

    • Không chỉ ảnh, toàn bộ PDF cũng vậy. Trong công việc tôi tạo PDF, và thật tuyệt khi chạy lệnh cập nhật xong là thấy ngay các thay đổi
    • Việc có thể gửi PDF tới máy in đã chọn từ dòng lệnh cũng rất tiện. Ít nhất trên Windows, đó là một killer feature
  • Tôi rất thích SumatraPDF. Đã dùng nhiều năm rồi và nó rất tuyệt. Khi dùng LaTeX trong vim, tôi mở tài liệu song song trong Sumatra; mỗi lần biên dịch là nó cập nhật ngay lập tức
    Nhờ tải lại trang tức thì, workflow rất mượt

    • Đúng vậy. Cũng phải dành lời khen cho lervag. plugin vimtex của anh ấy đúng là quái vật
      Khả năng cao là bạn đang dùng nó. Nó tích hợp sẵn với Sumatra, và cũng tích hợp với MuPDF, Skim, v.v. Điểm đó rất hay
    • Evince cũng hỗ trợ tính năng này. Cá nhân tôi xem đây là tính năng hoàn toàn thiết yếu
      Trước khi chuyển sang Linux, tôi từng dùng Sumatra một thời gian ngắn; nó khá tốt và nhanh nhạy
    • Atril cũng tự động tải lại
  • Trong thời gian làm tiến sĩ, khi viết bản thảo và bài báo, tôi đã dùng Sumatra PDF làm công cụ chính để xem thay đổi PDF theo thời gian thực. Bản trả phí của Acrobat và bản miễn phí của Foxit có nhiều tính năng hơn, nhưng lại khóa tệp đang thay đổi

    • Đây là ví dụ hay cho thấy khi triển khai một hạn chế không cần thiết mà không cân nhắc đầy đủ nó sẽ cản trở người dùng ra sao, bạn có thể làm hại sản phẩm. Tôi mong các phần mềm làm điều tương tự trên Android, chẳng hạn SafetyNet hay chống chụp màn hình, cũng trở nên vô nghĩa như Acrobat Reader