User Manual

This page is an operation guide for ClarityPDF based on the current Android implementation. It is adapted from the in-app documentation for the public site.

Related document: Privacy policy

1. Common

2. Edit PDF (add text/images, edit existing text)

  1. Open a PDF with "Choose PDF", or make an empty A4 with "Start from blank". When creating a new document, you can choose the page size and background color.
  2. The preview stays fixed as a canvas; use the toolbox at the bottom to move between pages and pick each action.
  3. Add text: pick "Text" from the toolbox, type into the floating window (line breaks allowed), set size / color / font / bold / italic / underline / rotation / URL, then "Add". It is placed on the preview; drag to move it.
  4. Add an image: choose one under "Image" and it is placed on the preview. Drag to move it; you can also scale and rotate it.
  5. Edit existing text: tap text on the preview, or select it from the "Layers" list. Enter "Replacement text", or choose "Delete the original text". You can also change size / color / styling.
    • If the font and character set match, it is replaced in place.
    • For characters that can't be shown, moves, or size/color/style/font changes, the whole run is redrawn, keeping the original size and color (using the chosen font).
  6. Add shapes: use the "Shape" tool to place a rectangle or oval — configure stroke color, fill color, and line width, then drag on the canvas to position it.
  7. Draw: use the "Draw" tool with the brush or eraser to draw freehand on the canvas. Tap "Apply" to commit to the PDF.
  8. Background color: use the "BG" tool to set a background color for the current page (existing content is preserved).
  9. Layers: added/edited items and recognized objects on the page are listed under "Layers". Tap a row to select it, or × to remove it.
  10. Tapping "Apply" in each menu, or in the Layers list, bakes the current edits into a temporary PDF and refreshes the preview with the real appearance.
  11. "Apply and save" outputs the final PDF. "Undo" reverts the most recent committed operation.

* Adding/editing text needs an embedded font. Choose from Noto Sans JP / Noto Serif JP / M PLUS Rounded 1c / Zen Kaku Gothic New / Klee One (all SIL OFL), per text run. Each font downloads once, then works offline; get missing ones from the editor or Settings.

3. Convert & compose PDF

4. OCR / AI-OCR

5. Settings

6. About offline use

7. Expert Mode — Local OCR API

Enable "Expert Mode" at the bottom of Settings → OCR Settings & Models to turn this device into an OCR API server. Other devices on the same LAN can then send OCR requests to it over HTTP.

⚠️ There is no authentication. Use only on trusted local networks.

Endpoints

PurposeURL
OCR requestPOST http://<device-IP>:8765/ocr
From same devicePOST http://127.0.0.1:8765/ocr
Health checkGET http://<device-IP>:8765/health

Request (multipart/form-data)

FieldRequiredDescription
fileYesImage (PNG/JPEG/WebP/BMP) or PDF — sent as raw binary
engineNotesseract (default) | paddleocr | llm
langNoLanguage code(s), comma-separated (default: eng). e.g. jpn / jpn,eng / chi_sim / kor

Response (HTTP 200)

{
  "pages": [
    { "page": 1, "text": "Recognized text here", "confidence": 0.95, "source": "OCR" }
  ],
  "engine": "Tesseract",
  "languages": ["eng"],
  "pageCount": 1
}

Errors

HTTPBody
400{"error":"Missing 'file' field"} — no file field
400{"error":"Could not decode image"} — invalid image data
500{"error":"..."} — OCR processing error

curl examples

# OCR a JPEG with English Tesseract
curl -X POST http://192.168.1.10:8765/ocr \
     -F "file=@document.jpg" -F "engine=tesseract" -F "lang=eng"

# OCR a PDF with Japanese+English (multi-page)
curl -X POST http://192.168.1.10:8765/ocr \
     -F "file=@scan.pdf;type=application/pdf" -F "lang=jpn,eng"

# Health check
curl http://192.168.1.10:8765/health

Python example

import requests

with open("document.pdf", "rb") as f:
    resp = requests.post(
        "http://192.168.1.10:8765/ocr",
        files={"file": ("document.pdf", f, "application/pdf")},
        data={"engine": "tesseract", "lang": "eng"},
    )
result = resp.json()
for page in result["pages"]:
    print(f"Page {page['page']}: {page['text'][:80]}...")

Notes