{
  "id": 1956460,
  "title": "My AI said the PDF was empty. The PDF was not empty.",
  "url": "https://urgent.news/2026/08/19/my-ai-said-the-pdf-was-empty-the-pdf-was-not-empty",
  "topic": "ai",
  "section": "AI",
  "published": "2026-08-19T14:51:30.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/andrewavery7/my-ai-said-the-pdf-was-empty-the-pdf-was-not-empty-1b1l"
  },
  "original_language": "en",
  "account": "Claude Code was asked to extract key dates from a PDF that contained four and a half megabytes of text, but it reported that the document was empty. The PDF was a full-page browser screenshot exported to PDF, containing raster images and no text layer. When the PDF was opened manually and converted to Markdown, there were zero characters in the output file. The issue lies in how integrations interpret exit codes, treating them as evidence of success when they may only indicate that the process completed. The real problem is in distinguishing between an extraction failure and a legitimately short document. Measuring success by byte count is ineffective, as it conflates document length with extraction quality. Instead, using characters per page as a metric can help identify genuine extraction failures from legitimate short documents. A threshold of 100 characters per page provides a comfortable margin for distinguishing between different types of documents, with false positives costing more tokens but still delivering correct answers, while false negatives result in presenting empty conversions as real, leading to incorrect information.",
  "summary": "I asked Claude Code to pull the key dates out of a PDF I had saved from a webpage. It came back immediately: The document appears to be empty — it contains no extractable text. Which was strange, because I had the PDF open on my other monitor and it was four and a half megabytes of perfectly legible text. The interesting part is not that it was wrong. The interesting part is that nothing had…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}