<?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: Hisa Araki</title>
    <description>The latest articles on DEV Community by Hisa Araki (@maskedridersystem).</description>
    <link>https://dev.to/maskedridersystem</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3870770%2F75af346f-4c2f-4ed0-a24c-a6609ae7a0d3.png</url>
      <title>DEV Community: Hisa Araki</title>
      <link>https://dev.to/maskedridersystem</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maskedridersystem"/>
    <language>en</language>
    <item>
      <title>ACR is designed as a printer-independent report rendering service, not just a library.</title>
      <dc:creator>Hisa Araki</dc:creator>
      <pubDate>Sun, 12 Apr 2026 14:32:27 +0000</pubDate>
      <link>https://dev.to/maskedridersystem/acr-is-designed-as-a-printer-independent-report-rendering-service-not-just-a-library-11d3</link>
      <guid>https://dev.to/maskedridersystem/acr-is-designed-as-a-printer-independent-report-rendering-service-not-just-a-library-11d3</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I have added an HTTP interface to the report engine ACR (Across Report Renderer).&lt;/p&gt;

&lt;p&gt;By making ACR available over HTTP, it can be used as a rendering service independent from the application.&lt;/p&gt;

&lt;p&gt;Previously, report systems had to be implemented separately depending on the development environment (Desktop, Web), OS, and runtime environment.&lt;br&gt;
With ACR, you can now generate PDF / PNG / HTML simply by sending a template and data.&lt;/p&gt;
&lt;h2&gt;
  
  
  What you can do
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;• Generate reports via HTTP
• Language-independent (HTTP-based)
• Can be called from Node.js / C# / Python / Java
• Output formats: PDF / PNG / HTML (PNG embedded in HTML)
• Test directly from a browser (Web UI included)
• Runs on Windows / Linux / macOS
• Can run as a service (daemon) on all supported OS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;⸻&lt;/p&gt;
&lt;h2&gt;
  
  
  Start
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./acr_http
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  You can also specify port and template directory:
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./acr_http &lt;span class="nt"&gt;--port&lt;/span&gt; 9000 &lt;span class="nt"&gt;--templates&lt;/span&gt; /opt/acr/templates
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Web UI
&lt;/h2&gt;

&lt;p&gt;Open the following in your browser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8765/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkzj3fshdztga60zp9ijo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkzj3fshdztga60zp9ijo.png" alt=" " width="800" height="825"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  curl（PDF）
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:8765/render/pdf &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "template": "invoice",
    "data": {
      "items": [
        { "name": "Apple", "price": 100 },
        { "name": "Orange", "price": 200 }
      ]
    }
  }'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; out.pdf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  curl（PNG）
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:8765/render/png &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{ "template": "invoice", "data": { "items": [] } }'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; out.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  curl (HTML)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:8765/render/html &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{ "template": "invoice", "data": { "items": [] } }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Running as a service
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Windows
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;acr_http.exe &lt;span class="nt"&gt;--install&lt;/span&gt;
sc start AcrHttpServer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Linux (systemd)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;acr_http
systemctl start  acr_http
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  macOS
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;launchctl load ~/Library/LaunchAgents/com.acrossreport.acr_http.plist
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;• Rust-based engine
• Rendering with Skia
• Runs as an HTTP server
• Template and data are separated
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Summary&lt;/p&gt;

&lt;p&gt;The HTTP version is already released for evaluation.&lt;br&gt;
    • Command-line renderer: acr-cli&lt;br&gt;
    • Report designer: acr-designer&lt;br&gt;
    • RPX converter for ActiveReports: rpx2json&lt;br&gt;
⸻&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadmap
&lt;/h2&gt;

&lt;p&gt;The following features are planned:&lt;br&gt;
• WebAssembly (WASM) support for browser execution&lt;br&gt;
• Receipt printer support (ESC/POS)&lt;br&gt;
• Support for printer command languages (ZPL / SBPL / TPCL)&lt;/p&gt;

&lt;p&gt;This will extend ACR beyond server-side usage to embedded devices, edge environments, and browsers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Download
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/acrossreport" rel="noopener noreferrer"&gt;https://github.com/acrossreport&lt;/a&gt;&lt;/p&gt;

</description>
      <category>rust</category>
      <category>csharp</category>
      <category>avalonia</category>
      <category>printer</category>
    </item>
    <item>
      <title>I built a pixel-perfect, printer-independent report designer with Avalonia UI</title>
      <dc:creator>Hisa Araki</dc:creator>
      <pubDate>Sun, 12 Apr 2026 06:09:25 +0000</pubDate>
      <link>https://dev.to/maskedridersystem/i-built-a-pixel-perfect-printer-independent-report-designer-with-avalonia-ui-4dke</link>
      <guid>https://dev.to/maskedridersystem/i-built-a-pixel-perfect-printer-independent-report-designer-with-avalonia-ui-4dke</guid>
      <description>&lt;p&gt;I’ve released ACR Designer, a WYSIWYG report designer for the ACR (Across Report Renderer) engine.&lt;/p&gt;

&lt;p&gt;It focuses on pixel-perfect layout and printer-independent rendering.&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WYSIWYG report designer&lt;/li&gt;
&lt;li&gt;Pixel-perfect layout (dot-level accuracy)&lt;/li&gt;
&lt;li&gt;Printer-independent rendering&lt;/li&gt;
&lt;li&gt;Built with C# and Avalonia UI&lt;/li&gt;
&lt;li&gt;Runs natively on Windows and macOS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub:&lt;br&gt;
&lt;a href="https://github.com/acrossreport/acr-designer" rel="noopener noreferrer"&gt;https://github.com/acrossreport/acr-designer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is my first time building a full cross-platform desktop application with Avalonia, and I was impressed by how smoothly it works across platforms.&lt;/p&gt;

&lt;p&gt;Feedback is welcome.&lt;/p&gt;




&lt;h2&gt;
  
  
  Personal Note
&lt;/h2&gt;

&lt;p&gt;I’ve also released the macOS version of ACR Designer.&lt;/p&gt;

&lt;p&gt;At 66, this project has been an incredibly valuable learning experience for me.&lt;/p&gt;

&lt;p&gt;I truly appreciate all the support, and I’ll keep improving it whenever I can.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>rust</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I built a pixel-perfect, printer-independent report designer with Avalonia UI</title>
      <dc:creator>Hisa Araki</dc:creator>
      <pubDate>Sun, 12 Apr 2026 04:17:00 +0000</pubDate>
      <link>https://dev.to/maskedridersystem/i-built-a-pixel-perfect-printer-independent-report-designer-with-avalonia-ui-5ddl</link>
      <guid>https://dev.to/maskedridersystem/i-built-a-pixel-perfect-printer-independent-report-designer-with-avalonia-ui-5ddl</guid>
      <description>&lt;p&gt;I’ve released ACR Designer, a WYSIWYG report designer for the ACR (Across Report Renderer) engine.&lt;/p&gt;

&lt;p&gt;It focuses on pixel-perfect layout and printer-independent rendering.&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WYSIWYG report designer&lt;/li&gt;
&lt;li&gt;Pixel-perfect layout (dot-level accuracy)&lt;/li&gt;
&lt;li&gt;Printer-independent rendering&lt;/li&gt;
&lt;li&gt;Built with C# and Avalonia UI&lt;/li&gt;
&lt;li&gt;Runs natively on Windows and macOS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub:&lt;br&gt;
&lt;a href="https://github.com/acrossreport/acr-designer" rel="noopener noreferrer"&gt;https://github.com/acrossreport/acr-designer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is my first time building a full cross-platform desktop application with Avalonia, and I was impressed by how smoothly it works across platforms.&lt;/p&gt;

&lt;p&gt;Feedback is welcome.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>showdev</category>
      <category>ui</category>
    </item>
    <item>
      <title>Why I built a pixel-perfect report engine with Rust and Skia</title>
      <dc:creator>Hisa Araki</dc:creator>
      <pubDate>Fri, 10 Apr 2026 02:23:19 +0000</pubDate>
      <link>https://dev.to/maskedridersystem/why-i-built-a-pixel-perfect-report-engine-with-rust-and-skia-4g76</link>
      <guid>https://dev.to/maskedridersystem/why-i-built-a-pixel-perfect-report-engine-with-rust-and-skia-4g76</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;For many years, I have been working on business systems where report generation is a critical component.&lt;/p&gt;

&lt;p&gt;However, I repeatedly encountered the same problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Layout differences depending on printer drivers&lt;/li&gt;
&lt;li&gt;OS-specific rendering inconsistencies&lt;/li&gt;
&lt;li&gt;Difficulty achieving true WYSIWYG output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These issues are not new, but they are still not fully solved.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;In traditional report systems, rendering often depends on external components such as printer drivers or OS-level graphics APIs.&lt;/p&gt;

&lt;p&gt;This leads to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slight layout shifts&lt;/li&gt;
&lt;li&gt;Inconsistent text measurement&lt;/li&gt;
&lt;li&gt;Different output between environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For business reports, even small differences can be unacceptable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Approach
&lt;/h2&gt;

&lt;p&gt;To solve this, I designed a report engine with the following principles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fully deterministic layout&lt;/li&gt;
&lt;li&gt;Pixel-perfect rendering&lt;/li&gt;
&lt;li&gt;No dependency on printer drivers&lt;/li&gt;
&lt;li&gt;Cross-platform consistency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The engine directly controls rendering using Skia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Rust
&lt;/h2&gt;

&lt;p&gt;I chose Rust for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Memory safety&lt;/li&gt;
&lt;li&gt;Predictable performance&lt;/li&gt;
&lt;li&gt;Strong control over low-level behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is important for a rendering engine where consistency is critical.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Highlights
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Layout engine with pre-calculated positioning&lt;/li&gt;
&lt;li&gt;Pagination control&lt;/li&gt;
&lt;li&gt;Consistent font measurement&lt;/li&gt;
&lt;li&gt;Rendering abstraction over Skia&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Result
&lt;/h2&gt;

&lt;p&gt;The engine produces identical output (PDF / PNG) across environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repository
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/acrossreport" rel="noopener noreferrer"&gt;https://github.com/acrossreport&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;If you are interested in rendering engines, Skia, or cross-platform layout systems, I would appreciate your feedback.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>skia</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
