소스 검색

pdf: Add --dump-contents flag

This dumps the /Content stream of a page, which is possibly useful for
debugging.
Nico Weber 2 년 전
부모
커밋
52ff180ed4
1개의 변경된 파일18개의 추가작업 그리고 1개의 파일을 삭제
  1. 18 1
      Userland/Utilities/pdf.cpp

+ 18 - 1
Userland/Utilities/pdf.cpp

@@ -85,6 +85,9 @@ static PDF::PDFErrorOr<int> pdf_main(Main::Arguments arguments)
     StringView in_path;
     args_parser.add_positional_argument(in_path, "Path to input image file", "FILE");
 
+    bool dump_contents = false;
+    args_parser.add_option(dump_contents, "Dump page contents", "dump-contents", {});
+
     u32 page_number = 1;
     args_parser.add_option(page_number, "Page number (1-based)", "page", {}, "PAGE");
 
@@ -114,6 +117,20 @@ static PDF::PDFErrorOr<int> pdf_main(Main::Arguments arguments)
         warnln("--page {} out of bounds, must be between 1 and {}", page_number, document->get_page_count());
         return 1;
     }
+    int page_index = page_number - 1;
+
+    if (dump_contents) {
+        auto page = TRY(document->get_page(page_index));
+        auto contents = TRY(page.page_contents(*document));
+        for (u8 c : contents.bytes()) {
+            if (c < 128)
+                out("{:c}", c);
+            else
+                out("\\{:03o}", c);
+        }
+
+        return 0;
+    }
 
     if (!render_path.is_empty()) {
 #if !defined(AK_OS_SERENITY)
@@ -122,7 +139,7 @@ static PDF::PDFErrorOr<int> pdf_main(Main::Arguments arguments)
         Gfx::FontDatabase::set_default_fonts_lookup_path(DeprecatedString::formatted("{}/Base/res/fonts", source_root));
 #endif
 
-        TRY(save_rendered_page(document, page_number - 1, render_path));
+        TRY(save_rendered_page(document, page_index, render_path));
         return 0;
     }