<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Abby Espinosa</title>
    <description>The latest articles on DEV Community by Abby Espinosa (@holygrail_6c57bc420).</description>
    <link>https://dev.to/holygrail_6c57bc420</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4116802%2Ff547b78b-ad8a-4628-9f58-7971ab62b7a4.jpg</url>
      <title>DEV Community: Abby Espinosa</title>
      <link>https://dev.to/holygrail_6c57bc420</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/holygrail_6c57bc420"/>
    <language>en</language>
    <item>
      <title>Most "extract images from PDF" tools are just screenshotting the page</title>
      <dc:creator>Abby Espinosa</dc:creator>
      <pubDate>Fri, 11 Sep 2026 05:01:31 +0000</pubDate>
      <link>https://dev.to/holygrail_6c57bc420/most-extract-images-from-pdf-tools-are-just-screenshotting-the-page-2057</link>
      <guid>https://dev.to/holygrail_6c57bc420/most-extract-images-from-pdf-tools-are-just-screenshotting-the-page-2057</guid>
      <description>&lt;p&gt;If you have ever pulled "images" out of a PDF and they looked soft, that was not extraction. That was a render.&lt;/p&gt;

&lt;p&gt;A PDF can hold a real JPEG or PNG as an XObject. The bytes are already in the file. You can lift them out at the original resolution. A lot of online tools do not do that. They draw each page to a canvas and export the canvas. You get a picture of the page, including the text around the photo, at whatever DPI they picked.&lt;/p&gt;

&lt;p&gt;Those are different jobs.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to tell which one you got
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Extracted: the file that comes out is a JPEG or PNG. Dimensions match the photo the author placed, not the page. A 4000px camera original stays 4000px.&lt;/li&gt;
&lt;li&gt;Rendered: you get one image per page. Text is flattened into pixels. Cropping the photo later is on you.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the download is &lt;code&gt;page-1.png&lt;/code&gt; and it includes the header and the footer, it was a screenshot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the distinction exists
&lt;/h2&gt;

&lt;p&gt;PDF.js (and anything sitting on a PDF parser) can walk the page's XObject map and hand you the raw stream. That is a copy. Rendering the page through a canvas is a photograph of the layout. Both are useful. Only one answers "get the pictures out of this deck."&lt;/p&gt;

&lt;p&gt;I built the extract path because that is the query people type. The tool is here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://imissfiles.com/extract-pdf-images/" rel="noopener noreferrer"&gt;https://imissfiles.com/extract-pdf-images/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It runs in the tab. No upload. Open Network and watch — same check I wrote about last time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What still fails
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A "photo" that is actually a bunch of vector shapes will not come out as an image. There is no image stream.&lt;/li&gt;
&lt;li&gt;Some PDFs wrap images in a form XObject. Those need an extra walk. Easy to miss on the first pass.&lt;/li&gt;
&lt;li&gt;A scanned page is one giant image. Extracting it just gives you the scan. That is correct, and also not what people meant.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you only needed the pictures, use an extractor. If you needed a picture of the page, use a renderer. Do not let a site blur those together and call it a feature.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>pdf</category>
      <category>webdev</category>
      <category>privacy</category>
    </item>
    <item>
      <title>How to tell if a website uploads your file (Network tab, two minutes)</title>
      <dc:creator>Abby Espinosa</dc:creator>
      <pubDate>Wed, 09 Sep 2026 05:26:14 +0000</pubDate>
      <link>https://dev.to/holygrail_6c57bc420/how-to-tell-if-a-website-uploads-your-file-network-tab-two-minutes-533b</link>
      <guid>https://dev.to/holygrail_6c57bc420/how-to-tell-if-a-website-uploads-your-file-network-tab-two-minutes-533b</guid>
      <description>&lt;p&gt;Most "free PDF" and "free converter" sites take the file. They say they delete it later. You do not have to take that on faith.&lt;/p&gt;

&lt;p&gt;This is the check I use. It works on any site, including mine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the converter in Chrome or Edge.&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;F12&lt;/code&gt; (Mac: &lt;code&gt;Cmd + Option + I&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Network&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Check &lt;strong&gt;Preserve log&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click the clear-circle icon so the list is empty.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Leave that panel open.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run it
&lt;/h2&gt;

&lt;p&gt;Drop a file you do not care about. A 2–3 MB photo is easy to spot. Watch the list while the tool works.&lt;/p&gt;

&lt;h2&gt;
  
  
  What an upload looks like
&lt;/h2&gt;

&lt;p&gt;Ignore most of the GETs. Those are the page fetching JS, WASM, fonts, ads.&lt;/p&gt;

&lt;p&gt;An upload is usually:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Method: &lt;code&gt;POST&lt;/code&gt; or &lt;code&gt;PUT&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Size: close to your file. A 3 MB photo makes a ~3 MB request.&lt;/li&gt;
&lt;li&gt;URL: something like &lt;code&gt;/upload&lt;/code&gt;, &lt;code&gt;/api/convert&lt;/code&gt;, or an S3 / GCS host.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click that row → &lt;strong&gt;Payload&lt;/strong&gt;. If you see the file, it left the machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  What local processing looks like
&lt;/h2&gt;

&lt;p&gt;After you add the file, you should not see a request near the file's size. You may see the page download a WASM engine &lt;em&gt;before&lt;/em&gt; you pick a file. That is code coming in, not the document going out.&lt;/p&gt;

&lt;p&gt;Size is the tell. Method is the second tell.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two traps
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Ads and analytics.&lt;/strong&gt; AdSense and GA fire requests. They are small. They are not a 3 MB PDF.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Turning Wi-Fi off.&lt;/strong&gt; Only useful after the page and its engines have finished loading. If you cut the network too early, a local tool looks broken because the WASM never arrived.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is better than a privacy policy
&lt;/h2&gt;

&lt;p&gt;A policy is a promise. The Network panel is a log. If the site has no upload endpoint, there is nothing to argue about.&lt;/p&gt;

&lt;p&gt;I keep the longer writeup, with screenshots, here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://imissfiles.com/guides/check-if-a-website-uploads-your-file/" rel="noopener noreferrer"&gt;https://imissfiles.com/guides/check-if-a-website-uploads-your-file/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also run a suite of in-tab PDF and image tools on the same domain. Affiliation: I built it. Same test applies there. Ads are on the page. They do not receive the file.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>privacy</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
