Skip to content

Releases: DedovMosol/iwoHelperDesktop

v1.18.4

Choose a tag to compare

@DedovMosol DedovMosol released this 10 Aug 10:21

iwo Helper Desktop v1.18.4

Changed

  • More operations UI simplified with dropdown menus. Operation buttons grouped behind two menus: "Convert..." (Save PDF, Compress, Grayscale, Repair) and "Extract..." (Pages to images with DPI submenu, Text to .txt). Print kept as separate button (frequent operation). Same functionality, less visual clutter (11 buttons → 5).
  • Per-Monitor DPI v2 support added for Windows 10 1703+. The application now declares PerMonitorV2 DPI awareness in addition to the legacy true flag, providing better scaling behavior when moving windows between monitors with different DPI settings. Falls back gracefully on older Windows versions.
  • Keyboard shortcuts enhanced for thumbnail zoom and navigation. Added Ctrl+Plus/Minus for zooming thumbnails (complementing the existing Ctrl+scroll wheel), and Home/End keys to jump to the first/last page. These shortcuts work across all PDF tools (Merge, Split, PDF → Word, PDF → PowerPoint, More operations). The keyboard step is the same one the wheel uses, and the cheat sheet (☰ Menu → Keyboard shortcuts) now lists both.
  • Page range input enhanced with presets in Split/Extract. The page range text field is now a dropdown with common presets: "All pages", "Odd pages", "Even pages", "Every 2nd", "Every 3rd", plus custom input. Select a preset and the range string (e.g., "1,3,5,7,9") is filled in automatically, ready to edit or use as-is. A preset that would be empty for the open document — there are no even pages in a one-page file — is not offered at all, and a long list is shortened in the dropdown (1,3,5,…,499) while the full range is what actually gets used. Opening another document rebuilds the presets: a range typed by hand is kept, one filled in from a preset is not, since 1-10 from a ten-page file means nothing in a three-page one.

Added

  • Nested list support in PDF → Word conversion. Lists with indentation-based hierarchy (bullet and numbered lists at multiple levels) now preserve their nesting structure in the output Word document, up to Word's nine levels. Levels are tracked as a stack of open indents, so a level is the depth of an indent rather than the order in which edges were met: an item indented between two known levels returns to the matching one instead of claiming to be deeper than all of them, and coming back to an outer indent closes the inner levels by itself. An indent step under 12 pt counts as the same level, which keeps a flat list with a ragged left edge — continuation lines, slight jitter in the extracted coordinates — from being emitted as a spurious multi-level list. Previously, all lists were flattened to a single level.

Fixed

  • A tool window could be closed while a PDF was still being parsed. The guard checked only the "operation running" flag and missed the "document loading" one, so the window closed mid-parse and the background work then reached for controls that were already gone.
  • Settings could lose a write when two windows were closed at once. Saving a setting is a read-modify-write of a single file, and it now runs under the same named mutex the usage counters and the operation history already used.

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

v1.18.3.1

Choose a tag to compare

@DedovMosol DedovMosol released this 04 Aug 08:55

iwo Helper Desktop v1.18.3.1

Changed

  • A blank sheet can now be inserted in every tool that edits pages, not only in More
    operations: Merge, Split, PDF → Word and PDF → PowerPoint have it too, from the same
    context menu. The machinery — the window's wrapper folder and the insertion itself — moved
    into the shared base, so all of them got it at once and there is one copy of it, not five.
  • The start screen opens full-screen. It was a fixed window; now it resizes and maximises
    like the tool windows, and the cards stay centred as a group rather than sticking to the
    top-left corner. Stretching them would have been worse: a card has a size at which its
    glyph, name and description read well.

Fixed

  • The start screen did not remember its size or state. It had been a fixed window, so
    there was nothing to remember; once it became resizable, that omission showed. It now
    persists like every tool window.
  • The recent-files cards now live in the bottom row, which was empty between the two
    icons anyway — so they are visible at the default window size and take nothing away from
    the tool cards. They were a separate strip at first, and since the window height is chosen
    so the tool cards fill it almost exactly, that strip only had room in a stretched window.
    If the row is too narrow for three cards, fewer are shown rather than three unreadable
    slivers — the file name is the whole point of the card.
  • The recent-files cards could sit on top of the tool cards in a small window, and in some
    cases did not appear at all. The second was the worse of the two: the cards were built in the
    constructor, before the window had a handle, so the answer from the background check had
    nowhere to be delivered. They are built on show now. As for the room they take: the window
    height was chosen so the tool cards fill it almost exactly (it already spans a 1366×768
    screen), so the strip appears only when the window is stretched enough to hold it — choosing
    a tool is what this screen is for, and nothing may cover that.

Added

  • Recent files are now cards with the glyph of the tool that made them, and they refresh
    by themselves — finish an operation in any window and the start screen shows the result at
    once, with no restart. The glyph comes from the operation rather than the extension, so a
    renamed file still shows where it came from. Clicking or pressing Enter opens it.

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

v1.18.3

Choose a tag to compare

@DedovMosol DedovMosol released this 04 Aug 08:09

iwo Helper Desktop v1.18.3

Added

  • PDF operations from the command line. Merge, extract, split (by ranges, every N, or
    bookmarks), compress, grayscale, repair, pages to images and text to .txt — the same
    operations as in the windows, for batch work and scripts. Nothing new is computed: the
    command line parses arguments into a description and hands it to the very service the
    button calls, so the two cannot drift apart in behaviour. Exit codes match the Excel mode:
    0 done, 1 failed, 2 bad usage; --help prints the list. A mistyped option gives 2 with an explanation rather
    than quietly doing something else. Sources are never modified here either: commands that
    change a file work on a copy, and input equal to output is refused.

  • Recent files on the start screen. The last few files the app produced sit in the bottom
    row as links — one click opens the one you were just working on, without hunting for the
    folder. Built on the history that was already kept, so nothing new is recorded and the
    privacy switch that turns history off turns this off too. Files that have since been moved
    or deleted are not listed: a quick-access list where half the entries fail to open is worse
    than no list. Nothing is shown at all when there is nothing to return to.

  • A blank sheet can be inserted into the page grid. In More operations, from the page grid's
    context menu: the sheet goes in after the selected page (at the end if nothing is selected) and
    takes the format of its neighbour, because a sheet of a different size in the middle of
    a document reads as a mistake rather than an intention. From there it is an ordinary page —
    move it, rotate it, print it, save it. It arrives the same way an image does: as a one-page
    wrapper in the window's temporary folder, so nothing in the grid needs a special case for it.

  • Print now shows what will come out. Choosing a printer is followed by a preview of the
    sheets, with Print and Cancel — paper is spent only after it has been looked at. The preview
    draws the very same print job that is then sent, so the two cannot disagree. It shows the
    first few sheets rather than the whole job, and says so: the question a preview answers is
    "how will this lay out", and the control it is built on renders every shown sheet at once
    and keeps the rasters — a hundred pages would mean a hundred rasters and a frozen window.
    Printing itself is unchanged: still in the background, with progress and cancellation.

  • Password-protected PDFs open now. Until this version such a file simply did not load —
    the tool refused exactly when it was needed. The password is asked for in a dialog that
    names the file, so a batch where only one document is protected makes it obvious which
    one is being asked about. A wrong password asks again and says so. Cancelling skips that
    file and the reason appears in the summary of what was not added — and the dialog warns
    about this before you cancel, rather than putting a second window in the way
    afterwards: ten protected files would otherwise mean twenty windows to close.
    The password reaches everything that opens the file — pages, thumbnails, text, document
    composition — through one registry, so it is entered once per file per session. It never
    touches the disk
    : not the settings, not the reports, not the crash log.

Fixed

  • Work that belonged in the background had slipped onto the UI thread — twice, in this very
    version.
    Inserting a blank sheet read its neighbour's size by parsing the document (278 ms
    on a 900-page file, measured), and the recent-files row called on start — about
    a second per path when the path is on a disconnected network share, which would have delayed
    the start screen by seconds. Both now run in the background, and a test pins them there,
    because catching this by hand needs an unplugged network at the right moment.
  • A failure while asking for a password could leave a window locked forever — the load
    state was never cleared, so buttons and grid stayed disabled until the tool was closed.
  • ** opened a window instead of printing help.** An unknown first argument sends the
    app down the normal GUI path, so the console got nothing at all.
  • "The file is already optimized" was a lie for scans. A four-page scan of 1.6 MB: no
    text at all, four images making up 99.8 % of the file. The "Very good" level leaves images
    alone by definition, so the rebuilt document came out 0.1 % larger, was rejected, and the
    status reported the file as already optimized — while the very same file shrank by 64 % on
    "Good" and by 88 % on "Normal". The message was formally true and substantially false.
    When compression gains nothing, the document is now looked at: if it is mostly images and
    the chosen level does not recompute them, the status says so and points at what to pick
    instead. The look costs nothing on the normal path — it only happens when compression
    already failed to help.
  • Merging and splitting silently dropped the table of contents. Pages were copied one by
    one, and the bookmarks stayed behind in the source: a four-page document with three
    bookmarks came out of a merge with none, and out of a split with none. The file opened,
    looked intact, and had lost its navigation — the worst kind of data loss, because nothing
    reports it. Bookmarks are now carried across in all five paths (merge, extract, by ranges,
    every N, by bookmarks), pointing at wherever their page ended up: reverse the page order
    and the contents follow. A bookmark whose page did not make it into the result is dropped,
    but its children are lifted to the freed level rather than vanishing with it — removing one
    section must not take half the contents with it.

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

v1.18.2

Choose a tag to compare

@DedovMosol DedovMosol released this 03 Aug 14:28

iwo Helper Desktop v1.18.2

Added

  • A compression level that leaves the pictures alone. Between "Excellent — no
    compression" and "Good — 150 dpi" there was a cliff: either the file stayed as it was, or
    every image in it was recomputed. Most documents need neither — they are already made of
    text, and the bytes sit in how the file is put together. "Very good — smaller, image
    resolution kept"
    rebuilds the document without touching a single picture: pages are
    re-packed, identical images stored once, leftovers not carried over. Measured on four
    documents: 25 % to 48 % smaller at untouched resolution, and on a file built from repeated
    images — 136 times smaller.
    It is deliberately not called "lossless". The document is rebuilt, and its rendered page
    differs from the source by hundredths of a tone; what is guaranteed is the images, and the
    label says exactly that and nothing more.
    The promise is held by our own arguments (-dDownsample*Images=false), not by the engine's
    defaults: the portable build runs on whatever Ghostscript the machine has, and its version
    is not ours to assume.
  • The number of a compression level is now an identifier, not a position. Levels are
    stored in settings.txt as numbers, so the new one was appended at the END of the
    enumeration even though it belongs in the middle of the list — otherwise everyone who had
    picked "Good" would have silently ended up on a different level after updating. The order
    shown in the list lives separately, in one place, and a test pins both.

Fixed

  • Grayscale no longer reports success it cannot vouch for. The engine exits with zero
    even when part of the content stays coloured — colour arrives through ICC profiles,
    palettes and transparency groups, and no list of switches covers all of them in advance.
    The result is now looked at: pages are rendered and searched for saturated pixels, and a
    document that did not come out grey is not passed off as done. The check can only
    disprove — if a page cannot be rendered at all (old Windows, no WinRT), that is not
    treated as "still coloured", or the feature would break on the very machines where it
    used to work.

  • The grayscale switch that documentation asks not to use. -dProcessColorModel=/DeviceGray
    stood next to -sColorConversionStrategy=Gray with a comment claiming both were required.
    That knowledge predates Ghostscript 9.11: the docs state the strategy sets the model itself
    and that specifying both should be avoided, and bug 693074 is filed on this exact pair
    ("some images are not converted"). Verified on eight probes — vector, colour JPEG, CMYK,
    indexed palette, Separation, transparency group, soft mask, real transparency: the strategy
    alone converts all of them, leaving only DeviceGray inside the file.

  • Every Ghostscript run is now checked for having kept the document. The old test was the
    first five bytes being %PDF-; a stunted output passed it. Now the pages are counted before
    and after, and a result that lost or gained pages is rejected — one rule for compression,
    grayscale and repair alike, and lenient exactly where there is nothing to compare against
    (repair opens a file that is broken by definition).
    The pages are counted with PdfPig, not PdfSharp, and that is load-bearing: PdfSharp 1.50
    cannot read object streams (PDF 1.5+), which Word and Acrobat write by default, so counting
    with it would have turned a healthy compression into "could not compress" on such files. A
    live test pins this.

  • A silent status when compression gained nothing. Choosing "Compression" in Merge or
    Split and getting a plain "Pages saved: 10" left no way to tell whether it had worked.
    Requested compression that did not make the file smaller now says so. "More operations"
    already did; the other two stayed quiet.

  • A page at the format's limit could cost the colour check 400 MB. PDF allows a sheet of
    14400 pt at a width of a few, and the check renders by width — so the raster grew to
    140 × 672000 pixels. It was not caught by reasoning: on the development machine the system
    renderer declines such a page outright and costs nothing, and only the build machine drew
    it in full. The renderer now takes an optional ceiling on raster height and the check uses
    it: the same sheet costs 19 KB, and — a second gain — it is now actually examined instead
    of being silently skipped. Thumbnails and the preview are untouched: their width is given
    and a long page simply comes out a narrow strip.

Changed

  • The check of a converted file is no longer wired into the compression class: the pipeline
    guarantees the document survived, the caller adds what only it can judge — size for
    compression, absence of colour for grayscale. Three call sites, one rule each.
  • The status line no longer names a resolution where none was applied: a level that keeps
    the pictures reports "image resolution kept" instead of "images to 0 dpi".

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

v1.18.1

Choose a tag to compare

@DedovMosol DedovMosol released this 30 Jul 11:34

iwo Helper Desktop v1.18.1

Added

  • More operations became a page workshop. Its grid used to be a viewer: the pages of the
    open document could be looked at and nothing else, because every action was a copy of the
    file. Now the pages are reordered by dragging, rotated, removed, cut and pasted, undone with
    Ctrl+Z — exactly as in the other tools — and every action applies to the document as it is
    assembled on screen
    , not to the file on disk. Compression, grayscale, images, text, print
    and properties all take the assembled document; until the pages are touched the source is
    simply copied, so nothing became slower for the ordinary case.
    The window says so plainly: while the grid differs from the file, the status line reports how
    many pages are assembled in it. A window that shows one thing and does another is the worst
    kind of correct.
  • Images become pages. Photos and scans (JPEG, PNG, BMP, GIF, TIFF, including multi-page
    TIFF) are added to the same grid with "Add images..." or by dropping them on the window, on
    the grid or on the tool's card. Each image becomes an A4 sheet with 1 cm margins, fitted whole
    and centred without distorting its proportions, and the sheet takes the orientation of the
    image. From there it is an ordinary page: rotate it, reorder it, print it, compress it.
    It went into this window rather than into a seventh one because everything one does with such
    a page — turning, ordering, compressing, printing — already lives here.
    A JPEG is carried into the PDF as it is, without re-encoding: a 12-megapixel photo would
    otherwise bloat the file and lose quality for nothing. Transparency lands on white (without
    it a PNG arrives as black patches), and the EXIF orientation tag is applied — GDI+ ignores it,
    which is why a phone photo used to lie on its side.
  • "Save PDF..." in More operations. The assembled document becomes a new file: that is how
    images turn into a document, and how a reordered, rotated or thinned-out PDF turns into one.
    The compression level comes from the same list at the bottom of the window. Cancelling leaves
    no half-written file, as everywhere else.
  • Print in More operations. The selected pages (or all of them) go to a printer with the
    rotations assigned to them.

Fixed

  • The beta note in PDF → Word and PDF → PowerPoint was cut off. Its height was a number
    (two lines), so the tail of the sentence disappeared under the grid: 2 pixels short at the
    normal font, and a whole line and a half missing with a large system font — the reader saw a
    truncated phrase and never learned the main thing, that a scan cannot be converted at all.
    The height is now measured from the text at the current width, and the grid and the buttons
    move down by exactly as much as the note took. A live test measures the note in a real window
    at its minimum size, at the normal font and at a large one.
  • Ctrl+Z did not undo a rotation in Split PDF. The rotation went into the history, but the
    key was locked behind the right to reorder pages, which that window does not grant — so the
    undo existed and was unreachable. The keyboard cheat sheet promised it just as inconsistently.

Changed

  • The layer "page order ↔ grid" now lives in one place for all tools (PdfPageOrderFormBase):
    the multi-file tools and the single-document ones share it instead of holding two copies. The
    minimum height of the More operations window is computed from the panel it actually built,
    not written as a number — the previous number was already wrong once on a screen with a
    different scale factor.

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

v1.18.0

Choose a tag to compare

@DedovMosol DedovMosol released this 29 Jul 19:45

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...
Read more

v1.17.9

Choose a tag to compare

@DedovMosol DedovMosol released this 27 Jul 18:59

iwo Helper Desktop v1.17.9

Added

  • A start screen with two sections. The hub now asks for a section first — PDF or
    Other tools — and shows the tools inside it. The window keeps one size on every screen so
    it never jumps, Esc and a “Back” button in the header return to the top, and “Home” inside a
    tool comes back to its own section rather than the top screen, so hopping between PDF tools
    still costs one click. Dropping PDFs onto the “PDF” card carries them inside: the header says
    how many files are waiting and the next tool you pick opens with them.
  • “More operations” — a window of its own (PDF section). Six actions over a single document
    that until now hid in a “More actions” menu inside Split, where nobody found them: compress,
    convert to grayscale, repair a damaged file, save pages as images, extract the text to a
    .txt, edit the document properties. Split keeps a one-click bridge that hands the open
    document over, so nothing has to be opened twice.
  • Merge hands its result on. “☰ Menu → More operations” continues the work on the file you
    have just saved — compress it, drop the colour, fix its properties — without hunting for it on
    disk. Split has the same bridge for the document it has open, and both open the window even
    when there is nothing to hand over yet: an entry that answers a click with an explanation of
    why it does nothing reads as broken. PDF → Word deliberately has no bridge: it cannot name a
    single PDF, its sources are many and its result is a .docx.
  • Compressing a single file is a real operation at last. Until now compression only existed
    as an afterthought of merging and splitting. It writes a copy — sources are never modified —
    and if the file is already optimized it says so instead of silently returning the same bytes.
  • The user guide ships inside the program. “About” has a new line, “User guide: open”, which
    unpacks the document next to the settings and opens it. It works in the portable build too and
    needs no internet, which is the whole point of an offline app.
  • The full-size preview can be minimized. The minimize box and a taskbar button of its own
    come as a pair: the preview is modal, so a minimized window without a taskbar button could not
    have been brought back at all.

Changed

  • “◀ Earlier” / “Later ▶” became “◀ Move left” / “Move right ▶”. A bare “Earlier” on a button
    reads as “in the past”, not as an action. The grid is horizontal, the arrows are on the buttons
    and the shortcuts are Alt+←/→, so the axis is what the eye follows. The tooltip stays ordinal
    — “move the page one position earlier” — because at a row wrap “to the left” stops being true.

  • “Excel Digest” is now “Merge Excel”, in a pair with “Merge PDF”. The result is still
    called a digest: a digest is what merging workbooks produces.

  • The language globe sits where the eye looks for it — centred against the title and the
    subtitle instead of hanging above them. The position is computed from the real font heights,
    so it stays centred at any display scale.

  • “Document properties” was laid out again. The buttons overlapped the last field by a pixel
    and the fields had three pixels between groups: the layout was computed from literals, while
    WinForms sizes a single-line text box by its font and ignores the height you set. Everything is
    measured now, the window says which file it edits, and it states that an empty field clears the
    property.

  • A card's contents stand in the middle of it. The icon, the title and the description were
    pinned to the top of the card, so a short description left an empty strip at the bottom and the
    card looked unfinished. The block is measured and centred now, with both texts laid out by the
    same rules they are drawn with.

  • Buttons say when they cannot be pressed. An unavailable ordinary button used to differ
    from a working one by the colour of its caption alone, and in panels where half the buttons
    wait for an open document that had to be found out by clicking. It is filled now, so the state
    reads at a glance. The corner radius follows the height by one formula instead of a step at
    36 px, the focus ring is solid rather than translucent so keyboard users can see where they
    are, and a long caption is now cut with an ellipsis before it reaches the rounded corner. The
    zoom bar of the full-size preview was the only place with square buttons and colours of its
    own — it uses the same button as the rest of the app, in a variant for a dark background.

Fixed

  • The page in the full-size preview no longer hides in the grey. Its position was computed in
    the window's coordinates while the viewport was scrolled — WinForms keeps a child control in
    content coordinates, so the origin drifted by the scroll on every zoom step and accumulated.
    Enlarging or maximizing the window did not re-centre the page at all, and a stale scrollable
    area left phantom scrollbars behind. All three are fixed, and the centring maths moved into a
    pure function under unit tests.
  • The language chosen in the installer reaches the program on a reinstall. Setup used to
    write the language straight into settings.txt and only when that file did not exist yet, so
    choosing English over an existing Russian installation changed nothing. It now hands the choice
    over in a separate one-line file that the program applies once at startup and removes. Setup
    never touches settings.txt, which is what protected the non-ASCII paths inside it.
  • Ghostscript reporting success on a file it could not read. On a password-protected document
    the engine exits with zero and still leaves a valid-looking two-kilobyte stub, which passed both
    replacement policies: “Repair a damaged PDF” and “Convert to grayscale” answered with a green
    “Done” and an empty document. The engine's own error marker in its error stream is what counts
    now, not the exit code.
  • The preview's zoom bar at display scales above 100 %. The window is deliberately not
    auto-scaled (its size is measured in physical pixels), so the bar stayed in fixed pixels while
    the font grew with the screen: at 150 % every caption on it was clipped. The bar is measured
    from the current scale now, and the window's minimum size comes from the bar's real width — the
    “Print” button used to sit outside a window squeezed to its minimum.
  • “Check for updates” no longer swallows a browser that will not start. Answering “Yes” to
    the new-version question opened the release page and, if the system had no browser to open it
    with, did nothing at all — the failure was caught and dropped. The address is shown now, so the
    page can be reached by hand.
  • Two button captions were being cut with an ellipsis. Split's “More operations” read “More
    opera…” — the right-hand panel was 16 px too narrow, and it cannot grow downwards, since at the
    window's minimum height a second row of buttons lands on the bottom strip. The panel is wider
    now. The other one had shipped: the “Move after page N…” dialog sized its buttons by a constant
    that was measured in the window's font, while the primary button is set larger and bold, so
    “Переместить” needed 120 px in a 112 px button. Both buttons of that dialog are measured in
    their own font now and grow with the caption. A test opens every window and every dialog and
    fails on any caption that does not fit — clipping is silent, and the eye does not audit fifty
    buttons.
  • Gaps between the buttons of the right-hand panels differed between Merge and PDF → Word. They
    follow one rhythm now.

Documentation

  • The user guide matches the program again (docs/Инструкция пользователя.docx, also shipped
    inside the exe). All 26 figures are fresh captures of the real 1.17.9 windows: the two-level
    start screen, the “More operations” window and its resolution menu are new, and the “More
    actions” menu that no longer exists is gone. The text follows: five tools instead of four, the
    chapter order of the start screen (PDF first, Excel behind it), a chapter of its own for “More
    operations”, the renamed buttons, and the new lines in About and in the troubleshooting table.
    The build now also checks that every caption the guide quotes actually exists in the program's
    catalog — it is what caught “Раньше”, “Позже”, “Доп. действия” and “Свод Excel”.

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

v1.17.8

Choose a tag to compare

@DedovMosol DedovMosol released this 27 Jul 07:40

iwo Helper Desktop v1.17.8

Added

  • Printing, on every PDF screen. A “Print” button on Merge, Split and PDF → Word prints the
    pages you selected, or all of them if you selected none, and the full-size preview has one too
    alongside its right-click entry. Pages are rendered at 200 dpi and fitted into the sheet whole
    and centred — stretching a page to the edges would crop the margins, which is where signatures
    and page numbers live — and a rotation you set in the grid reaches the paper as well.
  • Zoom and pan in the full-size preview. The page you open by double-clicking a tile now
    has a magnifier: − / + buttons, Ctrl+wheel, a “fit to window” button and Ctrl+0 for actual
    size. Zooming with the wheel keeps the point under the cursor in place — you magnify what you
    are looking at, not the middle of the page — and once the page is larger than the window you
    drag it with the hand cursor. Esc and the close button close it.
  • Assemble a double-sided scan (Merge → menu). For a scanner that takes one side at a time:
    scan the stack face up, flip it, scan again, add both files and use this item. The app asks
    whether the second file came out in reverse and lays the pages out as 1, 2, 3, 4… A single
    Ctrl+Z puts the order back.
  • Save pages as images (Split → “More with this document”): PNG or JPEG at 96, 150, 300 or
    600 dpi, either the selected pages or all of them. The resolution is applied to each page's
    real paper size, so a landscape insert is not stretched. JPEG is written at quality 90 rather
    than the default 75, which shows up as rings around letters on scans.
  • Extract the text layer to a .txt (Split → “More with this document”). Tables are kept: the
    analysis moves table words out of the paragraph stream, so a naive dump would lose them
    entirely — cells come out separated by tabs and paste into a spreadsheet as a table. Pages are
    separated by a form feed, as pdftotext does, and the file is UTF-8 with a byte-order mark so
    Notepad shows Cyrillic correctly.
  • Name the split parts yourself (Split → “How to name the parts”). Right-clicking the field
    inserts the available keywords: [BASENAME], [FILENUMBER], [CURRENTPAGE], [BOOKMARK],
    [TIMESTAMP]. Hashes pad with zeros ([FILENUMBER###] → 001) and a number offsets the
    count ([FILENUMBER10] → 11). The field is optional on purpose: left empty, the parts get
    exactly the names they got before, so a new capability does not rename anyone's files.
  • Print on both sides without a document starting on a back (Merge → “Add a blank page”): a
    blank page is added after a document with an odd page count so the next one starts on the
    front of a sheet. The last document is deliberately not padded — nothing is printed after
    it. The blanks are added when the file is written, not kept in the page grid: putting them
    in the model would mean drawing them as tiles, carrying them through the clipboard and undo
    and forbidding them in PDF → Word, which is a lot of risk for a print-time detail.
  • Edit document properties — title, author, subject, keywords (Split → “More with this
    document”). Clearing a field removes the property, which is how an author's name is taken
    out of a file before sending it. The result is written to a new file.
  • Select odd or even pages from the page grid's context menu — the two sides of a
    double-sided stack, so rotating or deleting one side no longer means ticking fifty tiles.
  • Convert to grayscale and repair a damaged PDF (Split → “More with this document”).
    Repair rewrites the file through the PDF engine, which is what fixes a broken cross-reference
    table — the usual “this file is damaged”. It picks the file with its own dialog, because a
    damaged document cannot be opened into the grid in the first place, and that is exactly when
    it is needed. Both write a new file: the app never modifies a source.

Changed

  • The extra tools are reachable from a button called “More actions…”, sitting with the other
    inputs in Split, and it opens downwards instead of over the top of the window. Five
    capabilities behind a hamburger submenu were, in practice, invisible; that submenu is gone,
    so there is one list and one way to reach it.
  • The in-app instructions match the app again — they now describe printing, the extra
    actions, the part-name template, interleaving and double-sided padding.
  • Changing the language no longer throws every window at you. Rebuilding the windows in the
    new language used to bring each of them to the front and restore the minimized ones. Only the
    window you were working in comes forward now; the rest update where they stand.
  • Everything that writes a result beside a source now refuses to write over it. The app
    does not modify sources, and writing a file into itself would have damaged it as well — the
    source is open for reading at that moment.
  • The compression levels name their resolution — “Good — smaller size (150 dpi)” instead of
    “Good — smaller size”. The number comes from the same place the engine arguments do, so the
    label cannot promise one thing while the engine does another.
  • The shared Ghostscript pipeline (run, validate, replace only on success, restore the original
    on any failure) is now one piece of code used by compression and by both new conversions. They
    differ only in arguments and in when a replacement is allowed: compression replaces the file
    only if it got smaller, while grayscale and repair apply whenever the result is sound.
  • One file-name sanitiser instead of two that had drifted apart. The surviving one also trims
    trailing dots and caps the length, which protects split-by-bookmark names from the path-length
    limit.
  • The description in “About” is justified, the way a paragraph of body text is set, and it is
    still selectable so the text can be copied.

Fixed

  • A minimized start screen was lost when the language changed. Windows are rebuilt in the new
    language on the spot they occupied, but a minimized window reports a position far outside every
    screen (-32000, -32000) and that position was copied onto the new start screen. It came back as
    an ordinary window parked past the edge of the desktop: listed in the taskbar, absent from the
    screen, and “Home” appeared to do nothing at all. This happened from any of the four tools, not
    just one. Placement is now read and applied exactly the way the app already stored it between
    runs — restored size and position together with the window state — so a minimized window stays
    minimized and comes back where it was. That rule lives in one place instead of two that had
    drifted apart, and a test drives a real rebuild with the start screen minimized.

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

v1.17.7

Choose a tag to compare

@DedovMosol DedovMosol released this 26 Jul 18:31

iwo Helper Desktop v1.17.7

Fixed

  • The MIT licence text was damaged. One line of the permission grant read “to permit
    persons a side the Software is furnished to do so” instead of “to permit persons to
    whom
    the Software is furnished to do so”, in both the repository licence and the copy
    shown by the installer. GitHub could not recognise the file as MIT because of it. The
    canonical wording is restored in both files, verbatim.
  • Closing a PDF window could hang for two seconds and leak memory. The thumbnail
    renderer is asked to stop through a signal, and the render thread could clear that signal
    in the same instant it arrived — after which it waited forever. The window then sat out
    its two-second timeout on close, and the renderer, which holds a full in-memory copy of
    every PDF it has open, was never released for the rest of the session.
  • A window busy reading a PDF lost its work when the language changed. Only a running
    operation counted as “busy”, so switching language while a large or network PDF was still
    being read closed the window mid-read. The freshly opened one came up empty, with nothing
    said about the file that had been loading.
  • The Excel Digest window broke when dragged to its smallest size. “Uncheck all” ended
    up below the bottom edge of the window and “Check all” disappeared underneath “Retry
    skipped” — and that broken size was then remembered between runs. The minimum height is
    now derived from the actual layout instead of a constant that had drifted away from it.
  • Every tool window opened with the focus on “Home”, so pressing Enter right after
    opening one returned to the start screen without doing anything. The header really is last
    in the tab order now, and the focus lands on the first useful control.
  • The window header was clipped from 125% display scaling upwards. Title and subtitle
    were drawn into fixed-height boxes while their fonts grow with the scale, slicing off the
    bottom of the letters. Both rows are measured from the fonts now.
  • Merging with compression looked frozen. The bar reached 100%, Cancel disappeared, and
    the window then sat still for the whole compression run. Compression now names itself in
    the status line and shows a moving bar, since its progress cannot be measured.
  • Long messages ran off the edge of the Excel Digest window, cut mid-word with no
    ellipsis. Both lines now shorten with “…” and show the full text on hover, as the PDF
    tools already did.
  • A list item numbered with a non-ASCII digit silently lost its number when written to
    Word.
  • Enter did nothing in PDF Split while it started the action in the other two PDF tools,
    and “Combine into one file” stayed clickable during a split.
  • Checking for updates gave no sign of life: the button stayed lit through a request
    that can take ten seconds, and repeated clicks stacked up identical error dialogs.
  • “About” and the page-number prompts showed a generic window icon, unlike every other
    dialog.
  • The language globe on the start screen could not be reached from the keyboard, and would
    have been invisible on Windows 8.1, whose icon font does not have it — it now falls back to
    the flag of the current language and answers Enter and Space.

Changed

  • Window position memory is wired in one place. Windows used to restore and save their
    bounds through a pair of overrides each, which is easy to half-remove without noticing.
    They now attach it with a single call, and a test opens each of those windows for real to
    prove the memory still works — a silent loss of it would otherwise go unnoticed.
  • The shared parts really are shared now. The dialog frame, the rounded-rectangle
    outline, “select all rows”, the PDF file picker and the “operation finished” epilogue each
    lived in three or four copies that had begun to drift apart — one was missing the window
    icon, another the guard against a degenerate corner radius.
  • The taskbar progress object is released deterministically, like every other COM object in
    the app, and process handles are closed at the six places that open a file or a folder.

Testing

  • Windows are opened for real and squeezed to their minimum size, with every control checked
    for staying inside the window and no two buttons overlapping; the tab order of each tool
    window is checked the same way. Both layout defects above were caught by these checks
    before they were fixed.
  • Twelve new checks cover logic that had none: the median behind every PDF layout threshold,
    the X-Y cut tree the header tables are built from, the missing-key fallback of the string
    catalog, the compression labels, cancellation, the screen chosen when restoring a window,
    the UI-thread delivery guard, and the rule that keeps a chosen language from being
    overwritten by a stale window.
  • Two checks that could never fail were repaired: one compared two nulls, the other kept its
    only assertion inside a loop that an empty result skipped entirely.
  • The runner refuses to pass if the number of checks drops, so a deleted one cannot slip by.
  • Continuous integration installs Ghostscript before running the checks, so the
    compression round-trip is actually exercised instead of silently skipped; it builds the
    checks for the architecture under test (the 32-bit branches had never been run); and the
    thumbnail check now reports “nothing was rendered” as a failure instead of success.

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

v1.17.6

Choose a tag to compare

@DedovMosol DedovMosol released this 26 Jul 13:54

iwo Helper Desktop v1.17.6

Added

  • Rotate a page while previewing it. Right‑click the full‑size preview (double‑click a
    tile to open it) for “rotate right / left 90°”, the same Ctrl+Shift+“+” / “−” as in the
    grid. The thumbnail follows immediately and the rotation joins the undo history, so
    Ctrl+Z takes it back like any other change.
  • The preview remembers its size. The full‑size preview reopens at the size and
    position you left it, maximised included, restored safely onto a visible screen.

Fixed

  • The installer stayed English after Russian was chosen. Setup remembered the language
    of the previous installation and let it override the system language, and the restart
    that applies a newly chosen language never happened because Setup cannot launch its own
    file while it is running. Setup now follows the system language, hands the restart to the
    command processor, and says so instead of staying silent if that restart fails. The
    choice on the flag screen becomes the app language even in that case, and the picker's
    buttons no longer share a value with “dialog closed”, which used to read as a choice.
  • A language switch left a folder behind in %TEMP%. The instance being replaced ends
    abruptly, which skips Setup's own cleanup, so its temporary folder now gets removed
    right after it exits.
  • Right‑clicking the preview closed it. The click that opened the context menu also
    reached the close handler, because in Windows Forms a plain click event fires for the
    right button too.
  • Launching the app twice started a second process. A second launch now wakes the
    running one and brings its window back instead of adding another entry to Task Manager.
    Tool windows stay independent of the hub exactly as before.

Changed

  • Result messages name the compression resolution. “Pages saved: 12 · compressed,
    images to 150 dpi” instead of a bare “compressed”, so it is clear what changed. Extracted
    pages are counted too, and the punctuation of these lines is assembled in one place.
  • Clearer drag‑and‑drop wording. Every hint uses the imperative “drag it onto the
    program window” and names the drop target, following the Microsoft terminology.
  • The About window is readable and copyable. The description can be selected and
    copied, it states that only born‑digital PDFs convert to Word (scans are not supported
    yet), and the copyright with the licence moved to the bottom‑left corner.

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