Skip to content

v1.18.0

Choose a tag to compare

@DedovMosol DedovMosol released this 29 Jul 19:45
· 59 commits to main since this release

iwo Helper Desktop v1.18.0

Added

  • PDF → PowerPoint. A sixth tool: the pages of a born-digital PDF become slides whose
    text is real, editable text — not a picture of text. PowerPoint is not needed: the
    .pptx is assembled by the app itself, so the tool works exactly where Office is not
    installed, and its result can be checked automatically instead of by eye.
    Each slide is two layers. The text is placed as ordinary text boxes where it was, with
    font, size, weight, colour, underline, super/subscript and hyperlinks; tables become real
    slide tables with their merged cells; identical images are stored once and photos are
    repacked, so a deck of fifty slides does not turn into tens of megabytes. Everything that
    is not text — background, frames, charts, vector logos — arrives as the page rendered
    without its text layer, because on a normal slide that is most of the picture, and a
    text-only conversion would leave a handful of labels on white. Without Ghostscript the
    deck degrades to text only, silently and by design.
    A paragraph becomes one text box, and the lines inside it keep their own positions rather
    than being re-flowed: a slide has no way to re-flow text faithfully — another engine breaks
    lines by its own metrics — while underlines, frames and rules arrive with the background
    and stay where they were, so a re-flowed paragraph would drift out from under them. Where
    the file carries document structure, the boundaries of those paragraphs are read from it
    instead of being guessed from the gaps between lines.
    Slide size follows the pages (a 16:9 deck stays 16:9, an A4 document becomes A4 slides);
    a presentation has one slide size, so mixed input takes the most common one and scales the
    rest to fit and centres them. The window is the one already known from PDF → Word — the
    same grid, ordering, preview, rotation and cancellation — because both are the same job
    with a different destination, and that window now exists once instead of twice.
  • Settings. A window for what belongs to the whole program rather than to an open
    document. The start screen's bottom row leads to it, and so does every tool's ☰ menu.
    The zoom level and the compression level deliberately stay in the tools: they are
    changed while working, and moving them here would mean walking there and back for
    every file. Language stays on the globe and in the menu for the same reason — a third
    door is a third place to remember, and switching the language rebuilds the windows.
  • A check for a newer version at startup. It runs in the background, so nothing waits
    for the network, and it is silent about everything except news: no connection, no
    answer, or “you have the latest” all pass without a word, because nobody asked the
    question. When there is a newer version the notice carries a “Don't remind me about
    this version”
    box — it records the version, not a plain “never”, so the next release
    is still announced. The check can be switched off in Settings.
  • A history of operations. What was made, when, and where it went — paths and names
    only, never a copy of a file
    . The last 200 entries are kept, older ones can be dropped
    by age, the list can be cleared with one button, and the whole thing can be switched off
    — switching it off clears what has been collected. Opening a result checks it is still
    there first, because the path may have gone stale.

Changed

  • The start screen's bottom row is two icons. “Settings” and “About” were two wide
    captions occupying a third of the row for actions taken once in a while; they are now a
    gear and a circled question mark, with the wording kept in the tooltip and in the name a
    screen reader announces. Inside Settings the three history actions moved into one row and
    the heading is centred, so the window is a screenful shorter; the paragraph explaining the
    update check is justified to both margins, because a ragged right edge is far more visible
    in a narrow window than in a page-wide text.
  • A large system font no longer reaches our layout. Every window sets its own font, but
    menus did not: a menu strip has a fixed height and drew its items with the system menu
    font, so the “text size” accessibility setting could clip the captions from below. Menus
    now use the application font like everything else — the one place where that setting could
    still reach the layout.
  • A double-click on the zoom percentage resets it to 100 %, the same as a double-click on
    the “%” next to it and the same as Ctrl+0. It used to select the number instead, and a
    selection that appears out of nowhere reads as “copied to the clipboard” — a gesture that
    looks like it worked while doing nothing. A double-click on the spinner arrows still means
    two steps of zoom, not a reset.
  • The window header is vertically centred. The title and its subtitle were pinned to the
    bottom edge of the coloured band, leaving empty colour above them — which read as a header
    that had slipped down. The block now stands in the middle of the band, and the language
    globe and “Back” follow it, because they are aligned to the text and not to a literal.
  • The README badges sit on one line again. Each was on its own source line, and GitHub
    renders that as a break — the row of badges came out as a column.
  • The README contents carry the same icons as the sections they point to, and the banner
    says what the app does now — the tagline is redrawn by tools/set_banner_tagline.ps1,
    which restores the background under the line by interpolating the untouched rows around it
    instead of guessing the gradient, and shrinks the font until the line fits.
  • The download links live in one place. Four large buttons at the top of the README
    repeated the Download section word for word, and both rows were wider than the README
    column on a desktop, so they wrapped and the wrapped tail was centred — which is what
    “the links go vertical” looks like. Measured and fixed: no row now outruns the column.
  • The user guide builds its own contents page. It used to ship with an empty one and a
    line asking the reader to press Ctrl+A and F9.

Fixed

  • Cancelling during compression did nothing. Splitting a document runs in two phases,
    and the second one — compressing each part with Ghostscript — is the longer of them:
    forty parts are forty separate runs. The Cancel button was withdrawn at the start of it,
    on the grounds that the files were already written and there was no way back. Now that a
    stopped job cleans up after itself there is a way back, so the button stays and the work
    stops between parts. The one thing not interrupted is a single Ghostscript run: killing
    another process halfway leaves its temporary file behind, which is worse than waiting out
    one part. Merging still has no cancel there, and that is right — it compresses a single
    file, so there is nothing to stop between.
  • “Not enough space” now names the disk everywhere it can happen, not only in the three
    places it was first added: the Excel digest, saving pages as images, editing document
    properties, saving through Word and the text export. Some of those report a failed write
    in their own words — GDI+ answers every one of them with “a generic error occurred” — so
    when the error itself is silent about space and the drive turns out to be nearly empty,
    the message keeps what the system said and appends how much is left. A guess is marked
    as a guess; only the system's own verdict is stated as fact.
  • A paragraph beginning with an indent could be mistaken for a centred line and torn out
    into a paragraph of its own — centred, at that. A centred line was recognised by its two
    margins differing by no more than a share of the column width, and on a wide page that
    share is large enough to cover a first line that stops a couple of points short of the
    right margin. The two margins must now also be comparable to each other; a title knocked
    off the axis still passes, a first-line indent no longer does.
  • A cancelled or failed split left the files it had already written. Cancelling had
    cleaned up for a while; failing had not, on the reasoning that half a result is better
    than none. It is not: a folder holding seven parts of forty does not look incomplete —
    half a set looks like a set, and it gets carried onward as one. Whatever stopped the
    work, the work did not happen, so neither should the files. The one exception is running
    out of memory, where tidying up is more dangerous than leaving things alone.
  • “There is not enough space on the disk” now says which disk, and how much is left.
    The result goes to one folder and the temporary files to another, on a different drive,
    and either can fill up; the system's own message names neither.
  • A page whose text is part of the picture is now reported. A document that is entirely
    a scan is refused up front, but a mixed one — a few slides “printed” into the PDF as
    images — passed that gate silently, and the empty pages in the result read as a broken
    conversion rather than as a source with no text in it. The result now says how many pages
    arrived without text and why only recognition can bring it back.
  • A paragraph was often broken into separate pieces. Where the source paragraph ends was
    being guessed from the gaps between lines, and a guess is wrong often enough to be
    noticed. It usually does not have to be guessed at all: a PDF written by Word, PowerPoint
    or Acrobat carries the document structure with it — the standard has said so since
    2008 — and in it the author has already marked where one paragraph ends and the next
    begins. That mark is now read and believed. On a thirty-slide deck it takes the count of
    separate text boxes from 417 down to 277, which is exactly the number of paragraphs the
    file itself declares.
    The structure may only ever remove a break, never add one. A file that marks every
    line separately — they exist — therefore changes nothing at all instead of fragmenting
    further, and geometry keeps a veto: lines that turn out to be far apart, or side by side
    rather than one under the other, stay separate whatever the marking says. Both vetoes
    were put there by measurement, after the first version of this had merged two halves of
    one line into a column.
    Text marked as decoration is deliberately not dropped, though the standard invites it:
    on real files that mark turns out to be set on visible text — a third of a slide in one
    case, and not a single one of those letters was a duplicate of something drawn elsewhere.
  • A paragraph without capital letters sat a line too high on the slide. Text was placed
    by the top of its ink, and that top is where the tallest letter starts: a line beginning
    with a capital reaches higher than one made of lower-case letters alone. The same
    correction under both therefore lifted the second kind above its place — far enough for
    the underline, which arrives with the background as a drawn rule, to cross the words
    instead of running below them, and far enough for the line spacing inside a paragraph to
    drift as the letters changed. Placement now works from the baseline, which does not
    depend on which letters are in the line: it is read from the source, carried through page
    rotation, and the measured constants are the same numbers restated against it — a line
    starting with a capital lands exactly where it did before. Measured over a thirty-slide
    document and thirteen more decks of 584 slides: no page came out worse.
  • The first line of a paragraph sat too low when the line spacing was generous. The place
    of the first line was computed from the spacing between lines, and those are two different
    things: a spacing of one and a half describes the distance from one line to the next, not
    where the first one starts. The first line is now given no exact spacing at all, so its
    place comes from the font metrics — which is the case the constant was measured on.
  • Every line of a paragraph now carries its own indent instead of only the first. One
    paragraph is one text box, so a line that started further right — a hanging indent, a
    centred line inside a block — was being pulled to the box edge. Centring is reproduced by
    the indent rather than by the aligner for the same reason: the box width is known only to
    within the slack allowed for another engine's metrics, and centring inside an inexact box
    is an inexact place.
  • A space between two differently formatted words was lost, so “bold word” followed by
    a plain one read as one long word. A run ends where the formatting changes, which is
    precisely mid-sentence, and the space at that seam was being trimmed by the XML reader.
  • The two icons in the start screen's bottom row could not be told apart — same grey,
    on white, one at each end — and neither answered the mouse. Each now has its own colour
    and lights up under the cursor, as does the language globe on the header.
  • The PowerPoint icon was another red one. Beside the red PDF cards the dark
    orange-red read as the same colour. The icon is orange now; the tool's header band keeps
    the darker tone, because white text runs across it and a bright orange cannot carry it.
  • A release tagged with two numbers would have crashed the startup check — and with it
    the app, at launch, for everyone at once. Versions are formatted through one function now.
  • Two update windows could stack if the button was pressed within the ten seconds the
    request may take. One window at a time.
  • The tick box took the keyboard focus, so the space bar — how a dialog is usually
    dismissed — switched on “don't remind me” instead of pressing a button.
  • A confirmed “switch the history off” did nothing. While the confirmation was on
    screen the window lost and regained the focus, re-read the settings, and put the tick
    back; the answer saved after that was the old one.
  • A failed Ghostscript install passed for a successful one in CI: the package manager
    returns zero when it has installed nothing.
  • Cancelling “Save pages as images” left the images already written in the folder,
    which broke the promise every other tool keeps — a cancelled operation leaves nothing
    behind. Tools that produce a single file save it at the very end, and splitting deleted
    the parts it had produced, but this export writes one file per page and kept them. It
    deletes them now, and the rule moved into one shared place, so the next tool that writes
    file by file cannot quietly forget it.

Files: iwoHelperDesktop-1.18.0.exe / iwoHelperDesktop-1.18.0-x86.exe - portable (single file, 64-bit / 32-bit); iwoHelperDesktop-setup-1.18.0.exe / iwoHelperDesktop-setup-1.18.0-x86.exe - installers with bundled Ghostscript (per-user install, no administrator rights). Take x64 unless your Windows is 32-bit.