
doc2mark
Open-source PDF-to-markdown that preserves native text and headings, but still struggles with tables, charts, images, and scans.
Good text baseline, weak structure handling
- You need an open-source, self-hostable baseline for native-digital PDFs.
- Your documents are prose-heavy and section headings matter more than table fidelity.
- You can manually clean up tables, charts, and dropped images after conversion.
- You need faithful complex table reconstruction.
Our take
doc2mark is a solid open-source baseline for native-digital PDFs: it reliably extracts prose and major headings from long reports, including the 84-page hybrid filing and the 18-page financial report. But the tested outputs still break dense tables, fragment charts, drop images and signatures, jumble multi-column reading order, and fail outright on scans unless you add an external OCR/API path.
In-Depth Review
Our detailed analysis of doc2mark — features, performance, and real-world testing.
Feature-by-Feature Breakdown
PDF-to-Markdown ConversionWeak▾
Feature tested: PDF-to-Markdown Conversion
Result: Failed
Verdict: Weak
Expected behavior: Converts digitally born and scanned PDF documents into extractable markdown/text, as exercised on the Target annual report, Japanese quarterly report, hybrid earnings report, multi-column spread, the A Growth Story Again page, and a scanned research paper. The proof points cover native text, reading order, tables, charts, embedded images, footnotes, and long-document completion.
Test case: Image → Image
Input type: Image
Input used: Input artifact (Image): Input — doc2mark_input1_hybridearnings_general_section.png
Observed output: Output artifact (Image): The full business paragraph survived, including the Target Corporation description and credit-card segment history. — doc2mark_input1_hybridearnings_general_section_parsed_failed.png
Input artifact: Input artifact (Image): Input — doc2mark_input1_hybridearnings_general_section.png
Output artifact: Output artifact (Image): The full business paragraph survived, including the Target Corporation description and credit-card segment history. — doc2mark_input1_hybridearnings_general_section_parsed_failed.png
What changed: Image transformed into Image
Test case: Image → Image
Input type: Image
Input used: Input artifact (Image): Input — doc2mark_input2_financialpdf_disclaimer_text.png
Observed output: Output artifact (Image): The disclaimer paragraph was fully preserved, including the Japanese GAAP note, translation note, forward-looking caveat, and rounding convention. — doc2mark_input2_financialpdf_disclaimer_text_parsed_success.png
Input artifact: Input artifact (Image): Input — doc2mark_input2_financialpdf_disclaimer_text.png
Output artifact: Output artifact (Image): The disclaimer paragraph was fully preserved, including the Japanese GAAP note, translation note, forward-looking caveat, and rounding convention. — doc2mark_input2_financialpdf_disclaimer_text_parsed_success.png
What changed: Image transformed into Image
Test case: Image → Image
Input type: Image
Input used: Input artifact (Image): Input — doc2mark_input1_hybridearnings_item_1_section.png
Observed output: Output artifact (Image): The Item 1 / Business heading was recognized as a Markdown-style header before the section text continued. — doc2mark_input1_hybridearnings_item_1_header_parsed_success.png
Input artifact: Input artifact (Image): Input — doc2mark_input1_hybridearnings_item_1_section.png
Output artifact: Output artifact (Image): The Item 1 / Business heading was recognized as a Markdown-style header before the section text continued. — doc2mark_input1_hybridearnings_item_1_header_parsed_success.png
What changed: Image transformed into Image
Test case: Image → Image
Input type: Image
Input used: Input artifact (Image): Japanese report section headed Changes to Accounting Policies. — doc2mark_input2_financialpdf_changes_header.png
Observed output: Output artifact (Image): The section title is present, but the heading formatting is inconsistent rather than cleanly normalized. — doc2mark_input2_financialpdf_changes_header_parsed_failed.png
Input artifact: Input artifact (Image): Japanese report section headed Changes to Accounting Policies. — doc2mark_input2_financialpdf_changes_header.png
Output artifact: Output artifact (Image): The section title is present, but the heading formatting is inconsistent rather than cleanly normalized. — doc2mark_input2_financialpdf_changes_header_parsed_failed.png
What changed: Image transformed into Image
Test case: Image → Image
Input type: Image
Input used: Input artifact (Image): Input — doc2mark_input2_financialpdf_toc.png
Observed output: Output artifact (Image): The table of contents kept its section ordering and hierarchy, showing that simple linear pages can stay in sequence. — doc2mark_input2_financialpdf_toc_parsed_failed.png
Input artifact: Input artifact (Image): Input — doc2mark_input2_financialpdf_toc.png
Output artifact: Output artifact (Image): The table of contents kept its section ordering and hierarchy, showing that simple linear pages can stay in sequence. — doc2mark_input2_financialpdf_toc_parsed_failed.png
What changed: Image transformed into Image
Test case: Image → Image
Input type: Image
Input used: Input artifact (Image): Input — doc2mark_input1_hybridearnings_financial_table.png
Observed output: Output artifact (Image): The annual-report financial summary was flattened into plain text with row-to-column mapping damaged. — doc2mark_input1_hybridearnings_financial_table_parsed_failed.png
Input artifact: Input artifact (Image): Input — doc2mark_input1_hybridearnings_financial_table.png
Output artifact: Output artifact (Image): The annual-report financial summary was flattened into plain text with row-to-column mapping damaged. — doc2mark_input1_hybridearnings_financial_table_parsed_failed.png
What changed: Image transformed into Image
Test case: Image → Image
Input type: Image
Input used: Input artifact (Image): Input — doc2mark_input2_financialpdf_business_results_table.png
Observed output: Output artifact (Image): The quarterly business-results table merged the numeric columns into the first cell, breaking the row-to-column mapping. — doc2mark_input2_financialpdf_business_results_table_parsed_failed.png
Input artifact: Input artifact (Image): Input — doc2mark_input2_financialpdf_business_results_table.png
Output artifact: Output artifact (Image): The quarterly business-results table merged the numeric columns into the first cell, breaking the row-to-column mapping. — doc2mark_input2_financialpdf_business_results_table_parsed_failed.png
What changed: Image transformed into Image
Test case: Image → Image
Input type: Image
Input used: Input artifact (Image): Input — doc2mark_input2_financialpdf_corporate_info_table_bonus_criterion.png
Observed output: Output artifact (Image): A simple corporate-info table was emitted as Markdown, showing that the output syntax changes from table to table. — doc2mark_input2_corporate_info_table_parsed_md_format.png
Input artifact: Input artifact (Image): Input — doc2mark_input2_financialpdf_corporate_info_table_bonus_criterion.png
Output artifact: Output artifact (Image): A simple corporate-info table was emitted as Markdown, showing that the output syntax changes from table to table. — doc2mark_input2_corporate_info_table_parsed_md_format.png
What changed: Image transformed into Image
Test case: Image → Image
Input type: Image
Input used: Input artifact (Image): Input — doc2mark_input2_financialpdf_quarterly_table_bonus_criterion.png
Observed output: Output artifact (Image): Another table from the same document was emitted as HTML, confirming inconsistent table syntax across pages. — doc2mark_input2_financialpdf_quarterly_table_bonus_parsed_html_format.png
Input artifact: Input artifact (Image): Input — doc2mark_input2_financialpdf_quarterly_table_bonus_criterion.png
Output artifact: Output artifact (Image): Another table from the same document was emitted as HTML, confirming inconsistent table syntax across pages. — doc2mark_input2_financialpdf_quarterly_table_bonus_parsed_html_format.png
What changed: Image transformed into Image
Test case: Image → Image
Input type: Image
Input used: Input artifact (Image): Input — doc2mark_input1_hybridearnings_financial_charts.png
Observed output: Output artifact (Image): The four chart panels were fragmented into labels, scattered values, and a broken HTML table, making the trend data unusable. — doc2mark_input1_hybridearnings_financial_charts_parsed_failed.png
Input artifact: Input artifact (Image): Input — doc2mark_input1_hybridearnings_financial_charts.png
Output artifact: Output artifact (Image): The four chart panels were fragmented into labels, scattered values, and a broken HTML table, making the trend data unusable. — doc2mark_input1_hybridearnings_financial_charts_parsed_failed.png
What changed: Image transformed into Image
Test case: Image → Image
Input type: Image
Input used: Input artifact (Image): Input — doc2mark_input1_hybridearnings_logo.png
Observed output: Output artifact (Image): The Target logo was dropped; only the report title text remained. — doc2mark_input1_hybridearnings_logo_parsed_failed.png
Input artifact: Input artifact (Image): Input — doc2mark_input1_hybridearnings_logo.png
Output artifact: Output artifact (Image): The Target logo was dropped; only the report title text remained. — doc2mark_input1_hybridearnings_logo_parsed_failed.png
What changed: Image transformed into Image
Test case: Image → Image
Input type: Image
Input used: Input artifact (Image): Input — doc2mark_input1_hybridearnings_ceo_sign.png
Observed output: Output artifact (Image): The handwritten signature image was omitted, leaving only the printed Brian Cornell signature line. — doc2mark_input1_hybridearnings_ceo_sign_parsed_failed.png
Input artifact: Input artifact (Image): Input — doc2mark_input1_hybridearnings_ceo_sign.png
Output artifact: Output artifact (Image): The handwritten signature image was omitted, leaving only the printed Brian Cornell signature line. — doc2mark_input1_hybridearnings_ceo_sign_parsed_failed.png
What changed: Image transformed into Image
Test case: Image → Image
Input type: Image
Input used: Input artifact (Image): Input — doc2mark_input1_hybridearnings_growth_section.png
Observed output: Output artifact (Image): The multi-column growth page was flattened into interleaved paragraphs and bullets, so the intended column reading order was broken. — doc2mark_input1_hybridearnings_growth_section_parsed_failed.png
Input artifact: Input artifact (Image): Input — doc2mark_input1_hybridearnings_growth_section.png
Output artifact: Output artifact (Image): The multi-column growth page was flattened into interleaved paragraphs and bullets, so the intended column reading order was broken. — doc2mark_input1_hybridearnings_growth_section_parsed_failed.png
What changed: Image transformed into Image
Test case: Image → Image
Input type: Image
Input used: Input artifact (Image): Input — doc2mark_input1_hybridearnings_footnotes.png
Observed output: Output artifact (Image): The table footnotes were extracted as a separate block of condensed text rather than staying attached to the table. — doc2mark_input1_hybridearnings_footnotes_parsed_failed.png
Input artifact: Input artifact (Image): Input — doc2mark_input1_hybridearnings_footnotes.png
Output artifact: Output artifact (Image): The table footnotes were extracted as a separate block of condensed text rather than staying attached to the table. — doc2mark_input1_hybridearnings_footnotes_parsed_failed.png
What changed: Image transformed into Image
Test case: PDF document → Text/code file
Input type: PDF document
Input used: Input artifact (PDF document): Scanned research paper used as the OCR test case. — input3_scannedpaper.pdf
Observed output: Output artifact (Text/code file): No markdown output was produced; the result file is 0 bytes, so the scanned document path is not usable in this open-source-only setup. — doc2mark_input3_scannedpaper_output.md
Input artifact: Input artifact (PDF document): Scanned research paper used as the OCR test case. — input3_scannedpaper.pdf
Output artifact: Output artifact (Text/code file): No markdown output was produced; the result file is 0 bytes, so the scanned document path is not usable in this open-source-only setup. — doc2mark_input3_scannedpaper_output.md
What changed: PDF document transformed into Text/code file
Test case: PDF document → Text/code file
Input type: PDF document
Input used: Input artifact (PDF document): Input — input1_hybridearnings.pdf
Observed output: Output artifact (Text/code file): The 84-page hybrid earnings report completed in 29 seconds without truncation or a crash, although formatting errors persisted throughout the file. — doc2mark_input1_hybridearnings_output.md
Input artifact: Input artifact (PDF document): Input — input1_hybridearnings.pdf
Output artifact: Output artifact (Text/code file): The 84-page hybrid earnings report completed in 29 seconds without truncation or a crash, although formatting errors persisted throughout the file. — doc2mark_input1_hybridearnings_output.md
What changed: PDF document transformed into Text/code file
Test case: PDF document → Text/code file
Input type: PDF document
Input used: Input artifact (PDF document): Input — input2_financialpdf.pdf
Observed output: Output artifact (Text/code file): The 18-page financial report completed in 15 seconds with complete text extraction, but table formatting stayed inconsistent. — doc2mark_input2_financialpdf_output.md
Input artifact: Input artifact (PDF document): Input — input2_financialpdf.pdf
Output artifact: Output artifact (Text/code file): The 18-page financial report completed in 15 seconds with complete text extraction, but table formatting stayed inconsistent. — doc2mark_input2_financialpdf_output.md
What changed: PDF document transformed into Text/code file
Why it matters / Conclusion: The footnotes survive as text, but they are no longer tightly linked to the table they explain.
Converts digitally born and scanned PDF documents into extractable markdown/text, as exercised on the Target annual report, Japanese quarterly report, hybrid earnings report, multi-column spread, the A Growth Story Again page, and a scanned research paper. The proof points cover native text, reading order, tables, charts, embedded images, footnotes, and long-document completion.




























Pricing
Free and open source
The report describes doc2mark as MIT-licensed and free.
Banner Preview
How the embed badge will look on your site

Embed HTML
Copy this code to your website source
Quick Integration Guide
- 1Copy the HTML code block above.
- 2Paste it into your site's HTML or CMS editor.
- 3Banner appears instantly on your page.
- 4Links back to your tool profile here.
Similar Tools
Discover more AI tools like doc2mark to enhance your workflow.