<?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: QiuLiang</title>
    <description>The latest articles on DEV Community by QiuLiang (@swimmingbird).</description>
    <link>https://dev.to/swimmingbird</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%2F4074902%2F898fdabe-2a36-4876-a098-2c3848ca1a63.jpeg</url>
      <title>DEV Community: QiuLiang</title>
      <link>https://dev.to/swimmingbird</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/swimmingbird"/>
    <language>en</language>
    <item>
      <title>艺术二维码发布前的工程验收：透明背景、导出文件与静态链接</title>
      <dc:creator>QiuLiang</dc:creator>
      <pubDate>Mon, 14 Sep 2026 07:11:27 +0000</pubDate>
      <link>https://dev.to/swimmingbird/yi-zhu-er-wei-ma-fa-bu-qian-de-gong-cheng-yan-shou-tou-ming-bei-jing-dao-chu-wen-jian-yu-jing-tai-lian-jie-2mc1</link>
      <guid>https://dev.to/swimmingbird/yi-zhu-er-wei-ma-fa-bu-qian-de-gong-cheng-yan-shou-tou-ming-bei-jing-dao-chu-wen-jian-yu-jing-tai-lian-jie-2mc1</guid>
      <description>&lt;p&gt;本文与 Halo 产品有关联，由人工智能结合当前实现辅助研究与撰写，不是第三方独立测评，也不承诺未经实测的扫码成功率。&lt;/p&gt;

&lt;h2&gt;
  
  
  预览成功不等于最终文件成功
&lt;/h2&gt;

&lt;p&gt;二维码生成器的链路是输入内容、创建模块矩阵、输出矢量图、栅格化为图片、进入排版软件，最后发布或印刷。每一步都可能改变真实识别条件。&lt;/p&gt;

&lt;p&gt;Halo 的图片与打印文档复用矢量渲染结果，但图片可以包含透明背景，打印文档使用不透明背景。单独打开文件能扫描，不代表叠放到照片上还能扫描：透明区域露出照片，局部对比度随之变化。&lt;/p&gt;

&lt;h2&gt;
  
  
  用对照版本定位失败阶段
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;用同一最终网址生成深色方形模块、浅色背景、无标志的基础版本。&lt;/li&gt;
&lt;li&gt;分别测试预览、下载文件和最终排版文件，记录哪一步开始失败。&lt;/li&gt;
&lt;li&gt;基础版本正常时，逐项增加渐变、艺术图案和标志，每次只改变一项。&lt;/li&gt;
&lt;li&gt;透明版本在真实物料底色上复测；必要时加覆盖码与留白的浅色底板。&lt;/li&gt;
&lt;li&gt;按实际比例打印样品，用两种手机测试，不用放大的屏幕预览替代实物。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;二维码开发方说明普通二维码需要四个模块宽的边缘留白，不应被裁切线、文字或海报纹理侵入。&lt;a href="https://www.qrcode.com/en/howto/code.html" rel="noopener noreferrer"&gt;原始说明&lt;/a&gt;提供尺寸计算示例，但不是所有艺术样式的扫码保证。&lt;/p&gt;

&lt;h2&gt;
  
  
  识别失败与网页失败要分开
&lt;/h2&gt;

&lt;p&gt;手机没有识别出内容时，检查图像、留白、尺寸和对比度。手机识别出正确网址但网页打不开时，检查目标网址和网络链路。混淆两类问题，容易不断调整颜色，却没有修复失效链接。&lt;/p&gt;

&lt;p&gt;建议把编码目标、最终文件名、物料版本、测试设备和打开结果记录为验收记录。这是建议流程，没有虚构某一批设备的测试结果。&lt;/p&gt;

&lt;h2&gt;
  
  
  静态链接与追踪短链的工程边界
&lt;/h2&gt;

&lt;p&gt;静态二维码直接保存最终内容。网页内容更新但网址不变时，可以维护原页面；网址本身改变时，原码不会自动改变。追踪短链依赖中间服务持续可用，不能凭接口今天返回成功就宣称长期可靠。&lt;/p&gt;

&lt;p&gt;Halo 当前可选追踪使用内存与本地文件，不承诺长期持久性。重要名片和活动可关闭追踪，直接编码自己控制的最终网址。浏览器设计历史也是本地保存，不是跨设备云端作品库。&lt;/p&gt;

&lt;h2&gt;
  
  
  继续阅读与实践
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://halo.wezzik.app/blog/transparent-qr-code-print-checklist?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=halo_guides_202609&amp;amp;utm_content=print_checklist" rel="noopener noreferrer"&gt;透明二维码排版与打印检查清单&lt;/a&gt;说明如何在真实海报中应用这些步骤。&lt;/p&gt;

&lt;p&gt;也可以打开 &lt;a href="https://halo.wezzik.app/create?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=halo_guides_202609&amp;amp;utm_content=generator" rel="noopener noreferrer"&gt;Halo 二维码生成器&lt;/a&gt;制作自己的对照版本。是否适合你的物料，仍以最终文件与实物测试为准。&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>A Practical Client-Side Workflow for Splitting PDF Pages</title>
      <dc:creator>QiuLiang</dc:creator>
      <pubDate>Tue, 08 Sep 2026 07:08:37 +0000</pubDate>
      <link>https://dev.to/swimmingbird/a-practical-client-side-workflow-for-splitting-pdf-pages-4298</link>
      <guid>https://dev.to/swimmingbird/a-practical-client-side-workflow-for-splitting-pdf-pages-4298</guid>
      <description>&lt;p&gt;PDF utilities are a good fit for client-side processing. A user selects a local file, the browser reads the required pages, and the result is generated without a document-processing round trip to an application server.&lt;/p&gt;

&lt;p&gt;That approach has three practical benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;private documents do not need to be uploaded;&lt;/li&gt;
&lt;li&gt;processing begins immediately after file selection;&lt;/li&gt;
&lt;li&gt;hosting remains simple because the public interface can be served as static assets.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The user experience that matters
&lt;/h2&gt;

&lt;p&gt;Implementation details are important, but users mostly care about a predictable flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select a PDF.&lt;/li&gt;
&lt;li&gt;See its page count.&lt;/li&gt;
&lt;li&gt;Enter a clear range such as &lt;code&gt;1-3, 7, 10-12&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Receive useful validation when the range is invalid.&lt;/li&gt;
&lt;li&gt;Preview what will be exported.&lt;/li&gt;
&lt;li&gt;Download a correctly named result.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Large files should not make the interface appear frozen. Progress feedback, disabled controls during processing, and actionable errors make a major difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy language should be specific
&lt;/h2&gt;

&lt;p&gt;Avoid vague promises such as “100% secure.” Explain what actually happens: whether processing occurs locally, whether the file is transmitted, and what telemetry is collected. Users can then make an informed decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test cases worth keeping
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;a one-page document;&lt;/li&gt;
&lt;li&gt;encrypted or malformed PDFs;&lt;/li&gt;
&lt;li&gt;ranges beyond the final page;&lt;/li&gt;
&lt;li&gt;duplicate and unordered page selections;&lt;/li&gt;
&lt;li&gt;filenames containing non-Latin characters;&lt;/li&gt;
&lt;li&gt;a large scanned document on a mobile device.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I use this checklist for the browser-based &lt;a href="https://wezzik.com/tools/split.html?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=client_side_pdf" rel="noopener noreferrer"&gt;PDF page splitter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The accompanying &lt;a href="https://wezzik.com/blog/split-pdf-guide.html?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=client_side_pdf" rel="noopener noreferrer"&gt;step-by-step PDF splitting guide&lt;/a&gt; covers common desktop and browser workflows.&lt;/p&gt;

</description>
      <category>pdf</category>
      <category>privacy</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I rebuilt my PDF workflow so a file never has to leave my laptop</title>
      <dc:creator>QiuLiang</dc:creator>
      <pubDate>Wed, 12 Aug 2026 13:47:26 +0000</pubDate>
      <link>https://dev.to/swimmingbird/i-rebuilt-my-pdf-workflow-so-a-file-never-has-to-leave-my-laptop-5h42</link>
      <guid>https://dev.to/swimmingbird/i-rebuilt-my-pdf-workflow-so-a-file-never-has-to-leave-my-laptop-5h42</guid>
      <description>&lt;p&gt;For years my "PDF workflow" meant: open a free website, upload the file,&lt;br&gt;
pray it&lt;br&gt;
2&lt;br&gt;
wasn't a bank statement, download the result. I never liked it. So I built&lt;br&gt;
the thing&lt;br&gt;
I wanted.&lt;br&gt;
3&lt;br&gt;
4&lt;br&gt;
5&lt;br&gt;
wezzik.com is 16 PDF tools that all run in the browser. Merge, split,&lt;br&gt;
6&lt;br&gt;
7&lt;br&gt;
rotate,&lt;br&gt;
compress to an exact size, convert to Word/Excel/Image, OCR, even an AI&lt;br&gt;
summary.&lt;br&gt;
The part that matters: nothing is uploaded. Open DevTools while you&lt;br&gt;
process a 50MB&lt;br&gt;
file and the Network tab stays empty.&lt;br&gt;
8&lt;br&gt;
9&lt;br&gt;
10&lt;br&gt;
11&lt;br&gt;
It's static HTML and JS, pdf-lib and pdf.js doing the heavy lifting,&lt;br&gt;
Tesseract for&lt;br&gt;
to, which&lt;br&gt;
OCR, hosted on Vercel. No backend means there's nothing to send your file&lt;br&gt;
is the only privacy guarantee that actually holds.&lt;br&gt;
12&lt;br&gt;
13&lt;br&gt;
14&lt;br&gt;
15&lt;br&gt;
If you process PDFs with any regularity, give it a try. And if there's a&lt;br&gt;
tool missing&lt;br&gt;
that fits the local-only model, tell me, I'll build .&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>privacy</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>A PDF toolkit that runs 100% in the browser, no upload, no signup</title>
      <dc:creator>QiuLiang</dc:creator>
      <pubDate>Wed, 12 Aug 2026 13:40:49 +0000</pubDate>
      <link>https://dev.to/swimmingbird/a-pdf-toolkit-that-runs-100-in-the-browser-no-upload-no-signup-4c82</link>
      <guid>https://dev.to/swimmingbird/a-pdf-toolkit-that-runs-100-in-the-browser-no-upload-no-signup-4c82</guid>
      <description></description>
    </item>
  </channel>
</rss>
