doc2mark icon
developer-tools

doc2mark

Open-source PDF-to-markdown that preserves native text and headings, but still struggles with tables, charts, images, and scans.

Visit doc2mark
Open sourceNative textTables degradedScans unsupported
TL;DR — our verdictUpdated July 2026 · 17 test artifacts

Good text baseline, weak structure handling

Where it wins
  • 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.
Main limitation
  • You need faithful complex table reconstruction.
Pricing (verified plans)
Open source $0
Strongest test artifacts

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.

Walkthrough of doc2mark on the table-heavy financial-report input.

In-Depth Review

Our detailed analysis of doc2mark — features, performance, and real-world testing.

AD
AI Demos Team
Expert Reviewer
Verified Review

Feature-by-Feature Breakdown

PDF-to-Markdown Conversion
Weak
Test Summary
Feature tested: PDF-to-Markdown Conversion
Result: Failed — Weak

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-doc2mark-input1-hybridearnings-item-1-he-38ddac99277d.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-doc2mark-input1-hybridearnings-item-1-he-38ddac99277d.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 → Text/code file

Input type: Image

Input used: Input artifact (Image): Input — doc2mark_input2_financialpdf_disclaimer_text.png

Observed output: Output artifact (Text/code file): The disclaimer paragraph was fully preserved, including the Japanese GAAP note, translation note, forward-looking caveat, and rounding convention. — doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md

Input artifact: Input artifact (Image): Input — doc2mark_input2_financialpdf_disclaimer_text.png

Output artifact: Output artifact (Text/code file): The disclaimer paragraph was fully preserved, including the Japanese GAAP note, translation note, forward-looking caveat, and rounding convention. — doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md

What changed: Image transformed into Text/code file

Test case: Image → Text/code file

Input type: Image

Input used: Input artifact (Image): Input — doc2mark_input1_hybridearnings_item_1_section.png

Observed output: Output artifact (Text/code file): The Item 1 / Business heading was recognized as a Markdown-style header before the section text continued. — doc2mark-doc2mark-input1-hybridearnings-output-74fb906e225f.md

Input artifact: Input artifact (Image): Input — doc2mark_input1_hybridearnings_item_1_section.png

Output artifact: Output artifact (Text/code file): The Item 1 / Business heading was recognized as a Markdown-style header before the section text continued. — doc2mark-doc2mark-input1-hybridearnings-output-74fb906e225f.md

What changed: Image transformed into Text/code file

Test case: Image → Text/code file

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 (Text/code file): The section title is present, but the heading formatting is inconsistent rather than cleanly normalized. — doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md

Input artifact: Input artifact (Image): Japanese report section headed Changes to Accounting Policies. — doc2mark_input2_financialpdf_changes_header.png

Output artifact: Output artifact (Text/code file): The section title is present, but the heading formatting is inconsistent rather than cleanly normalized. — doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md

What changed: Image transformed into Text/code file

Test case: Image → Text/code file

Input type: Image

Input used: Input artifact (Image): Input — doc2mark_input2_financialpdf_toc.png

Observed output: Output artifact (Text/code file): The table of contents kept its section ordering and hierarchy, showing that simple linear pages can stay in sequence. — doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md

Input artifact: Input artifact (Image): Input — doc2mark_input2_financialpdf_toc.png

Output artifact: Output artifact (Text/code file): The table of contents kept its section ordering and hierarchy, showing that simple linear pages can stay in sequence. — doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md

What changed: Image transformed into Text/code file

Test case: Image → Text/code file

Input type: Image

Input used: Input artifact (Image): Input — doc2mark_input1_hybridearnings_financial_table.png

Observed output: Output artifact (Text/code file): The annual-report financial summary was flattened into plain text with row-to-column mapping damaged. — doc2mark-doc2mark-input1-hybridearnings-output-74fb906e225f.md

Input artifact: Input artifact (Image): Input — doc2mark_input1_hybridearnings_financial_table.png

Output artifact: Output artifact (Text/code file): The annual-report financial summary was flattened into plain text with row-to-column mapping damaged. — doc2mark-doc2mark-input1-hybridearnings-output-74fb906e225f.md

What changed: Image transformed into Text/code file

Test case: Image → Text/code file

Input type: Image

Input used: Input artifact (Image): Input — doc2mark_input2_financialpdf_business_results_table.png

Observed output: Output artifact (Text/code file): The quarterly business-results table merged the numeric columns into the first cell, breaking the row-to-column mapping. — doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md

Input artifact: Input artifact (Image): Input — doc2mark_input2_financialpdf_business_results_table.png

Output artifact: Output artifact (Text/code file): The quarterly business-results table merged the numeric columns into the first cell, breaking the row-to-column mapping. — doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md

What changed: Image transformed into Text/code file

Test case: Image → Text/code file

Input type: Image

Input used: Input artifact (Image): Input — doc2mark_input2_financialpdf_corporate_info_table_bonus_criterion.png

Observed output: Output artifact (Text/code file): A simple corporate-info table was emitted as Markdown, showing that the output syntax changes from table to table. — doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md

Input artifact: Input artifact (Image): Input — doc2mark_input2_financialpdf_corporate_info_table_bonus_criterion.png

Output artifact: Output artifact (Text/code file): A simple corporate-info table was emitted as Markdown, showing that the output syntax changes from table to table. — doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md

What changed: Image transformed into Text/code file

Test case: Image → Text/code file

Input type: Image

Input used: Input artifact (Image): Input — doc2mark_input2_financialpdf_quarterly_table_bonus_criterion.png

Observed output: Output artifact (Text/code file): Another table from the same document was emitted as HTML, confirming inconsistent table syntax across pages. — doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md

Input artifact: Input artifact (Image): Input — doc2mark_input2_financialpdf_quarterly_table_bonus_criterion.png

Output artifact: Output artifact (Text/code file): Another table from the same document was emitted as HTML, confirming inconsistent table syntax across pages. — doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md

What changed: Image transformed into Text/code file

Test case: Image → Text/code file

Input type: Image

Input used: Input artifact (Image): Input — doc2mark_input1_hybridearnings_financial_charts.png

Observed output: Output artifact (Text/code file): The four chart panels were fragmented into labels, scattered values, and a broken HTML table, making the trend data unusable. — doc2mark-doc2mark-input1-hybridearnings-output-74fb906e225f.md

Input artifact: Input artifact (Image): Input — doc2mark_input1_hybridearnings_financial_charts.png

Output artifact: Output artifact (Text/code file): The four chart panels were fragmented into labels, scattered values, and a broken HTML table, making the trend data unusable. — doc2mark-doc2mark-input1-hybridearnings-output-74fb906e225f.md

What changed: Image transformed into Text/code file

Test case: Image → Text/code file

Input type: Image

Input used: Input artifact (Image): Input — doc2mark_input1_hybridearnings_logo.png

Observed output: Output artifact (Text/code file): The Target logo was dropped; only the report title text remained. — doc2mark-doc2mark-input1-hybridearnings-output-74fb906e225f.md

Input artifact: Input artifact (Image): Input — doc2mark_input1_hybridearnings_logo.png

Output artifact: Output artifact (Text/code file): The Target logo was dropped; only the report title text remained. — doc2mark-doc2mark-input1-hybridearnings-output-74fb906e225f.md

What changed: Image transformed into Text/code file

Test case: Image → Text/code file

Input type: Image

Input used: Input artifact (Image): Input — doc2mark_input1_hybridearnings_ceo_sign.png

Observed output: Output artifact (Text/code file): The handwritten signature image was omitted, leaving only the printed Brian Cornell signature line. — doc2mark-doc2mark-input1-hybridearnings-output-74fb906e225f.md

Input artifact: Input artifact (Image): Input — doc2mark_input1_hybridearnings_ceo_sign.png

Output artifact: Output artifact (Text/code file): The handwritten signature image was omitted, leaving only the printed Brian Cornell signature line. — doc2mark-doc2mark-input1-hybridearnings-output-74fb906e225f.md

What changed: Image transformed into Text/code file

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.

image
Input artifact for "PDF-to-Markdown Conversion" test: Input, doc2mark-doc2mark-input1-hybridearnings-item-1-he-38ddac99277d.png
image
Output artifact for "PDF-to-Markdown Conversion" test: The full business paragraph survived, including the Target Corporation description and credit-card segment history., doc2mark_input1_hybridearnings_general_section_parsed_failed.png
The full business paragraph survived, including the Target Corporation description and credit-card segment history.
image
Input artifact for "PDF-to-Markdown Conversion" test: Input, doc2mark_input2_financialpdf_disclaimer_text.png
text
doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md
Loading file...
The disclaimer paragraph was fully preserved, including the Japanese GAAP note, translation note, forward-looking caveat, and rounding convention.
image
Input artifact for "PDF-to-Markdown Conversion" test: Input, doc2mark_input1_hybridearnings_item_1_section.png
text
doc2mark-doc2mark-input1-hybridearnings-output-74fb906e225f.md
Loading file...
The Item 1 / Business heading was recognized as a Markdown-style header before the section text continued.
image
Input artifact for "PDF-to-Markdown Conversion" test: Japanese report section headed Changes to Accounting Policies., doc2mark_input2_financialpdf_changes_header.png
Japanese report section headed Changes to Accounting Policies.
text
doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md
Loading file...
The section title is present, but the heading formatting is inconsistent rather than cleanly normalized.
image
Input artifact for "PDF-to-Markdown Conversion" test: Input, doc2mark_input2_financialpdf_toc.png
text
doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md
Loading file...
The table of contents kept its section ordering and hierarchy, showing that simple linear pages can stay in sequence.
image
Input artifact for "PDF-to-Markdown Conversion" test: Input, doc2mark_input1_hybridearnings_financial_table.png
text
doc2mark-doc2mark-input1-hybridearnings-output-74fb906e225f.md
Loading file...
The annual-report financial summary was flattened into plain text with row-to-column mapping damaged.
image
Input artifact for "PDF-to-Markdown Conversion" test: Input, doc2mark_input2_financialpdf_business_results_table.png
text
doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md
Loading file...
The quarterly business-results table merged the numeric columns into the first cell, breaking the row-to-column mapping.
image
Input artifact for "PDF-to-Markdown Conversion" test: Input, doc2mark_input2_financialpdf_corporate_info_table_bonus_criterion.png
text
doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md
Loading file...
A simple corporate-info table was emitted as Markdown, showing that the output syntax changes from table to table.
image
Input artifact for "PDF-to-Markdown Conversion" test: Input, doc2mark_input2_financialpdf_quarterly_table_bonus_criterion.png
text
doc2mark-doc2mark-input2-financialpdf-output-64777dd9b209.md
Loading file...
Another table from the same document was emitted as HTML, confirming inconsistent table syntax across pages.
image
Input artifact for "PDF-to-Markdown Conversion" test: Input, doc2mark_input1_hybridearnings_financial_charts.png
text
doc2mark-doc2mark-input1-hybridearnings-output-74fb906e225f.md
Loading file...
The four chart panels were fragmented into labels, scattered values, and a broken HTML table, making the trend data unusable.
image
Input artifact for "PDF-to-Markdown Conversion" test: Input, doc2mark_input1_hybridearnings_logo.png
text
doc2mark-doc2mark-input1-hybridearnings-output-74fb906e225f.md
Loading file...
The Target logo was dropped; only the report title text remained.
image
Input artifact for "PDF-to-Markdown Conversion" test: Input, doc2mark_input1_hybridearnings_ceo_sign.png
text
doc2mark-doc2mark-input1-hybridearnings-output-74fb906e225f.md
Loading file...
The handwritten signature image was omitted, leaving only the printed Brian Cornell signature line.
image
Input artifact for "PDF-to-Markdown Conversion" test: Input, doc2mark_input1_hybridearnings_growth_section.png
image
Output artifact for "PDF-to-Markdown Conversion" test: 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
The multi-column growth page was flattened into interleaved paragraphs and bullets, so the intended column reading order was broken.
image
Input artifact for "PDF-to-Markdown Conversion" test: Input, doc2mark_input1_hybridearnings_footnotes.png
image
Output artifact for "PDF-to-Markdown Conversion" test: 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
The table footnotes were extracted as a separate block of condensed text rather than staying attached to the table.
file
input3_scannedpaper.pdf
Scanned research paper used as the OCR test case.
file
doc2mark_input3_scannedpaper_output.md
Loading 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.
pdf
input1_hybridearnings.pdf
markdown
doc2mark_input1_hybridearnings_output.md
Loading file...
The 84-page hybrid earnings report completed in 29 seconds without truncation or a crash, although formatting errors persisted throughout the file.
pdf
input2_financialpdf.pdf
markdown
doc2mark_input2_financialpdf_output.md
Loading file...
The 18-page financial report completed in 15 seconds with complete text extraction, but table formatting stayed inconsistent.
Bottom Line
The footnotes survive as text, but they are no longer tightly linked to the table they explain.
From our researchPDF to markdown using open source libraries

How it scored on the research's own criteria

The 9 evaluation dimensions from our hands-on research on doc2mark, each judged from recorded runs on 3 test inputs — the same verdicts the ranking page ranks on.

held up  partial  failed  not exercised by this input

CriterionVerdictWhat the runs showedPer inputProof
Bonus: Unique or Anomalous BehaviorsWeak2/5It has a distinctive habit of switching table formats within the same report, which makes downstream handling awkward.open proof ↗
Caption/Figure AssociationWeak1/5Footnotes drift away from their table, so notes are no longer clearly tied to the numbers they explain.open proof ↗
Chart ReconstructionWeak1/5The one chart-heavy page turns into fragments instead of usable chart values, so the tool does not reconstruct charts in practice.open proof ↗
Document HierarchyStrong4/5It usually keeps major headings usable, but it sometimes falls back to styling instead of clean heading levels.open proof ↗
Image RetentionWeak1/5It drops embedded visuals like the cover logo and signature block completely, leaving no stand-in for them.open proof ↗
Long/Complex Document RobustnessMixed3/5It finishes long reports without crashing or chopping off the end, but the output quality stays uneven throughout rather than holding steady.open proof ↗
Reading Order PreservationMixed3/5It can keep simple sequences like a table of contents in order, but multi-column prose gets jumbled, so the result is only partly reliable.open proof ↗
Table ReconstructionWeak1/5It repeatedly breaks tables into plain text or merged cells, so row and column relationships are not dependable.open proof ↗
Text PreservationMixed3/5It keeps native text very well, but one scanned report comes back empty, so text handling is strong only when OCR is not needed.open proof ↗

Verdicts come verbatim from the study's recorded observations, never re-derived at render; a criterion with no recorded run shows Not exercised — this section cannot invent a score.

Pricing

Free and open source

Open source
$0
MIT-licensed

The report describes doc2mark as MIT-licensed and free.

✓ Use This If
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 want long reports processed without truncation or crashes.
✕ Skip This If
You need faithful complex table reconstruction.
You need charts, logos, figures, or signatures to survive conversion.
You need built-in OCR for scanned PDFs.
You need stable markdown-only table output.
You need reliable reading order in multi-column pages.
developer-toolsdocumentation-toolstextOther
Yes for native-digital text. The Target business section and the Japanese disclaimer were extracted, and major section breaks were often recognizable, but minor headers could still be formatted inconsistently.
Not reliable for dense tables. The annual-report tables and quarterly business results lost row and column structure; some simpler tables came out as markdown or HTML, but the syntax changed across pages.
No. The four-panel financial highlights chart was split into labels, numbers, and a broken table, so the trend data was not recoverable.
No. The cover logo and the CEO signature were dropped or reduced to text, with no image placeholders.
Not in this open-source-only benchmark. The scanned paper produced a 0-byte markdown file, and the report says OCR needs an external OpenAI API integration.
Only partially. Single-column text and the table of contents stayed readable, but the two-column 'A Growth Story Again' page was interleaved and jumbled.
The report describes it as open source (MIT) and lists it as free / $0.

Banner Preview

How the embed badge will look on your site

doc2mark featured on AI Demos

Embed HTML

Copy this code to your website source

<a target="_blank" href="https://aidemos.com/tools/doc2mark?utm_source=doc2mark_embed" style="width: 250px; height: 80px; border-radius:4px;" width="250" height="80"> <img src="https://aidemos-website-images.s3.amazonaws.com/featured.png" alt="doc2mark | Featured on AI Demos" style="width: 250px; height: 80px; border-radius:4px;" width="250" height="80"> </a>

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

Similar Tools

Discover more AI tools like doc2mark to enhance your workflow.

Comments (0)

Please Log in to join the discussion.

Built by FutureSmart AI — the team behind AI Demos

Need a custom AI solution for this use case?

If you are looking to build a custom PDF-to-markdown conversion, document parsing, or text extraction system for your business or internal workflow, email us at contact@futuresmart.ai.

Get a custom build

Found something inaccurate or missing? We try to keep our AI research accurate and useful. If you found outdated information, an issue, or have a suggestion, email us at collaborate@aidemos.com.

Back to Top